Hlavní navigace

SVGAlib: joysticky

Jakub Matys

V dnešním dílu začneme menší podkapitolku. Bude se jednat o joysticky.

Nejdříve bych chtěl představit ještě dvě funkce, na které jsem v minulém díli pozapoměl:

void keyboard_clearstate(void);

Restartuje status všech kláves. Znamená to tedy, že všechny nevyzvednuté události jsou ztraceny.

typedef void (*__keyboard_handler) (int scancode, int press);
/* tento ukazatel je uz nadefinovan v souboru vgakeyboard.h */
void keyboard_seteventhandler(__keyboard_handler handler);
void keyboard_setdefaulthandler(void); 

Tyto funkce umožní nastavení handleru klávesnice, ten bude volán, pokud funkce keyboard_update a keyboard_wait­forupdate skončí úspěšně. press je KEY_EVENTRELEASE nebo KEY_EVENTPRESS, pokud klávesa scancode byla uvolněna nebo stisknuta.

Joysticky v svgalib

Nyní se už pustíme do oněch slíbených joysticků. Chtěl bych jen upozornit, že všechny představované funkce používají hlavičkový soubor vgajoystick.h.

typedef void (*__joystick_output) (const char *msg);
int joystick_init(int joydev, __joystick_output jo);

Tato funkce otevírá zařízení joysticku. Pokud skončí neúspěšně, vrátí 0, jinak nenulovou hodnotu.

Svgalib podporuje několik typů joysticků, odpovídající jména těchto typů mohou být nakonfigurována v libvga.config.

Parametr joydev indikuje, který joystick má být inicializován. Svgalib dokáže obhodpodařit až čtyři joysticky (joydev = 0 až joydev = 3).

Programátor může vypsat uživateli další pokyny (např. jak joystick nakalibrovat) pomocí funkce odkazované parametru jo. Pokud je tento parametr NULL, nebude tyto informace možné vytisknout.

void joystick_close(int joydev);

Pokud bylo zařízení joydev otevřeno, tak jej uzavře.

Zadáním joydev = –1 docílíte uzavření všech regulérně otevřených zařízení.

int joystick_update(void);

Tato funkce má za úkol zjistit, zda se změnily některé důležité informace, jako např. stav tlačítek. Jestliže ano, zavolá vhodné handlery.

Nenulová hodnota je vrácena, pokud byl změněn status jakéhokoliv joysticku. Jednoduchým trikem můžeme zjistit, o jaké zařízení se jedná. Jestliže je logický součet vrácené hodnoty a výrazu (1 << joydev) větší než nula, změnilo toto zařízení svůj status.

typedef void (*__joystick_handler) (int event, int number, char value, int
joydev);
void joystick_sethandler(int joydev, __joystick_handler jh);
void joystick_setdefaulthandler(int joydev); 

Po volání funkce joystick_init je implicitně použit defaultní handler pro otevřený joystick. Tento handler udržuje statusovou tabulku, která může být čtena funkcemi joystick_getaxis, joystick_getbutton, joystick_button1|2|3|4, joystick_getb1|2|3|4, joystick_x|y|z a joystick_getx|y|z – ty mají za úkol získávat hodnoty osy, stavy tlačítek atd. a o všech se budeme bavit.

Pokud potřebujete definovat svůj vlastní handler, můžete ve své funkci zpracovávat následující parametry:

event
  • JOY_EVENTBUTTON­DOWN – tlačítko bylo stisknuto
  • JOY_EVENTBUTTONUP – tlačítko bylo uvolněno
  • JOY_EVENTAXIS – byla měněna pozice na joysticku
number
indentifikuje tlačítko nebo osu, které tato událost patří
value
obsahuje novou pozici osy (od –128 do 127)
joydev
identifikuje zařízení joisticku (to umožňuje použít jeden handler pro více joysticků)
char joystick_getnumaxes(int joydev);
char joystick_getnumbuttons(int joydev);

Zjistí počet os a tlačítek. Staré verze protokolu joysticku (0.*) hlásily pouze dvě osy (x a y) a čtyři tlačítka. Svgalib však podporuje až 127 os a tlačítek (za předpokladu, že to umožňuje driver).

To by bylo pro dnešek vše, v příštím dílu budeme pokračovat v představování funkcí pro práci s joysticky.

Našli jste v článku chybu?
120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

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

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

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

Taky věříte na pravidlo 5 sekund?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

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

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

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

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

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

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

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

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

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

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

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

Jsou čajové sáčky toxické?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...