Hallo! Das mit dem Polling bei USB hat mir keine Ruhe gelassen. :-) Ich habe heute dazu noch ein bisschen Tests gemacht und auch recherchiert. Mein Verständnis ist immer noch dass, dass bei USB immer der Host-Adapter das Device anpollen muss (so steht das auch auf verschiedenen Webseiten), womit eine gewisse Latenz durch die Poll-Rate entsteht, weil die muss erst mal abgewartet werden und kann nicht beliebig klein sein. Für Gamer soll das mit Mäusen ein Problem sein. Aber anscheinend kann der Host-Adapter ohne Software-Unterstützung pollen! D.h. man sagt ihm, benutze diese oder jene Poll-Rate und dann macht er das. Aus Software-Sicht sieht es dann eben DOCH so aus, als könne auch das Device sich melden, wenn es Daten hat. So beobachtet mit Wireshark auf einem USB-Bus mit einer USB-Maus dran. Aber hier muss natürlich auch das Device mitspielen. Es kann also sein, dass das bei den Scanner-Tasten eben nicht so funktioniert wie bei einer Maus. Wenn man wüsste, was der Windows-Treiber bei den Scanner-Tasten macht... Ich werde mich der Sache also irgendwann noch mal in Ruhe widmen. Vielleicht geht es ja doch mit "passivem Beobachten" per usbmon (ohne sane außer Tritt zu bringen). Wahrscheinlich nicht, sonst wäre so eine "Krücke" wie scanbd ja nicht geschrieben worden. Aber jetzt will ich es verstehen. :-) Wenn jemand sich hier besser auskennt, darf er mich gerne belehren... Viele Grüße Manfred Bernd Nachtigall schrieb:
Hallo Manfred,
vielen Dank für das teilen deiner Erkenntnisse :-)
Da ich auf diesen Gebieten nicht so versiert bin, hätte ich wahrscheinlich viel Zeit darin versenkt ehe ich frustriert aufgegeben hätte.
Außerdem habe ich nun so nebenbei erfahren das USB-Geräte keinen Interrupt auslösen können. Hoffentlich behalte ich das bis es für mich mal relevant ist. ;-)
Bernd
Am 10.04.21 um 06:34 schrieb Manfred Haertel, DB3HM:
Manfred Haertel, DB3HM schrieb:
Ich werde mir bei Gelegenheit mal anschauen, WIE scanbd den Tastendruck erkennt und dann versuchen, diese Lösung auf usbmon umzusetzen, was ich ja schon ganz zu Anfang vorgeschlagen hatte, als ich scanbd noch nicht kannte. Denn usbmon hätte den Vorteil, dass man eben NICHT das USB-Device öffnen muss, aber trotzdem mitlesen kann.
Daran hätte ich zumindest mal mehr Spaß als am Debugging undefinierbarer Randprobleme. :-) Aber keine Ahnung, wann ich dazu mal komme, denn die Scanner-Buttons sind derzeit nicht mein dringlichstes Anliegen...
Ich habe grade mal die Zeit gefunden, ein bisschen in den Source-Code zu "luchsen", konkret in das Genesys-Backend für die Canon-Scanner.
Meine Idee wird nicht funktionieren und eigentlich hätte mir das klar sein müssen. USB ist nämlich so designed, dass ein USB-Gerät eben NICHT einen Interrupt auslösen kann, wenn ihm danach ist (z.B. wenn eine Taste gedrückt ist), sondern man MUSS den Status anpollen. Das habe ich zwar schon mal gewusst, aber irgendwie verdrängt.
Das erklärt auch, warum mein Tastendruck manchmal nicht erkannt wurde. Er war einfach kürzer als das Poll-Intervall.
Steht auch in einem Kommentar:
// only the currently pressed keys are reported, if some key was pressed _and_ release betwee // the last an the current query it is not reported here, depending on the query frequence // the key needs to be holded for some time to be recognised
Man muss also "lang genug drücken".
Spätestens damit ist das Thema für mich uninteressant geworden.
-- Die normative Kraft des Faktischen behindert die Entwicklung zum Besseren.
-- Manfred Härtel, DB3HM mailto:Manfred.Haertel@rz-online.de http://rz-home.de/mhaertel