Peter schrieb:> Brauche da echt etwas Hilfe.
Der Fehler ist mit hoher Wahrscheinlichkeit nicht im geposteten
Codeabschnitt.
> ich versuche ein HID Multimedia Keyboard (VUSB) gerade um einige Tasten> zu erweitern und nun geht nichts mehr.
Was passiert, wenn du deine Änderugen rückgängig machst?
Was hast du geändert?
Was bedeutet "nichts mehr"?
Peter schrieb:> 0x09, 0x00, // USAGE (NC)>> // neue 8 Befehle
Das ist sicher eine Endekennung oder sowas in der Richtung. Kommentiere
das mal aus.
fchk
Wenn ich alles wieder zurück baue funktioniert es.
Gut es fehlt noch der Code wo ich sende.
Jetzt sende ich 2 Byte und vorher habe ich ein Byte gesendet.
Mehr Unterschiede gibt es nicht!
USAGE (NC) soll laut USB HID Info nur nicht belegt bedeuten.
Nichts mehr bedeutet das Windows die HID Schnittstelle als fehlerhaft
kennzeichnet und sie somit nicht arbeitet.
Hi Peter,
hast Du den HID-Descriptor erweitert weil Du Tasten hinzu gefügt hast?
Normalerweise musst Du das nicht tun. Es genügt andere Keycodes zu
schicken.
Es sei denn Du jast kein USB-Keyboard sondern einen Joystick. Beim
Joystick gibst Du die Anzahl der Tasten an, die wertest Du dann aber
nicht als Tatstur aus sondern als einzelne Knöpfe über einen
Gamecontroller.
Wenn Du aber tatsächlich eine Tastatur hast, dann stelle den alten
HID-Descriptor wieder her.
Arbeitest Du unter Linux oder Windows? Wenn Du unter Linux arbeitest
kannst Du einfach mal mit "lsusb" nach dem Gerät suchen um zu sehen wie
es erkannt wird. Im USB-HID Code werden immer mal wieder USB-IDS
aufgenommen, mit denen es Probleme gibt. Diese werden dann unter
Umständen ignoriert.
Wenn Du also die USB-ID unglücklicher Weise auf eine solche,
geblacklistete ID, gesetzt hast, wirst Du ebenfalls Probleme haben.
Ein Beispiel ist die V-MAME-Panel ID, welche seit Kernel 3.9.x nicht
mehr als HID-Device erkannt wird. Irgendein FM-Radioadapter nutzt die
selbe ID und der ist geblacklistet ... es kann einen MOment dauern das
Problem zu erkennen ...
Ja ich habe 8 Tasten neu dazu gebaut und ich arbeite unter Windows.
Ich habe ein "Consumer Control" also nicht wirklich ein Keyboard.
Diese Tasten waren bis jetzt direkt einem Bit zugeordnet.
Nun habe ich weiter 8 Tasten / Bit und wollte die entsprechend senden.
Das geht ja Aufgrund eines Fehler nicht, den suche ich ja.
Wenn man das auch eleganter lösen kann dann bin ich da ganz offen für
Informationen.
Peter schrieb:> // 0x95, 0x08, // REPORT_COUNT (8)> // 0x75, 0x01, // REPORT_SIZE (1)> 0x95, 0x10, // REPORT_COUNT (16)> 0x75, 0x02, // REPORT_SIZE (2)
Die REPORT_SIZE muss 1 bleiben. Vorher sind es 8*1 Bits, jetzt sind es
16*1 Bits und nicht 16*2 Bits.
REPORT_SIZE gibt die Länge eines einzelnen Reports an, REPORT_COUNT die
Anzahl der einzelnen Reports (ein Report pro Usage).
Genau. Der USB-Host muss nur wissen, wieviel er bekommt und wie er die
Daten zuordnen muss.
Die Deskriptoren habe ich nicht durchgesehen, aber bis auf die Länge des
Reports solle sich nichts ändern.
Und wenn das immer noch nicht geht?
Ich habe nun etliches probiert aber nichts scheint richtig zu sein.
Zur Sicherheit habe ich auch der senden der Befehle deaktiviert.
Aber auch das bringt nichts.
Kann mir da jemand helfen?
Gibt nicht eine Bessere Methode diese Befehle an den PC zu senden?
Kann man nicht dieses sende universal machen und anstatt einen
Bit-Codierten Befehl den entsprechenden Tasten-Befehl senden?
Immer diese "Gibt alles dann kann man dir helfen" Antworten.
Die helfen nicht und nerven mich ehrlich gesagt!
Weil diese Aussage immer kommt wenn ich hier eine Frage habe und das
sogar bei Fragen wo es überhaupt keine Software gibt.
Der Fehler kann nur in den beiden Tabellen liegen, soviel verstehe ich
dann schon von den USB Sachen.
Noch mal zur Erklärung:
Alles geht solange ich nur 1 Byte (8 Befehle) nehme.
Wenn ich es erweitere erkennt Windows mein Gerät nicht mehr, weil
vielleicht der descriptor oder der Endpoint einen Fehler hat.
So dann muss ich mal Danke sagen.
wItemlength und REPORT_SIZE waren meine Fehler.
Es geht nun alles wieder, jetzt halt mit 16 Tasten.
Noch mal Danke,
Peter
PS:
Wenn es aber doch zufällig eine Bessere Methode gibt,
wurde ich mein Programm noch mal anpassen.
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.