Skip to content
Snippets Groups Projects
Commit 6f7aa202 authored by Christian Löpke's avatar Christian Löpke
Browse files

Added usb spec 1.11 because of it is the shown version of corsair. Added debug...

Added usb spec 1.11 because of it is the shown version of corsair. Added debug outputs. Added texts to notes file.
parent 0fdd933a
Branches
No related tags found
No related merge requests found
Pipeline #
File added
https://github.com/DIGImend/usbhid-dump
......@@ -31,7 +31,7 @@ dmesg # Beinhaltet auch Informationen, welche Treiber geladen werden.
[ 3085.620234] hid-generic 0003:1B1C:1B27.0008: input,hiddev0,hidraw4: USB HID v1.11 Device [Corsair Corsair VOID Wireless Gaming Dongle] on usb-0000:00:1a.0-1/input3
|===
\label{DisconnectDriver}
Treiber einem Gerät zuweisen oder Gerät von Treiber trennen:
cd /sys/bus/usb/drivers/hiddev
ls
......@@ -54,16 +54,27 @@ ls /sys/bus/usb/drivers/hiddev
|===
lsusb -vvv | more # Hochdetailierte Informationen über alle USB Geräte
Bevor mittels lsusb der Report Descriptor eingesehen werden kann, muss der Treiber vom Gerät getrennt werden. Siehe hierzu Abschnitt \ref{DisconnectDriver}
Interessant hier: Der Report Descriptor liefert Auskunft über alle Telegramme, die das Gerät als Human Interface Device senden kann und bietet damit die Möglichkeit das Gerät zu betreiben ohne einen speziellen Treiber für dieses spezifische Gerät schreiben zu müssen. Falls der Descriptor nicht zu den in der Realität vorhandenen Daten passt, kann es zu Problemen kommen.
Eine Vermutung von mir: In den HID-Treiben werden Mutexe verwendet. Ich könnte mir vorstellen, dass falls im Descriptor ein Telegramm fälschlicherweise zu lang angemeldet wird, dass ein Mutex für den Lesevorgang blockiert wird und nicht wieder auftaut, da ein zu kurzes Telegramm angekommen ist. (Würde erklären, weshalb Funktionen teilweise noch funktionieren, aber Tasten fälschlicherweise als gedrückt empfunden werden z.B. Eventuell passt die Kommunikation auch nicht mehr, wenn das falsche Telegramm kommt und durch STRG+ALT+F1 und anschließendes zurückwechseln in den xserver werden die Puffer neu initialisiert.
Andere Vermutung: Geräte die eine Fehlfunktionalität auslösen senden ein HID Event, das fehlinterpretiert wird oder vom Hersteller für eine Zusatzfunktionalität missbraucht wird und löst damit das seltsame Verhalten des XServers aus. Ein stark ähnliches Verhalten des XServers ist nachstellbar, indem man eine zweite Maus anschließt und eine beliebige Taste gedrückt hält. Auch in diesem Fall lassen sich manche Elemente nicht mehr anklicken und Fensterelemente geben kein visuelles Feedback mehr, wenn die Maus über sie hinweg fährt. Für diese Vermutung spricht auch, das mittels einer Umschaltung in ein tty und zurück in den XServer der Fehlklick bereinigt bzw. ignoriert oder ungülgtig wird, sodass trotz der weiterhin gedrückten Taste alle Elemente wieder richtig reagieren und bedienbar sind.
Andere (bessere) Vermutung: Geräte die eine Fehlfunktionalität auslösen senden ein HID Event, das fehlinterpretiert wird oder vom Hersteller für eine Zusatzfunktionalität missbraucht wird und löst damit das seltsame Verhalten des XServers aus. Ein stark ähnliches Verhalten des XServers ist nachstellbar, indem man eine zweite Maus anschließt und eine beliebige Taste gedrückt hält. Auch in diesem Fall lassen sich manche Elemente nicht mehr anklicken und Fensterelemente geben kein visuelles Feedback mehr, wenn die Maus über sie hinweg fährt. Für diese Vermutung spricht auch, das mittels einer Umschaltung in ein tty und zurück in den XServer der Fehlklick bereinigt bzw. ignoriert oder ungülgtig wird, sodass trotz der weiterhin gedrückten Taste alle Elemente wieder richtig reagieren und bedienbar sind.
Zur genaueren Untersuchung, ob die Vermutung eines fälschlicherweise gesendeten Events von problematischer Hardware die Ursache ist, sollte in dem Treiber für HID-Geräte genauer untersucht werden, welche HID-Events tatsächlich generiert werden. Mittels der Spezifikation von USB.org \cite{USB-HUT_v1-12} ist nachvollziehbar, welche Events sinnvoll und welche vielleicht für eine Sonderfunktion vom Hersteller missbraucht wurden. Über die Analyse des Rohdatenverkehrs ist dann genauer analysierbar, welches ein problematisches Telegramm sein kann.
Für den Fall das es tatsächlich ein Telegramm gibt, dass zwar richtig aufgebaut und vom HID-Treiber interpretiert wird, in dem Kontext der Funktionstasten des Headsets aber fehl am Platze ist, wäre die Lösung die Erstellung eines eigenen Treibers für die Hardware, der den bisherigen HID-Treiber initialisiert und verwendet, problematische Telegrammteile aber zum Beispiel weg schneidet. Für den unwahrscheinlichen Fall, dass der derzeitig aktuelle HID-Treiber ein Telegramm nicht richtig behandelt, kann ein Update des Treibers hid-input das Problem beheben.
Nützliches Tool um hid-Geräte und Rohdaten zu untersuchen: usbhid-dump.
wget https://github.com/DIGImend/usbhid-dump/archive/master.zip
unzip usbhid-dump-master.zip
./bootstrap
sudo apt-get install libusb-1.0-0-dev
./configure
make
sudo make install
Möglicherweise interessante Treiber, um die Theorie zu bestätigen:
snd
hid-input
......
This diff is collapsed.
003:010:003:DESCRIPTOR 1463316538.072320
05 0C 09 01 A1 01 85 01 09 E9 09 EA 75 01 95 02
15 00 25 01 81 02 75 06 95 01 81 03 95 03 75 01
09 B6 09 CD 09 B5 81 02 75 05 95 01 81 03 C0 06
C5 FF 09 01 A1 01 09 64 A1 02 85 64 09 69 09 6A
09 6B 09 6C 09 6D 09 6E 09 6F 75 01 95 07 81 02
09 68 95 01 81 02 09 70 75 07 25 64 81 22 75 01
81 03 09 71 75 04 25 0D 81 22 09 72 09 73 09 74
75 01 95 03 25 01 81 02 95 01 81 03 09 75 75 03
25 06 81 22 75 01 95 05 81 03 C0 09 65 A1 02 85
65 09 D5 09 D6 75 08 95 02 26 FF 00 81 22 C0 09
66 A1 02 85 66 09 78 09 79 09 7A 09 7B 95 04 81
22 C0 09 C8 A1 02 85 C8 09 D5 09 D6 95 02 91 22
C0 09 C9 A1 02 85 C9 09 D4 95 01 91 22 C0 09 CA
A1 02 85 CA 09 D8 91 22 09 D9 A1 02 05 0A 19 01
29 03 95 03 91 02 C0 C0 06 C5 FF 09 CB A1 02 85
CB 09 D2 95 01 91 22 09 D3 A1 02 05 0A 19 01 29
12 95 12 91 02 C0 C0 06 C5 FF 09 CC A1 02 85 CC
09 D7 95 01 91 22 C0 C0 06 00 FF 09 01 A1 01 09
0A A1 02 85 FF 75 20 09 0B 17 01 00 00 80 27 FF
FF FF 7F 81 02 C0 09 22 A1 02 85 90 09 33 75 08
15 00 26 FF 00 81 02 09 34 81 02 05 01 09 3B 75
10 27 FF FF 00 00 81 02 06 00 FF 09 0A A1 02 05
0A 19 01 29 0A 95 0A 75 08 26 FF 00 81 02 C0 C0
06 00 FF 09 22 A1 02 85 90 09 33 95 01 91 02 09
34 91 02 05 01 09 3B 75 10 27 FF FF 00 00 91 02
06 00 FF 09 0A A1 02 05 0A 19 01 29 0A 95 0A 75
08 26 FF 00 91 02 C0 C0 06 00 FF 09 22 A1 02 85
C4 09 33 95 01 81 02 09 34 81 02 05 01 09 3B 75
10 27 FF FF 00 00 81 02 06 00 FF 09 0A A1 02 05
0A 19 01 29 3B 95 3B 75 08 26 FF 00 81 02 C0 C0
06 00 FF 09 22 A1 02 85 C4 09 33 95 01 91 02 09
34 91 02 05 01 09 3B 75 10 27 FF FF 00 00 91 02
06 00 FF 09 0A A1 02 05 0A 19 01 29 3B 95 3B 75
08 26 FF 00 91 02 C0 C0 06 00 FF 09 0C A1 02 85
FF 05 01 09 3B 95 01 B1 02 09 3A A1 02 05 0A 19
01 29 3E 95 3E B1 02 C0 C0 06 00 FF 09 0C A1 02
85 E2 05 01 09 3B 95 01 81 02 09 3A A1 02 05 0A
19 01 29 3E 95 3E 81 02 C0 C0 C0
003:010:003:STREAM 1463316542.769211
01 00 00
003:010:003:STREAM 1463316542.778205
64 00 00 33 00
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment