Portál AbcLinuxu, 1. května 2025 15:16
Keďže nie je možné pripojiť súbory k blogu, vkladám ich do komentára.
Môj monitor je veľký len podľa rozlíšenia (4K) :) Inak je to uhlopriečka 14". Pri screenshotoch som vynútil DPI 96 aby bola viditeľná čo najväčšia časť dumpu.
Nemyslím si, že by znalosti klopných obvodov D/T boli pri obsluhe prerušenia nejak užitočné. Ak sa bavíme o APIC (Advanced Programmable Interrupt Controller) je dosť pravdepodobné, že pre interrupt line má na vstupe len Schmittov klopný obvod a celú logiku rieši softvérovo keďže každý vstup môže byť citlivý na hranu, alebo úroveň a má nastaviteľnú polaritu. Okrem toho implementuje MSI (Message Signaled Interrupts) ktoré by sa vážne implementovali dosť blbo iba klopnými obvodmi.
Frekvencia posielania polohy kurzoru sa výrazne znižuje, keď používam priblížim ruku k touchpaduTak pouziva ten uzivatel ten touchpad a nebo se k nemu rukou jen priblizuje? Podle Vasi reakce tomu odborne rozumite a vzhledem k tomu, ze jste vysokoskolsky pedagog, tak byste event. dokazal i nejak 'lidsky' kratce popsat, o co se vlastne jedna. Samozrejme se moje prosba tyka i ostatnich kolegu kteri tomu rozumi, jestli by to nemohli nejak osvetlit.
Touchpad pri určovaní polohy meria kapacitu. Zrejme je dosť citlivý na to, aby reagoval ešte pred dotykom (na vzdialenosť cca 1cm kedy síce neposiela ešte žiadne packety, ale prebudí sa a spomaľuje packety druhého zariadenia na PS/2).
PS/2 (i8042) nie je až tak zlý protokol. I keď ...
No najskôr sa pozrime na alternatívy. Niekoho by mohlo napadnúť, čo tak USB-HID? Ten je síce pekne štandardizovaný a bežne podporovaný aj v BIOSe, ale USB protokol je kvôli pollingu žrút energie a do notebookov sa nehodí.
Protokol I2C s pomerne inteligentným kontrolérom, ktorý by vedel prerušiť pri požiadavke od slave zariadenia je teoreticky dobré riešenie. Problém je, že I2C poskytuje cca 128 adries, keď odrátam nejaké tie rezervované a adresy SMBusu, zostane ich tak polovica. Nájsť nejaký rozsah adries, ktorý by bol vyhradený len na klávesnice a myši je nemožné. Detegovať HID zariadenia postupným posielaním nejakej sekvencie bytov na všetky adresy je tiež blbosť (na I2C môže byť napríklad ovládanie chladičov a poslanie nejakej sekvencie bytov môže urobiť ktovie čo). Jedinú schodnú cestu tu vidím v separátnom I2C radiči len na HID zariadenia.
Nakoniec ešte k PS/2 protokolu ... Mal som počítač s klávesnicou a myšou na PS/2 a mal som aj staršie thinkpady s touchpadom na PS/2. Vo všetkých prípadoch absolútne bez problémov. PS/2 je dostatočne rýchly, aby zvládal > 200Hz multiplexovaných packetov. To, že na mojom thinkpade padá pod 40Hz je spôsobené len zlou implementáciou u synapticsu. Nie je to problém PS/2.
Píšem o PS/2 ako keby to bol super protokol, ale nie je. Neviem, čo zase v Lenove zbabrali, ale u nových modelov PS/2 nefunguje dobre. PS/2 nemá žiaden synchronizačný mechanizmus, alebo detekciu chýb. Ak vypadne jeden bit, celý ďalší prúd bitov je nepoužiteľný a kurzor bude pri pohybe len tak lietať po obrazovke a náhodne klikať. Niektorým používateľom to robí niekoľko krát denne. Mne sa to teraz stáva raz za niekoľko mesiacov. Pri starších modeloch sa mi to nestalo ani raz za vyše 10 rokov používania.
To mi pripomenulo veľmi podobný problém z minulosti.
PS/2 nemá žiaden synchronizačný mechanizmus, alebo detekciu chýb. Ak vypadne jeden bit, celý ďalší prúd bitov je nepoužiteľný a kurzor bude pri pohybe len tak lietať po obrazovke a náhodne klikať.
Pred nejakým časom som tento problém riešil s touchpadmi a trackpointami od ALPS na notebookoch od Dellu. Bol to veľmi podobný boj ako popísaný v tom blogu ale s úspešným koncom (patche sú už dlhšie v kerneli).
ALPS má vlastný 6-bajtový PS/2 formát paktov s tým, že každý bajt okrem prvého má vrchný bit nulový. Čo rieši synchronizáciu. Avšak samotný ALPS touchpad na Dell notebookoch nie je pripojený priamo na základnú dosku ale je pripojený k nejakému Dellovému mikrokontroléru, ktorý pre PS/2 slúži ako prietokový ohrievač a až PS/2 z mikrokontroléru je pripojený k i8042/CPU. Naviac vo firmware toho mikrokontroléru je nejaká chyba a nie vždy stihne odbaviť všetky PS/2 pakety z tochpadu a poslať ich na i8042 na hlavný procesor. Občas nahradí posledný bajt paketu za 0xFF alebo 0xFE. Čím úplne pokazí autosynchronizáciu toho ALPS protokolu.
A aby toho nebolo málo, buď ten Dell mikrokontrolér alebo ALPS touchpad samotný (neviem presne kto), mixuje do toho PS/2 prenosu ešte aj 3 bajtové PS/2 pakety z externej myši (pripojenej k PS/2 portu na doku). Naviac posledné dva bajty ALPS paketu splňujú podmienku validity prvých dvoch bajtov PS/2 paketu externej myši. Síce PS/2 myš na externom doku asi nikto nepoužíva ale alps driver to implementuje. A kvôli neexistencii autodetekcie pripojenia externej PS/2 myši v tomto systéme, musí stavová mašina pri spracovávaní vždy počítať, že tam ten 3-bajtový paket od myši môže príjsť prakticky hocikedy.
No a kombinácia všetkých týchto vecí dokázala stavovú mašinu alps drivru úplne rozsynchronizovať a oddebugovať to celé bolo dosť problém.
Tagy sa mi nechce editovať. Ako vyhodnotil algoritmus CMS, tak nechávam.
supr deníček :D ;D
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.