Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

DODATEK B

=========

KNJIŽNICA LIBPARTNER

Knjižnica libpartner je standardna knjižnica za neposreden dostop do strojne opreme računalnika Iskra Delta Partner. Pokriva upravljanje konzole, BCD aritmetiko, realni časovnik, serijska vrata in miško. Vsaka vsebinska skupina je urejena v ločen glavi datoteki; posamezno skupino vključite z ustrezno direktivo, na primer:

#include <partner/conio.h>

Knjižnica je namenjena programom, prevedenim z navzkrižnim prevajalnikom za procesor Zilog Z80, in deluje skupaj z operacijskim sistemom CP/M, ki ga uporablja Partner.

Razdelki tega dodatka so:

  • B.1 CONIO.H – konzolni vhod/izhod in upravljanje zaslona SCN2674
  • B.2 BCD.H – pretvorba med dvojiškim in BCD zapisom
  • B.3 TIMER.H – meritev časa
  • B.4 SERIAL.H – serijska komunikacija prek vrat SIO
  • B.5 MOUSE.H – serijska miška
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

B.1 CONIO.H

Glava <partner/conio.h> vsebuje funkcije za upravljanje konzole, zaslona in tipkovnice. Poleg standardnih rutin za vnos in izpis vključuje tudi neposreden dostop do krmilnika zaslona SCN2674.

Tipi in konstante

#define AT_NORMAL    0x00   /* normalen atribut */
#define AT_BLINK     0x01   /* utripanje */
#define AT_UNDERLINE 0x02   /* podčrtano */
#define AT_HIGHLIGHT 0x10   /* poudarjeno */
#define AT_REVERSE   0x20   /* invertirano */

#define NOCURSOR     0      /* skrij kazalec */
#define NORMALCURSOR 1      /* prikaži kazalec */

struct text_info {
    unsigned char attr;         /* trenutni atribut */
    unsigned char screenheight; /* višina zaslona v vrsticah */
    unsigned char screenwidth;  /* širina zaslona v stolpcih */
    unsigned char curx;         /* stolpec kazalca (0-osnovan) */
    unsigned char cury;         /* vrstica kazalca (0-osnovana) */
};

kbhit()

#include <partner/conio.h>

int kbhit(void);

Vrne: vrednost, ki ni nič, če je na voljo neprebran znak s tipkovnice; sicer 0.

Opis: Preveri, ali je bila pritisnjena tipka, ne da bi blokirala izvajanje programa. Odvisno od nastavitve zaledja deluje prek klica BDOS ali z neposrednim anketiranjem SIO vrat.

Sorodne funkcije: kbhit_set_bdos(), kbd_poll_key()

if (kbhit()) {
    char c = kbd_poll_key();
    cprintf("Pritisnjena tipka: %c\r\n", c);
}
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

kbhit_set_bdos()

#include <partner/conio.h>

void kbhit_set_bdos(bool use_bdos);
  • use_bdostrue za BDOS zaledje, false za neposredno anketiranje SIO

Vrne: nič.

Opis: Nastavi zaledje, ki ga uporablja funkcija kbhit(). Privzeto deluje prek klica BDOS; pri neposrednem anketiranju mora biti SIO predhodno konfiguriran.

Sorodne funkcije: kbhit()

/* Preklopimo na neposredno anketiranje */
kbhit_set_bdos(false);

gotoxy()

#include <partner/conio.h>

void gotoxy(int x, int y);
  • x – stolpec (0-osnovan)
  • y – vrstica (0-osnovana)

Vrne: nič.

Opis: Premakne kazalec na podano pozicijo zaslona. Koordinate so 0-osnovane; izhodišče (0,0) je zgornji levi kot zaslona.

Sorodne funkcije: wherex(), wherey()

gotoxy(0, 0);
cputs("Pozdravljeni!");

clrscr()

#include <partner/conio.h>

void clrscr(void);

Vrne: nič.

Opis: Počisti celoten zaslon in premakne kazalec v izhodišče (0,0).

Sorodne funkcije: gotoxy()

clrscr();
gotoxy(10, 5);
cputs("Nov zaslon.");

setattr()

#include <partner/conio.h>

void setattr(unsigned char attr);
  • attr – kombinacija konstant AT_*

Vrne: nič.

Opis: Nastavi atribut znakov za vse nadaljnje pisanje na zaslon. Konstante AT_* je mogoče kombinirati z bitnim ALI, na primer AT_HIGHLIGHT | AT_UNDERLINE.

Sorodne funkcije: gettextinfo()

setattr(AT_HIGHLIGHT | AT_UNDERLINE);
cputs("Poudarjeno podčrtano");
setattr(AT_NORMAL);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

gettextinfo()

#include <partner/conio.h>

void gettextinfo(struct text_info *r);
  • r – kazalec na strukturo text_info, kamor se shranijo podatki

Vrne: nič; rezultat se zapiše v *r.

Opis: Prebere trenutne dimenzije zaslona, pozicijo kazalca in aktiven atribut ter jih shrani v podano strukturo. Funkcija je koristna pri shranjevanju stanja zaslona pred začasnim prepisovanjem.

Sorodne funkcije: wherex(), wherey(), setattr()

struct text_info ti;
gettextinfo(&ti);
cprintf("Zaslon: %dx%d\r\n",
        ti.screenwidth, ti.screenheight);

putch()

#include <partner/conio.h>

int putch(int c);
  • c – znak za izpis

Vrne: izpisani znak kot int.

Opis: Hitro zapiše en znak na konzolo na trenutni poziciji kazalca z aktivnim atributom. Deluje neposredno prek krmilnika SCN2674, brez vmesnega pomnilnika.

Sorodne funkcije: cputs(), cprintf()

putch('A');
putch('\r');
putch('\n');

rdchat()

#include <partner/conio.h>

void rdchat(char *c, unsigned char *attr);
  • c – kazalec, kamor se shrani prebrani znak
  • attr – kazalec, kamor se shrani prebrani atribut

Vrne: nič; vrednosti se shranita v *c in *attr.

Opis: Prebere znak in njegov atribut z mesta, kjer se nahaja kazalec. Funkcija je koristna pri branju vsebine zaslona ali pri shranjevanju znakov pred prepisovanjem.

Sorodne funkcije: putch()

char ch;
unsigned char at;
rdchat(&ch, &at);
cprintf("Znak: %c, atribut: %02X\r\n", ch, at);

cputs()

#include <partner/conio.h>

int cputs(const char *str);
  • str – niz, ki se konča z '\0'

Vrne: zadnji izpisani znak kot int.

Opis: Hitro zapiše niz znakov na konzolo brez pretvorbe '\n'. Za prelom vrstice na konzoli CP/M je treba eksplicitno vključiti zaporedje "\r\n".

Sorodne funkcije: putch(), cprintf()

cputs("Vrstica ena\r\n");
cputs("Vrstica dve\r\n");
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

cprintf()

#include <partner/conio.h>

int cprintf(const char *fmt, ...);
  • fmt – formatni niz (enako kot pri printf())
  • ... – spremenljivo število argumentov

Vrne: število izpisanih znakov.

Opis: Formatiran izpis na konzolo, enakovreden standardnemu printf(), toda neposredno namenjen konzoli Partner. Za prelom vrstice uporabite "\r\n".

Sorodne funkcije: cputs(), putch()

int n = 42;
cprintf("Vrednost: %d\r\n", n);

wherex()

#include <partner/conio.h>

int wherex(void);

Vrne: trenutni stolpec kazalca (0-osnovan).

Opis: Vrne vodoravni položaj kazalca na zaslonu. Vrednost 0 pomeni skrajno levi stolpec.

Sorodne funkcije: wherey(), gotoxy(), gettextinfo()

int col = wherex();
cprintf("Stolpec: %d\r\n", col);

wherey()

#include <partner/conio.h>

int wherey(void);

Vrne: trenutno vrstico kazalca (0-osnovano).

Opis: Vrne navpični položaj kazalca na zaslonu. Vrednost 0 pomeni zgornjo vrstico zaslona.

Sorodne funkcije: wherex(), gotoxy(), gettextinfo()

int vrs = wherey();
cprintf("Vrstica: %d\r\n", vrs);

setcursortype()

#include <partner/conio.h>

void setcursortype(int cur_t);
  • cur_tNOCURSOR za skritje ali NORMALCURSOR za prikaz

Vrne: nič.

Opis: Nastavi vidnost strojnega kazalca krmilnika SCN2674. Skriti kazalec je primeren med risanjem ali izpisom, ko mežikanje kazalca moti prikaz.

Sorodne funkcije:

setcursortype(NOCURSOR);
clrscr();
setcursortype(NORMALCURSOR);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

kbd_beep()

#include <partner/conio.h>

void kbd_beep(bool long_beep);
  • long_beeptrue za dolg pisk, false za kratek pisk

Vrne: nič.

Opis: Sproži zvočni signal prek zvočnika tipkovnice. Kratek pisk se tipično uporablja za potrditev vnosa, dolg pisk za sporočanje napake.

Sorodne funkcije: kbhit(), kbd_poll_key()

/* Kratek potrditveni pisk */
kbd_beep(false);
/* Opozorilni dolgi pisk */
kbd_beep(true);

kbd_poll_key()

#include <partner/conio.h>

char kbd_poll_key(void);

Vrne: ASCII vrednost pritisnjene tipke ali 0, če tipka ni na voljo.

Opis: Neposredno anketira tipkovnico prek SIO vrat in vrne surovo vrednost znaka. SIO mora biti pred klicem ustrezno konfiguriran. Funkcija ne blokira.

Sorodne funkcije: kbhit(), kbhit_set_bdos()

char k = kbd_poll_key();
if (k)
    cprintf("Tipka: %c\r\n", k);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

B.2 BCD.H

Glava <partner/bcd.h> vsebuje funkciji za pretvorbo med dvojiškim in BCD (Binary Coded Decimal) zapisom. V BCD zapisu vsak nibble (4 bite) hrani eno decimalno številko; tako na primer vrednost 0x42 pomeni decimalno število 42. Format BCD se pogosto uporablja pri realnem časovniku.

bin2bcd()

#include <partner/bcd.h>

uint8_t bin2bcd(uint8_t bin);
  • bin – 8-bitna dvojiška vrednost (0–99)

Vrne: ustrezna vrednost v pakiranem BCD zapisu.

Opis: Pretvori 8-bitno dvojiško vrednost v pakirani BCD zapis. Vrednost mora biti v območju 0–99; za vrednost 42 vrne 0x42.

Sorodne funkcije: bcd2bin()

uint8_t bcd = bin2bcd(42); /* 0x42 */
cprintf("BCD: %02X\r\n", bcd);

bcd2bin()

#include <partner/bcd.h>

uint8_t bcd2bin(uint8_t bcd);
  • bcd – pakirani BCD bajt (npr. 0x59 za 59)

Vrne: ustrezna 8-bitna dvojiška vrednost.

Opis: Pretvori pakirani BCD bajt v dvojiško vrednost. Na primer 0x59 pretvori v 59. Funkcija se tipično uporablja pri branju vrednosti iz realnega časovnika.

Sorodne funkcije: bin2bcd()

uint8_t bin = bcd2bin(0x59); /* 59 */
cprintf("Minute: %d\r\n", bin);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

B.3 TIMER.H

Glava <partner/timer.h> vsebuje funkcije za merjenje časa.

#include <partner/timer.h>

uint16_t timer_ms(void);
int16_t  timer(void);
int16_t  timer_diff(uint16_t timer_start,
                    uint16_t timer_offset);

Glejte opise funkcij pri timer_ms(), timer() in timer_diff().

#include <partner/timer.h>

uint16_t t0 = timer_ms();
/* ... opravilo ... */
int16_t preteklo = timer_diff(t0, timer_ms());
cprintf("Cas: %d ms\r\n", preteklo);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

B.4 SERIAL.H

Glava <partner/serial.h> vsebuje funkcije za serijsko komunikacijo prek vrat SIO. Partner ima štiri serijska vrata: CRT (konzola), LPT (tiskalnik), VAX (VAX vrata) in MOD (modem).

Tipi in oštevilčenja

typedef enum {
    SIO_FLOW_CONTROL_RTSCTS,  /* strojni pretočni nadzor */
    SIO_FLOW_CONTROL_XONXOFF, /* programski pretočni nadzor */
    SIO_FLOW_CONTROL_NONE     /* brez pretočnega nadzora */
} sio_flow_control;

typedef enum {
    SIO_BAUDS_153600 = 0,   /* 153600 bd */
    SIO_BAUDS_9600   = 64,  /* 9600 bd */
    SIO_BAUDS_4800   = 128, /* 4800 bd */
    SIO_BAUDS_2400   = 192  /* 2400 bd */
} sio_bauds;

typedef enum {
    SIO_STOP_BITS_1 = 4,  /* 1 stop bit */
    SIO_STOP_BITS_2 = 12  /* 2 stop bita */
} sio_stop_bits;

typedef enum {
    SIO_PARITY_ODD  = 1, /* liha pariteta */
    SIO_PARITY_EVEN = 3, /* soda pariteta */
    SIO_PARITY_NONE = 0  /* brez paritete */
} sio_parity;

typedef enum {
    SIO_DATA_BITS_5 = 0,   /* 5 podatkovnih bitov */
    SIO_DATA_BITS_6 = 128, /* 6 podatkovnih bitov */
    SIO_DATA_BITS_7 = 64,  /* 7 podatkovnih bitov */
    SIO_DATA_BITS_8 = 192  /* 8 podatkovnih bitov */
} sio_data_bits;

typedef enum { SIO_MODE_POLLING } sio_mode;

typedef enum {
    SIO_EXIT_CODE_NO_ACTIVITY,     /* ni dejavnosti */
    SIO_EXIT_CODE_BUFFER_FULL,     /* medpomnilnik poln */
    SIO_EXIT_CODE_BUFFER_OVERFLOW  /* prekoračitev medpomnilnika */
} sio_exit_code;

typedef enum {
    SIO_PORT_CRT, /* konzola */
    SIO_PORT_LPT, /* tiskalnik */
    SIO_PORT_VAX, /* VAX vrata */
    SIO_PORT_MOD  /* modem */
} sio_port_addr;
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

serial_init()

#include <partner/serial.h>

sio_port *serial_init(
    sio_port_addr    port_addr,
    sio_mode         mode,
    sio_bauds        bauds,
    sio_data_bits    data_bits,
    sio_stop_bits    stop_bits,
    sio_parity       parity,
    sio_flow_control flow_control);
  • port_addr – serijska vrata (SIO_PORT_CRT, SIO_PORT_LPT, SIO_PORT_VAX, SIO_PORT_MOD)
  • mode – način delovanja (trenutno samo SIO_MODE_POLLING)
  • bauds – hitrost prenosa (SIO_BAUDS_*)
  • data_bits – število podatkovnih bitov
  • stop_bits – število stop bitov
  • parity – vrsta paritete
  • flow_control – pretočni nadzor

Vrne: kazalec na inicializirana serijska vrata sio_port ali NULL ob napaki.

Opis: Inicializira serijska vrata z privzetimi velikostmi medpomnilnikov. Za nastavljanje velikosti medpomnilnikov in pragov aktivnosti uporabite razširjeno različico serial_init_ex().

Sorodne funkcije: serial_init_ex(), serial_done()

sio_port *p = serial_init(
    SIO_PORT_VAX, SIO_MODE_POLLING,
    SIO_BAUDS_9600, SIO_DATA_BITS_8,
    SIO_STOP_BITS_1, SIO_PARITY_NONE,
    SIO_FLOW_CONTROL_NONE);
if (!p) cputs("Napaka!\r\n");

serial_init_ex()

#include <partner/serial.h>

sio_port *serial_init_ex(
    sio_port_addr    port_addr,
    sio_mode         mode,
    sio_bauds        bauds,
    sio_data_bits    data_bits,
    sio_stop_bits    stop_bits,
    sio_parity       parity,
    sio_flow_control flow_control,
    uint16_t         out_buffer_sz,
    uint16_t         in_buffer_sz,
    uint16_t         in_buffer_ext,
    uint16_t         no_activity_thr);
  • out_buffer_sz – velikost izhodnega medpomnilnika v bajtih
  • in_buffer_sz – velikost vhodnega medpomnilnika v bajtih
  • in_buffer_ext – razširitev vhodnega medpomnilnika
  • no_activity_thr – prag nedejavnosti v enotah časovnika

Vrne: kazalec na inicializirana serijska vrata ali NULL ob napaki.

Opis: Razširjena različica serial_init(), ki omogoča nastavljanje velikosti medpomnilnikov in praga nedejavnosti. Koristna pri komunikaciji z napravami z nestandardnimi zahtevami.

Sorodne funkcije: serial_init(), serial_done()

sio_port *p = serial_init_ex(
    SIO_PORT_MOD, SIO_MODE_POLLING,
    SIO_BAUDS_2400, SIO_DATA_BITS_8,
    SIO_STOP_BITS_1, SIO_PARITY_NONE,
    SIO_FLOW_CONTROL_RTSCTS,
    256, 512, 128, 100);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

serial_buffer_put()

#include <partner/serial.h>

bool serial_buffer_put(sio_buffer *buffer,
                       uint16_t len,
                       const uint8_t *values);
  • buffer – kazalec na serijski medpomnilnik
  • len – število bajtov za zapis
  • values – kazalec na podatke za zapis

Vrne: true, če so bili vsi bajti uspešno zapisani; false ob prenapolnjenosti medpomnilnika.

Opis: Zapiše polje bajtov v izhodni serijski medpomnilnik. Dejanski prenos na serijska vrata sproži klic serial_exchange() ali serial_send().

Sorodne funkcije: serial_buffer_put_ch(), serial_buffer_put_str(), serial_exchange()

uint8_t podatki[] = {0x01, 0x02, 0x03};
serial_buffer_put(port->out, 3, podatki);

serial_buffer_put_ch()

#include <partner/serial.h>

bool serial_buffer_put_ch(sio_buffer *buffer,
                          uint8_t ch);
  • buffer – kazalec na serijski medpomnilnik
  • ch – bajt za zapis

Vrne: true, če je bil bajt uspešno dodan; false ob prenapolnjenosti.

Opis: Doda en bajt v izhodni serijski medpomnilnik. Priročno za pošiljanje posameznih znakov ali ukaznih bajtov.

Sorodne funkcije: serial_buffer_put(), serial_buffer_put_str()

serial_buffer_put_ch(port->out, 'A');
serial_send(port);

serial_buffer_put_str()

#include <partner/serial.h>

bool serial_buffer_put_str(sio_buffer *buffer,
                           const uint8_t *str);
  • buffer – kazalec na serijski medpomnilnik
  • str – niz, ki se konča z '\0'

Vrne: true, če je bil celoten niz uspešno dodan; false ob prenapolnjenosti.

Opis: Doda niz znakov brez zaključnega ničelnega bajta v izhodni serijski medpomnilnik.

Sorodne funkcije: serial_buffer_put_ch(), serial_send()

serial_buffer_put_str(port->out,
    (uint8_t *)"AT\r\n");
serial_send(port);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

serial_buffer_empty()

#include <partner/serial.h>

bool serial_buffer_empty(sio_buffer *buffer);
  • buffer – kazalec na serijski medpomnilnik

Vrne: true, če je medpomnilnik prazen; sicer false.

Opis: Preveri, ali je serijski medpomnilnik prazen. Koristno za čakanje na konec prenosa ali preverjanje, ali so prispeli novi podatki.

Sorodne funkcije: serial_buffer_get_ch(), serial_exchange()

serial_exchange(port);
if (!serial_buffer_empty(port->in))
    ch = serial_buffer_get_ch(port->in);

serial_buffer_get_ch()

#include <partner/serial.h>

uint8_t serial_buffer_get_ch(sio_buffer *buffer);
  • buffer – kazalec na serijski medpomnilnik

Vrne: naslednji bajt iz medpomnilnika.

Opis: Prebere in odstrani en bajt iz serijskega medpomnilnika. Pred klicem je priporočljivo preveriti, da medpomnilnik ni prazen s funkcijo serial_buffer_empty().

Sorodne funkcije: serial_buffer_empty(), serial_buffer_peek()

if (!serial_buffer_empty(port->in)) {
    uint8_t c = serial_buffer_get_ch(port->in);
    cprintf("Prejet: %02X\r\n", c);
}

serial_buffer_peek()

#include <partner/serial.h>

uint8_t serial_buffer_peek(sio_buffer *buffer,
                           uint16_t idx);
  • buffer – kazalec na serijski medpomnilnik
  • idx – indeks bajta (0 = prvi v vrsti)

Vrne: bajt na podanem indeksu brez odstranitve iz medpomnilnika.

Opis: Brez odstranjevanja pogleda v medpomnilnik in vrne bajt na podani poziciji. Koristno pri razčlenjevanju protokolov, kjer je treba preveriti prihajajočo vsebino pred odločitvijo o branju.

Sorodne funkcije: serial_buffer_get_ch(), serial_buffer_get()

uint8_t prvi = serial_buffer_peek(port->in, 0);
if (prvi == 0xAA)
    serial_buffer_get(port->in, dest);

serial_buffer_get()

#include <partner/serial.h>

uint16_t serial_buffer_get(sio_buffer *buffer,
                           uint8_t *dest);
  • buffer – kazalec na serijski medpomnilnik
  • dest – ciljno polje, kamor se kopirajo bajti

Vrne: število prebranih bajtov.

Opis: Prebere in izprazni celoten vsebino serijskega medpomnilnika v ciljno polje. Ciljno polje mora biti dovolj veliko za vse čakajoče bajte.

Sorodne funkcije: serial_buffer_get_ch(), serial_buffer_empty()

uint8_t buf[256];
uint16_t n = serial_buffer_get(port->in, buf);
cprintf("Prejetih bajtov: %d\r\n", n);
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

serial_exchange()

#include <partner/serial.h>

sio_exit_code serial_exchange(sio_port *port);
  • port – kazalec na inicializirana serijska vrata

Vrne: kodo izhoda (SIO_EXIT_CODE_NO_ACTIVITY, SIO_EXIT_CODE_BUFFER_FULL ali SIO_EXIT_CODE_BUFFER_OVERFLOW).

Opis: Izvede en cikel izmenjave podatkov: pošlje bajte iz izhodnega medpomnilnika in sprejete bajte zapiše v vhodni medpomnilnik. Klic je neblokirajoč pri načinu SIO_MODE_POLLING.

Sorodne funkcije: serial_send(), serial_buffer_empty()

sio_exit_code ec = serial_exchange(port);
if (ec == SIO_EXIT_CODE_BUFFER_OVERFLOW)
    cputs("Prekoracitev!\r\n");

serial_send()

#include <partner/serial.h>

bool serial_send(sio_port *port);
  • port – kazalec na inicializirana serijska vrata

Vrne: true, če so bili bajti uspešno poslani.

Opis: Pošlje bajte iz izhodnega medpomnilnika na serijska vrata brez branja vhodnih podatkov. Koristno, kadar ni pričakovanega odgovora.

Sorodne funkcije: serial_exchange(), serial_buffer_put_str()

serial_buffer_put_str(port->out,
    (uint8_t *)"ATZ\r\n");
serial_send(port);

serial_set_rts()

#include <partner/serial.h>

void serial_set_rts(sio_port *port, bool state);
  • port – kazalec na serijska vrata
  • statetrue za visok nivo, false za nizek nivo

Vrne: nič.

Opis: Neposredno nastavi stanje signala RTS (Request To Send) na izbranih serijskim vratih. Koristno pri ročnem upravljanju pretočnega nadzora.

Sorodne funkcije: serial_set_dtr(), serial_check_cts()

serial_set_rts(port, true);  /* sprosti */
serial_send(port);
serial_set_rts(port, false); /* zadrzi */
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

serial_set_dtr()

#include <partner/serial.h>

void serial_set_dtr(sio_port *port, bool state);
  • port – kazalec na serijska vrata
  • statetrue za visok nivo, false za nizek nivo

Vrne: nič.

Opis: Nastavi stanje signala DTR (Data Terminal Ready). Signal DTR se tipično uporablja za prijavo naprave; pri modemski komunikaciji sproži inicializacijo modema.

Sorodne funkcije: serial_set_rts(), serial_check_cts()

serial_set_dtr(port, true);
/* Naprava je pripravljena */

serial_check_cts()

#include <partner/serial.h>

bool serial_check_cts(sio_port *port);
  • port – kazalec na serijska vrata

Vrne: true, če je signal CTS (Clear To Send) aktiven; sicer false.

Opis: Prebere trenutno stanje signala CTS na izbranih serijskim vratih. Pri strojnem pretočnem nadzoru (RTS/CTS) ta signal določa, ali je oddajna stran pripravljena na sprejem podatkov.

Sorodne funkcije: serial_set_rts(), serial_set_dtr()

if (serial_check_cts(port))
    serial_send(port);

serial_done()

#include <partner/serial.h>

void serial_done(sio_port *port);
  • port – kazalec na inicializirana serijska vrata

Vrne: nič.

Opis: Sprosti vse vire, dodeljene serijskim vratom, in onemogoči SIO kanal. Po klicu kazalec port ni več veljaven.

Sorodne funkcije: serial_init(), serial_init_ex()

serial_done(port);
port = NULL;
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

B.5 MOUSE.H

Glava <partner/mouse.h> vsebuje funkcije za serijsko miško. Podprti so protokoli Microsoft, Genius/Logitech in Mouse Systems. Miška se priključi na katero koli serijska vrata; knjižnica sama poskrbi za inicializacijo SIO.

Tipi in konstante

typedef enum {
    MOUSE_MICROSOFT,  /* protokol Microsoft (2-gumb) */
    MOUSE_GENIUS_C7,  /* protokol Genius/Logitech (3-gumb) */
    MOUSE_MOUSESYSTEMS /* protokol Mouse Systems */
} mouse_type_t;
/* MOUSE_LOGITECH je vzdevek za MOUSE_GENIUS_C7 */

enum {
    MOUSE_BUTTON_LEFT   = 0x01,
    MOUSE_BUTTON_MIDDLE = 0x02,
    MOUSE_BUTTON_RIGHT  = 0x04
};

typedef struct {
    mouse_type_t type;    /* protokol miške */
    sio_port    *serial;  /* serijska vrata miške */
    int16_t      x;       /* absolutna pozicija X */
    int16_t      y;       /* absolutna pozicija Y */
    int16_t      dx;      /* relativni premik X od zadnjega klica */
    int16_t      dy;      /* relativni premik Y od zadnjega klica */
    uint8_t      buttons; /* bitmaska pritisnjenih gumbov */
    /* ... interni člani ... */
} mouse_t;

mouse_init()

#include <partner/mouse.h>

mouse_t *mouse_init(mouse_type_t type);
  • type – protokol miške (MOUSE_MICROSOFT, MOUSE_GENIUS_C7 ali MOUSE_MOUSESYSTEMS)

Vrne: kazalec na inicializiran objekt mouse_t ali NULL ob napaki.

Opis: Inicializira serijsko miško z izbranim protokolom. Funkcija samodejno odpre in konfigurira serijska vrata za izbrani protokol ter postavi začetno pozicijo na (0,0).

Sorodne funkcije: mouse_poll(), mouse_done()

mouse_t *m = mouse_init(MOUSE_MICROSOFT);
if (!m) cputs("Miška ni najdena!\r\n");
Partner WFG, 2FG, 1FG – PRIROČNIK ZA PROGRAMIRANJE

mouse_reset()

#include <partner/mouse.h>

void mouse_reset(mouse_t *mouse);
  • mouse – kazalec na objekt miške

Vrne: nič.

Opis: Ponastavi stanje razčlenjevalnika paketov in izbriše nakopičeni relativni premik. Absolutna pozicija x, y se ne spremeni. Koristno pri ponovnem vzpostavljanju sinhronizacije z miško po izgubi paketa.

Sorodne funkcije: mouse_init(), mouse_poll()

/* Ob napaki protokola ponastavi razčlenjevalnik */
mouse_reset(m);

mouse_poll()

#include <partner/mouse.h>

void mouse_poll(mouse_t *mouse);
  • mouse – kazalec na objekt miške

Vrne: nič; posodobi polja x, y, dx, dy in buttons v strukturi.

Opis: Anketira serijska vrata, razčleni sprejete pakete protokola in posodobi stanje miške. Funkcijo je treba klicati redno v zanki programa za tekoče zaznavanje premikov in gumbov. Polja dx in dy vsebujejo relativni premik od zadnjega klica.

Sorodne funkcije: mouse_init(), mouse_reset()

while (1) {
    mouse_poll(m);
    if (m->buttons & MOUSE_BUTTON_LEFT)
        cprintf("Levi gumb @ %d,%d\r\n",
                m->x, m->y);
}

mouse_done()

#include <partner/mouse.h>

void mouse_done(mouse_t *mouse);
  • mouse – kazalec na objekt miške

Vrne: nič.

Opis: Sprosti vse vire, dodeljene objektu miške, vključno s serijskimi vrati. Po klicu kazalec mouse ni več veljaven in ga je treba nastaviti na NULL.

Sorodne funkcije: mouse_init()

mouse_done(m);
m = NULL;