Hirdetés
Új hozzászólás Aktív témák
-
Domonkos
addikt
Hey, tobbi szaktarsam! Hogy halad az a touch-typist-a valas?
Ebben a lepesben feldolgozzuk a billentyuzet eddig begyujtott allapotat. Amink van, az a
keys_downvaltozoban 1-1 bit arrol, hogy az adott billentyu eppen nyomva van-e tartva vagy sem; es amit szeretnenk az valami olyasmi, ami jol leirja hogy a billentyuzeten "valojaban" mi is tortent.
Ez a megfogalmaaz ugyan egy kicsit tag, de a legeslegegyszerubb esetben csak annyirol van szo, hogy a billentyukhoz (a kiosztasnak megfelelo) karaktereket fogunk rendelni.
Hogy melyik kiosztashoz? Hat... azt is nekunk kell implementalni - egyebkent termeszetesen dvorak.
Szoval mit is kell egy ilyen lepesnek megtennie?
Nezzuk mondjuk ezt az egyszeru implementaciot:static void
process_keys(void)
{
static kb_state_t prev_key_state = 0;
if (keys_down == prev_key_state) {
return;
}
memset(keys, 0, sizeof (keys));
uint8_t n = 0;
for (kp_t i = 0; i < N_KEYS && n < NKRO; i++) {
if (!BIT_AT(keys_down, i)) {
continue;
}
keys[n++] = get_keycode(i, true);
}
}Rogton a fuggveny elejen van egy fuggveny-szkopu valtozo deklaralva, ami arra van hasznalva, hogy ha a billentyuzet fizikai allapotaban nem tortent valtozas az elozo scan ota, akkor a feldolgozast is rovidre tudjuk zarni.
Itt szinten megjegyeznem, hogy a billentyuzetek kuldhetnenek teljesen valid allapotfrissiteseket akkor is, ha amugy nem tortent lenyomas vagy egyeb - ahogy azt pledaul az eredeti peldaprogram is tette ~10s inaktivitas utan, de tradicionalisan senki sem ir aszinkron firmware-t az elso probalkozasra. Ebben a blogban mi is maradunk az alapoknal.
Egyebkent meg csak vegig kell mennunk az osszes billentyun es reagalni azokra, amik le vannak nyomva. Azert csak azokra, mert az USB-n csak azt a maximum 6 (NKRO) karaktert kell kikuldenunk, amit epp nyomva tartunk. Jogos kerdes lehet, hogy mi van akkor, ha nem csak a lenyomott, de a felengedett billentyukre is szeretnenk reagalni. Termeszeteser azt is itt tudnank megtenni - ahogy a makrokat es az egyeb ujhullamos dolgokat is itt lenne erdemes lerendeznunk, de a fuggveny mar igy is majdnem 20 sor hosszu, szoval ezek implementalasa az olvasora fognak maradni. Tovabba aget_keycode()fuggveny is azert hivhato meg 2 parameterrel, mert a billentyuk egyebkent siman csinalhatnanak 2 kulonbozo dolgot is lenyomasra es felengedesre. Amugy a retegek hasznalatanal szinte elengedhetetlen lesz, hogy akkor is jo karaktert kapjunk vissza, ha a lenyomas es felengedes kozt valahogy sikerult reteget valtanunk. Ezt azert hagytam benne a kodban, mert ha a vegen meg lesz erdeklodo, akkor errol szivesen irok. Egyebkent erdeklodes hianyaban el fog maradni - es a nem hasznalt argumentrol kapott figyelmeztetes a ti lelketeken fog szaradni.
Osszegezve itt annyi tortenik csak, hogy a nem lenyomott billentyuket kihagyjuk, a lenyomottakhoz pedig kikeressuk a megfelelo betut (/karaktert/funkciot/makrot/stb.)Mivel a
keys[]tomb csakN_KEYShosszu, igy a feldolgozastN_KEYSdarab billentyu rogzitese utan meg kell szakitanunk. Bar erre szinten vannak szofisztikaltabb megoldasok is, azok sajnos nem fernek be 20 sorba. Amugy, igen, ennel az implementacional a hardveres elrendezes befolyasolni fogja azt, hogyN_KEYS+ billenty leutese eseten mik is lesznek azok a billentyuk amiket kikuldunk.
Ez a fuggveny onmagaban is meg tudna tolteni egy teljes blogot - mar igy is eleget irtam rola - szoval inkabb itt vannak az egyeb implicit modon hasznalt dolgok:#define BIT_AT(num, n) (!!(num & (1ull << n)))
#define NKRO 6
typedef uint8_t kc_t;
typedef uint8_t kp_t;
kc_t keys[NKRO] = { 0 };Ha valamit kihagytam, akkor szivesen valaszolok minden kapcsolodo kerdesre!

Új hozzászólás Aktív témák
- P15 Gen1 15.6" FHD IPS i7-10850H RTX 3000 32GB 1TB NVMe ujjlolv IR kam gar
- SZÉP ÁLLAPOT!!!! Dell Latitude 7490 i5-8350U 16GB 512GB SSD Magyar v.bill
- AKCIÓ!!! HP ZBook Power 15 G8 Mobile Workstation i7-11850H 32GB 1000GB Nvidia RTX A2000
- AKCIÓ!! HP Zbook Studio G8 i7-11850H 32GB 512GB Nvidia Quadro RTX A4000 8GB Garis!
- ThinkPad T14s Gen 2 i5-1135G7 16GB 512GB FHD 1 év garancia
- HIBÁTLAN iPhone 15 Pro 128GB Blue Titanium -1 ÉV GARANCIA -Kártyafüggetlen
- BESZÁMÍTÁS! Gigabyte B550M R7 3700X 32GB DDR4 512GB SSD RTX 3060Ti 8GB Zalman Z1 PLUS CM 700W
- GYÖNYÖRŰ iPhone 12 Mini 128GB Blue-1 ÉV GARANCIA - Kártyafüggetlen, MS3852
- Ezviz BC1 1 kamerás kamera szett / 12 hó jótállás
- Nokia 8 Sirocco / 6/128GB / Kártyafüggetlen / 12Hó Garancia
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest






