Welcome, Guest. Please login or register.


Author Topic: HID kezelés ReLoaded (Enter the RPi) (Read 24436 times)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #120 on: 2018.November.03. 03:44:11 »

Pár helyre odaraktam az Arduino Micro klón lapot méretarány végett.

Szerintem ezt egy ügyes zsinórozó és pákász simán elrejti belülre, a gép háza alá is,
nem kell feltétlenül egy böhöm nagy konzolra kiszerelni, mint ahogy én csináltam most.

Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #121 on: 2018.November.03. 12:22:02 »
Na, ment egész éjjel az ENTER -es teszt.

Nem lépett ki.

Csak mikor reggel levettem róla a súlyt.

Ezt is vártuk.

10 MHz Z80, főprogramban is frissítő verzió.


Csuhajj. Indulhat az RPi oldali szoftver gyártás ... :)
« Last Edit: 2018.November.03. 12:46:00 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #122 on: 2018.November.03. 18:34:07 »
Jól van, egyenlőre úgy tűnik, hogy ez a HID HUB szoftver linuxra eléggé adja magát ...

Pikpakk meglesz a szoftveres része az RPi input HUB eszköznek,
és az a 3 drótos GPIO kezelés sem lehet komoly feladat ...

Pikpakk lesz itt USB mechanikus meg bluetooth billentyűzet kezelés ...

Csuhajj. :)

Z80 System

Offline balagesz

  • EP user
  • *
  • Posts: 277
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #123 on: 2018.November.03. 20:46:49 »
Megírtam mind a 4 kombinációt, és végigteszteltem mind a (maradék) 3 kombinációt ...
Mindegyikben jó. :smt045 :smt045 :smt045

Na, ez jó hír! Közben megálmodtam, :lol: hogy hogyan lehet CLI/SEI nélkül megcsinálni a főprogramos frissítést. (Legalábbis azt hiszem... :) ) A lényeg: kellene még egy, csak az IT rutin számára lefoglalt regiszter. :-D Ennek semmi speciális képesség nem kell, simán jó mondjuk az R2..R15 közül bármelyik, én most az R2-t kiválasztom önkényesen. Ha ez megvan, akkor a megszakítási rutin ilyen lenne:

Code: [Select]
  IN   YL,PINF
  LD   R2,Y
  OUT  DDRB,R2
  RETI

Tehát az IT rutin hossza nem változik, csak az YL-be felolvasott 4 bitet nem rontja el, hanem az R2-be olvassa be a kimeneti portra valót, majd ezekben a regiszterekben ezek bent is maradnak. Ez fontos! :) A főprogramban a port frissítése meg így néz ki:

Code: [Select]
  IN   YL,PINF
  LD   R2,Y
  OUT  DDRB,R2

Na most. Ezt a 3 utasítást akármelyik pozícióban megszakítja az EP-s portírás IRQ-ja, akkor "csak" annyi történik, hogy az IT rutinban a használt regiszterek frissítik az ebben a rutinban használt regisztereket, szóval hiába másik sort kezd el a főprogram frissíteni, a közbe beeső IT módosítja a főprogram regisztereit is, azaz az itteni OUT mindig az aktuális sort fogja beállítani. Ha jól sakkozok... :-D

Ez tehát beterheli a vezérlőt az EP oldali megszakítással,
én pedig párhuzamosan rátenyerelek az összes billentyűre, amit csak elérek,
és nyomva tartom őket. (Reset billentyűket kivéve persze ...)

Ekkor a PS/2 billentyű is küldi az összes billentyűjét a vezérlőnek repeat rate -tel ismételve.

Az én régi emlékeim erről olyanok, hogy ha egyszerre sok billentyűt nyomsz le, akkor nyilván elküldi a billentyűzet az összes lenyomott gomb (MAKE) kódját. De ismételni csak a legutoljára kiküldött kódot fogja, nem az összeset. Sőt: ha egy előzőleg kiküldött billentyűt közben felengedsz, akkor kiküldi annak a felengedési (BREAK) kódját, de az ismétlést ettől abba is hagyja. Persze változhatott a spec, a tévedés jogát fenntartom, stb...

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #124 on: 2018.November.03. 21:01:24 »
Quote
Közben megálmodtam, :lol: hogy hogyan lehet CLI/SEI nélkül megcsinálni a főprogramos frissítést.

Basszus, ez marha jó ... közös, dedikált regiszterbe olvasni be a billentyűzet sort ... hát persze ... beszarás ... :smt038

:bow: :bow: :bow:

Már csinálom is ... :)

Quote
Az én régi emlékeim erről olyanok, hogy ha egyszerre sok billentyűt nyomsz le, akkor nyilván elküldi a billentyűzet az összes lenyomott gomb (MAKE) kódját. De ismételni csak a legutoljára kiküldött kódot fogja, nem az összeset. Sőt: ha egy előzőleg kiküldött billentyűt közben felengedsz, akkor kiküldi annak a felengedési (BREAK) kódját, de az ismétlést ettől abba is hagyja. Persze változhatott a spec, a tévedés jogát fenntartom, stb...

- Az összeset csak akkor küldi el, ha "N key rollover" -es, a legtöbb modern billentyű csak 3-10 key rollover, főleg az USB -sek, de PS/2 is ...

- Hogy csak az utolsót ismételné ... annak meg mi értelme lenne ? Ha N van lenyomva, ismételni is N -et kellene ...
De ha mégse, az csak jó nekem. Az ismétlés csak árt ...
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #125 on: 2018.November.03. 21:19:41 »
Quote
Közben megálmodtam, :lol: hogy hogyan lehet CLI/SEI nélkül megcsinálni a főprogramos frissítést.

Basszus ez nagyon jó megoldás ... ahogy 2 szinten is működik ...

Ha az IN után jön a megszakítás, akkor csak lecserél(het)i a sor címet másra, de a főprogram attól jól folytatja,
ha pedig a bill. sor beolvasás után (vagy mindkét helyen! :)) jön a megszak, akkor meg a direkt sor értéket cseréli le,
de attól a főprogram jól megy tovább ... marha jó ...


Keresztül megy a megszak a főprogramon, akár kétszer, úgy hogy a főprogram arról mit sem tud,
de attól a főprogram jól megy tovább (és persze regiszter mentés nélkül) ... :)
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #126 on: 2018.November.03. 21:36:56 »
Okés, gyakorlatban is működni tűnik ! :)

Éjszaka majd tesztelem ENTER -essel,
meg így a gyakorlatban állandóan 10 MHz -en vagyok,

ha nem tapasztalok bajt, akkor felrakom az új verziót.

(És mint korábban is: balagesz a király!)

Z80 System

Offline balagesz

  • EP user
  • *
  • Posts: 277
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #127 on: 2018.November.03. 21:55:05 »
- Az összeset csak akkor küldi el, ha "N key rollover" -es, a legtöbb modern billentyű csak 3-10 key rollover, főleg az USB -sek, de PS/2 is ...

Persze, csak ezt nem akartam belekeverni.

- Hogy csak az utolsót ismételné ... annak meg mi értelme lenne ? Ha N van lenyomva, ismételni is N -et kellene ...

Mi értelme? Pont annyi, mint a billentyűzet felől az ismétlésnek magának: semmi. :-D Ez csak a klasszikus pécé, ahol "miért ne" alapon el vannak bonyolítva bizonyos dolgok. Mint fentebb írtad: ezt az ismétlés témát célszerű az OS-nek kezelni (és persze kezeli is), a periféria csak akkor mondja hogy mi van, ha változott valami.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #128 on: 2018.November.04. 01:53:29 »
Na, még nem találtam ki teljesen, hogy hogyan fog működni,
de szerintem összehozható lesz az, hogy ne kelljen EP témájú
(és persze leginkább EP layout -ú) billentyűzet (kupakokat) készít(tes)sek ...


Ugyanis oké, hogy az RPi -n futó HID HUB program már mindenféle billentyűzetet kezelni fog,
pld. USA mechanikus USB billentyűzetet, vagy HUN Apple Bluetooth billentyűzetet,

de ezek közül egyik sem EP layout, sőt,
szerintem az EP billentyűzete az nem is egy ma szabványos layout.

Ezért kellene csináljak az előbbi billentyűzetekből EP layout (közeli) billentyűzeteket.

Ezt el lehetne érni persze úgy is, hogy átmatricázom vagy filccel átrajzolom pár billentyűjüket,
meg lehetne egyéb ezeknél kifinomultabb és nehézkesebb módon csinálni layout -ban és témában EP közelibb verziót.


De én inkább eleresztem a téma dolgot (arra ott a síma dobozolt EP ... :)), és a layout dolgot pedig visszafelé oldom meg.


Nem a billentyűket faragom EP layout -ra, hanem az RPi - n futó HID HUB programot tanítom meg karakterkód szintű átkódolásra.


Magyarul azt fogom elérni (remélem ... :)), hogy ott lesz az RPi -re rádugva
a fenti két egymástól és EP -től is teljesen különböző layout -ú billentyűzet,
de én bármelyiken is gépelem be pld. a * karaktert, az az EP -n is egy * karaktert fog jelenteni.
(Pedig a * karakter ugye HUN billentyűzeten egy jobbaltos karakter, USA billencsen shift + 8, EP -n meg shift + pontosvessző,
és mindharom teljesen különböző fizikai billentyűn van.)

Mindezt pedig úgy, hogy játékoknál az sem fog elromlani (99.9% -ban persze), hogy simán együtt nyomva működnek a fizikai billentyűk,
és azok a billentyűk (vagy hozzárendeltjük) amiket EP -n is nyomnál ... :)

Természetesen nem lesz 100% -os ez az "intuitív mód" vagy "inteligens mód", ezért lesz lehetőség a hagyományos 1:1 billentyűs hozzárendeléshez is,
amit amolyan fallback, ha minden kötél szakad esetben egyetlen (a PC billentyűzeteken jobb felső sarokban lévő billentyű lenyomásával) lehet majd ki/be kapcsolni.


Összefoglalva:

- nem kell a billentyűzeteket átalakítsam EP layout -ra,
- gépelhetek rajtuk úgy, ahogy az adott billentyűzeten PC -n gépelnék,
- mindez 99.9% -ban nem fogja elrontani az EP programok és játékok
billentyűzetolvasásának működését (azok is működni fognak),
- de ha valahova mégsem lenne jó, akkor egyetlen gombbal átválthatok a hagyományos 1 PC billentyű -> 1 EP billentyű hozzárendelésre


Akkor viszont ha ezt jól gondolom, és ez így tényleg menni fog,
akkor az  RPi HID HUB összepakolása után akár hozzá is láthatok a játékíráshoz,
ha a 10 MHz -es játékkoncepció megmarad ...
« Last Edit: 2018.November.04. 14:25:41 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #129 on: 2018.November.04. 02:08:00 »
Ha kész a HID HUB program, azt is könnyen meg fogom tudni csinálni,

- hogy a program autostarttal elinduljon RPi bekapcsolásakor,
- hogy egyéb nem használt billentyűkről, per billentyűzet válthassam a layout -ot a billentyűzetről (nem kell hozzá GUI),
- meg hogy lekapcsoltathassam az RPi -t szintén billentyűzetről.

Tehát maga az RPi nem is kell monitorra dugva legyen, hogy működhessen ilyen HID HUB eszközként ... :)
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #130 on: 2018.November.04. 02:43:22 »
Jajj, alig bírom már kivárni, mire elkezd működni ... :)

Kismillió legkülönbözőbb csodajó billentyűzet párhuzamosan az EP -n,
és mindegyik tök jól működik, nincsen találgatás hogy melyik gomb melyik,
nincsenek felülragasztott gombok se,

csak gyönyörű haj ... :)

Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #131 on: 2018.November.04. 12:20:09 »
Teljesen jól működik az új szupertrükkös konkurencia kezelés a főprogram és a megszakítás között.

Egész éjjel nem lépett ki az ENTER -es tesztből (csak mikor reggel levettem a súlyt),
és nem láttam hibát gépelés közben sem soha.

Már a korábbi verzió is teljesen stabil volt,
de ezzel az uj konkurencia kezeléssel (áldassék a balagesz neve)
kikerült a főprogramból a megszakítás letiltás, ami azt jelenti,
hogy mostmár az EP megszakítást (ami önmagában elég gyors még 10 MHz -es Z80 -nál is)
csak egy nagyon rossz pillanatban érkező PS/2 megszakítás tudja késleltetni,
a főprogram egyáltalán nem,
mindamellett hogy a főprogram is elvégzi a billentyű sor frissítését is.

Mostmár csak azt a PS/2 megszakításos esetet kéne vizsgálni,
persze ha kiderülne hogy az gázos, kezdeni nem nagyon lehetne vele semmit ...

Kezdhetnénk pld. a PS/2 megszakítást is egy frissítéssel,
ugyanezzel a traszparens, dedikált regiszterhasználattal,
interrupt vektor táblába másolással,
és mivel több megszakításunk már nincs a megszakítás vektorban,
a PS/2 megszakítás ezért lehetne méretben bármekkora.
Így akkor a PS/2 megszakításnál is megspóroljuk az ugrás idejét,
de ugrás nélkül is 5 órajel.

A PS/2 adatjel kibírná a frissítés idejét.

Szóval kiváltódik az EP megszakítás, eltelik 5 órajel, akkor indulna az EP megszakításkezelő,
de ekkor beesik a PS/2 megszakítás (mielőtt még az EP kezelő elindult volna),
akkor megint eltelne 5 órajel, akkor elindulna mostmár a PS/2 megszakítás kezelő,
és aztán történne csak meg a frissülés ...

De ki tudja ... ha bebizonyosodna, hogy tud hibát okozni a PS/2 megszakítás a gyakorlatban,
most hogy ilyen gyors az EP megszakításkezelő, simán lehet hogy elbírná azt a plussz 5 órajelet ...

Végülis a főprogramba rakott megszakításletiltást is kibírta, hiba nélkül ment vele,
az is volt van 4-5 órajel, ami a megszakítás letiltás alatt futott ...

Csak a PS/2 megszakítás "hiba" kimutatásához olyan valami mesterséges teszt kéne,
hogy megy mondjuk az ENTER -es teszt,

és a PS/2 oldalról (az RPi -s PS/2 kimenettel ezt majd meg tudom csinálni) pedig folyamatosan,
megállás nélkül jön egy relatíve nagy frekvenciás (mondjuk max. 100 KHz) órajellel egy olyan kód,
amit at PS/2 értelmezésnél én eldobok. Pld. 0 kódok.

Ekkor maximális igény lenne EP oldalról az ENTER -es teszt futása miatt,
és maximális terhelés lenne a PS/2 oldalról is.
Mert most azzal hogy az egy darab ENTER gomb le van nyomva a billentyűzeten,
azzal egy kb. másodpercenként 10X van 11 darab (PS/2 az 11 biten visz át egy bájtot) megszakítás a PS/2 porton ...

Szóval ha majd lesz RPi HID HUB, abba akkor teszek egy ilyen teszt funkciót is,
és ha behibázik rajta a vezérlő, akkor a fenti módszerrel meg lehet próbálni orvosolni.


De addig is itt van az új verzió,
szebb, jobb, gyorsabb:
« Last Edit: 2018.November.04. 12:25:42 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #132 on: 2018.November.04. 12:45:56 »
Ja, jut eszembe ...

Ha a gyakorlatban bekeverne a PS/2 megszak,
és azt nem orvosolná az előbbi módszer sem,

akkor jöhetne annak vizsgálata ugye,
hogy a főprogramot lehet -e úgy írni,
hogy az olvassa a PS/2 clock és data jeleket,
megszakítás támogatása nélkül úgy,

hogy soha nem csúszik le egyről sem ...

Gyors számolással 16 MHz -es AVR és 100 KHz -es PS/2 clock -nál
az 163 órajel ...
olyan kódot kéne írni ami 163 órajelenként képes biteket beolvasni ...

Sőt ennél is gázosabb, mert csak 80 ciklusig van ott az adat,
a másik 80 ciklusban az átment van a PS/2 jeben.

Hát ha nem muszáj, nem kezdenék el szöttyögni vele ...

(Ja, és közben persze a protokollt is értelmezni kéne ... :))
« Last Edit: 2018.November.04. 12:54:43 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #133 on: 2018.November.04. 15:04:51 »
Wow ! És most nézem, hogy a PS/2 protokol engedélyezi hogy a host (itt az Arduino -s vezérlőm) beállíthassa a billentyűzeten a LED -eket ! :) (Mind a hármat.)

(És mivel én ezt most nem teszem, ezért csak az öninicializáláskor villannak fel a ledek a billentyűzeten, egyébként nem égnek.)

De ha megcsinálnám (és nem túl nehéz), akkor a LED -ekkel kijelezhetek amit akarok.

Pld. egyik leddel kijelezhetem, hogy az adott billentyűzet most épp intelligens módban, vagy fizikai billentyű hozzárendeléssel megy ... :)

De jó lesz ! :)
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HID kezelés ReLoaded (Enter the RPi)
« Reply #134 on: 2018.November.04. 15:12:44 »
Ja, ez hülyeség ... :(

Hát a billentyűzetek nem a PS/2 vezérlőre, hanem az RPi -re lesznek dugva ...

Ehhez a Linux -on kéne belenyúljak megfelelő layer -ekbe, amit nem fogok ... :(


Ráadásul, ha nem tudok a Linux -ban konfigurálni ehhez valamit
(hogy ne tegye),
akkor a Linux kapcsolgatni fogja a lámpákat a billentyűzeteken,
legrosszabb esetben még ki is eshet majd a lámpa által mutatott állapot
az EP -n épp aktuális állapottól (caps lock állapottól, pld.).


Összevissza hülyeségeket fognak mutatni a led -ek a billentyűzeteken ... :smt086


Francba ... :( :( :(
« Last Edit: 2018.November.04. 18:24:55 by Z80System »
Z80 System