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.