Forum

From PMD 85 Infoserver

Jump to: navigation, search
:: back to start of topic :: back to topic list ::
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2013-03-30 01:02:43 PM
Subject  Subject ::  Re: Kde je chyba?
Test klávesnice v emulátore sa robí pomocou Win API funkcie GetKeyboardState(), ktorá vráti pole 256 bytov, v ktorom každý byte určuje stav niektorého klávesu. Ak má daný kláves nastavený flag, že je stlačený, tak sa príslušne nastaví bit v poli, ktoré reprezentuje klávesnicovú maticu PMD 85 a naopak.
Takže samotný emulátor nerieši "kolíziu" klávesov, ale iba sleduje stav, ktorý mu poskytne operačný systém.
Pokiaľ dochádza k popísanému chovaniu, tak je to zrejme dôsledok toho, ako vyhodnocuje stav klávesov samotná klávesnica, alebo príslušný driver v OS. Ale môžem sa samozrejme mýliť.
Pre úplnosť, funkcia GetKeyboardState() je v emulátore volaná asi 50x za sekundu, ale nemyslím si, že by frekvencia jej volania mohla nejako ovplyvniť "kolíziu" stlačených klávesov.
Funkcia GetKeyboardState() má ale aj jednu (pre PMD 85) nepríjemnú vlastnosť, a to že klávesy ľavý a pravý Enter združuje do jedného flagu a tak neumožňuje rozlíšiť ich samostatne. Pri stlačení klávesu Enter sa tak v klávesnicovej matici nastaví bit iba pre pravý EOL. V skorších verziách emulátora sa to robilo pre oba EOLy, ale nerobilo to dobrotu v niektorých programoch. Výsledkom toho je to, že programy, ktoré testujú iba ľavý EOL, "nebudú fungovať".
Pod Win je samozrejme možné testovať klávesy Enter oddelene, napríklad použitím DirectInput, ale k tomu som sa zatiaľ neodhodlal, keďže aktuálne riešenie v drvivej väčšine prípadov vyhovuje.
:: back to start of topic :: back to topic list ::