Hlavní navigace

SVGAlib: práce s klávesnicí v raw módu

Jakub Matys

V dnešním dílu se podíváme na práci s klávesnicí v raw módu.

Raw mód se od klasického liší zásadním způsobem, nepracujeme zde totiž se znaky, které reprezentují jednotlivé klávesy, ale přímo s kódy kláves. To se hodí hlavně ve hrách a v multimediálních programech.

Všechny funkce pracující s klávesnicí v raw módu jsou definovány v hlavičkovém souboru vgakeyboard.h.

Toť vše pro začátek a vrhněme se nyní na ony slíbené funkce.

int keyboard_init(void);
int keyboard_init_retrun_fd(void);
void keyboard_close(void);

Tyto funkce mají stejný význam jako u myší, mají za úkol inicializovat klávesnici v raw módu. Funkce s return_fd vrací deskriptor souboru klávesnice, funkce bez této přípony pak vrací 0, pokud uspěla. Obě pak vrací –1 v případě neúspěchu.

Klávesnici vrátíte do normálního módu voláním funkce keyboard_close.

int keyboard_update(void);
void keyboard_waitforupdate(void);

unkce zjišťují, zda se udály některé změny v interních bufferech a změní potřebné proměnné. Funkce keyboard_wait­forupdate navíc zablokuje program, dokud potřebná událost nenastane. keyboard_update vrací 0, pokud nejsou v bufferu žádné změny, jinak vrací nenulovou hodnotu.

Dále existuje ještě funkce vga_waitevent, která čeká na jakýkoliv podnět, ať už se jedná o klávesnici, myš, joystick atd.

void keyboard_translatekeys(int mask);

Tato funkce nastaví různé příznaky, které kontrolují, jak mají být mapovány různé kódy kláves. V podstatě funkce říká knihovně např. něco ve smyslu: „Ať se kurzorové klávesy na číselné klávesnici hlásí jako klasické ‚šipky‘!“ atp.

mask musí být logický součet těchto integerů:

TRANSLATE_CUR­SOKREYS
Překládá kódy kurzorových kláves na číselné klávesnici na klasické kurzorové klávesy.
TRANSLATE_DIAGONAL
Překládá kódy uhlopříčkových kurzorových kláves(7, 9, 1, 3) na stisk dvou běžných kurzorových kláves. Například, místo vrácení stisku SCANCODE_CURSO­RUPRIGHT bude vrácena simulace stisku SCANCODE_CURSORUP a SCANCODE_CURSOR­RIGHT.
TRANSLATE_KEY­PADENTER
Kód klávesy enter na numerické klávesnici je mapován na obvyklý enter. Bude tedy vracena hodnota SCANCODE_ENTER(kl. enter) pokud byl stisknut enter na numerické klávesnici nebo na znakové klávesnici.
DONT_CATCH_CTRLC
Stisknutí Ctrl-C nemá žádný vliv na běh procesu (není vyslán signál SIGINT).
int keyboard_keypressed(int scancode);

Zjišťuje, zda byla stisknuta klávesa s kódem scancode a vrací KEY_PRESSED(1) a KEY_NOTPRESSED(0).

Nesmíte však zapomenout pravidelně volat funkci keyboard_update (nebo keyboard_wait­forupdate), aby byly v proměnných knihovny aktuální informace.

Názvy jednotlivých kódů kláves jsou uvedeny v vgakeyboard.h. Jsou použity názvy běžné u amerických klávesnic. Všechna jména konstant začínají SCANCODE_ a jméno je uvedeno potom. Např. klávesa Backslash bude mít konstantu SCANCODE_BACKSLASH.

Zde je přechled některých jmen kláves (myslím, že jsou dosti výstižné a že nebudou potřebovat další komentář).

  • SCANCODE0 – SCANCODE9
  • SCANCODE_KEYPAD0 – SCANCODE_KEYPAD9
  • SCANCODE_A – SCANCODE_Z
  • SCANCODE_F1 – SCANCODE_F12

Některé z následujících nejsou zase tak samovýstižné, ale věřím, že si poradíte :o): ESCAPE, MINUS, EQUAL, BACKSPACE, TAB, BRACKET_LEFT, BRACKET_RIGHT, ENTER, LEFTCONTROL, SEMICOLON, APOSTROPHE, GRAVE, LEFTSHIFT, BACKSLASH, COMMA, PERIOD, SLASH, RIGHTSHIFT, KEYPADMULTIPLY, LEFTALT, SPACE, CAPSLOCK, NUMLOCK, SCROLLLOCK, CURSORUPLEFT, CURSORUP, CURSORUPRIGHT, KEYPADMINUS, CURSORLEFT, CURSORRIGHT, KEY-PADPLUS, CURSORDOWNLEFT, CURSORDOWN, CURSORDOWNRIGHT, KEY-PADPERIOD, LESS, KEYPADENTER, RIGHTCONTROL, CONTROL, KEY-PADDIVIDE, PRINTSCREEN, RIGHTALT, BREAK, BREAK_ALTERNA-TIVE, HOME, CURSORBLOCKUP, PAGEUP, CURSORBLOCKLEFT, CUR-SORBLOCKRIGHT, END, CURSORBLOCKDOWN, PAGEDOWN, INSERT a REMOVE.

char *keyboard_getstate(void);

Vrací ukazatel na jednorozměrné pole, do kterého se uloží stav všech kláves. Tyto stavy mohou nabývat pouze dvou hodnot, a to 1)KEY_PRESSED, 2)KEY_NOPRESSED.

Jako indexy pole používejte jména kódů jednotlivých kláves. A jako výše uvedená funkce musíte volat keyboard_update a keyboard_wait­forupdate.

To je pro dnešek vše, v příštím dílu si doděláme raw mód.

Našli jste v článku chybu?

16. 10. 2004 18:41

sly (neregistrovaný)

1, 2, 3, 4, 5, 6, 7, 4... ??? to jsem z toho jelen...

15. 10. 2004 16:20

hkmaly (neregistrovaný)

Ne. Raw znamená syrový. Numlock bude možná v dalším díle.

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru