Hallo, bin gerade am Programmieren einer USB- Box , die als Tastatur erkannt wird und Meßwerte an den PC übertragen soll. Das Ganze funktioniert soweit(Microchip Framework mit Pic18fx550). Nun bin ich auf der Suche nach einer Codetabelle für die USB- Tastatur. Alles, was ich finden konnte, differenziert nicht zwischen Groß- und Kleinschreibung, z.B. steht für a A HEX 04. Sende ich 0x04 an die Schnittstelle, erscheint brav das 'a'. Was aber muß ich senden, damit die 2. Belegung(hier also 'A') angezeigt wird? Für Hilfe dankt ulf.
ÄÄÄh, es geht ums Senden der Codes, nicht, wie man die Tasten drückt. Meiner Meinung nach kommt von der Tastatur immer nur 1 Zeichen. Wenn ich 0xE1(=SHIFT Taste links) und danach 0x04 sende, erscheint immer noch'a'. ulf.
Ulf schrieb: > ÄÄÄh, es geht ums Senden der Codes, nicht, wie man die Tasten drückt. Witzbold... Ich meinte natürlich die entsprechenden Codes senden, zumindestens bei "normalen" Tastaturen funktioniert das so.
nochmal: Wenn ich 0xE1(=SHIFT Taste links) und direkt danach 0x04 sende, erscheint immer noch'a'. ulf. immer noch ratlos
Hallo ?!? Tatsache- mit DEM Trick kann man sich drumrummogeln. Caps Lock senden 0x04 senden(klein'a') Caps Lock senden ergibt 'A'. Für meine Zwecke reicht's, die wenigen Großbuchstaben benötige ich nur in der Überschrift, dann kommen Zahlen... Danke! ulf. später vllt. mit eleganterer Lösung.
Die Shift/Caps Taste beeinflusst nicht die Interpretation der nächsten Taste Setze das Modification-Bit für Shift in genau der Nachricht in der du den Tastendruck für A sendest. Erklärung (und ich glaub Beispiele auch) steht aber in der USB-HID Spezifikation.
Dank @ max habe die Erklärungen für die Modification-Bits gefunden, werden in Byte 0 der Nachricht gesendet. Eine etwas gewöhnungsbedürftige Herangehensweise, macht relativ viel Mühe beim Senden eines Textstrings. Ein Problem habe ich noch. Wenn ich in den Modification-Bits was geändert habe, spinnen hinterher Tastatur und Maus, egal, ob noch Datanpakete mit Modification-Bits 0(d.h.Byte0 der Nachricht=0) nachgeschickt wurden. Die "hängenden" Sondertasten sind erst nach Windows-Neustart wieder normal. Momentan finde ich keine Lösung und bleibe erstmal beim Trick mit der CapsLock Taste, auch wenn mich's wurmt... ulf.
Hallo nochmal! Fehler gefunden, der Modifier war Quatsch. Weiß der Deibel, wie ich auf 0xE1 kam, muß natürlich 0x02 sein für linke Shifttaste. Jetzt geht es wie folgt: Keyboard(0x02,key_code); //Shift + Tastencode wie benötigt Keyboard(0,0); //Modifier zurücksetzten, keine Taste gedrückt void Keyboard(unsigned char mod,unsigned char key_code){ if(HIDTxHandleBusy(lastINTransmission)) DelayMs(10); if(!HIDTxHandleBusy(lastINTransmission)){ hid_report_in[0] = modifier; hid_report_in[1] = 0; hid_report_in[2] = key_code; hid_report_in[3] = 0; hid_report_in[4] = 0; hid_report_in[5] = 0; hid_report_in[6] = 0; hid_report_in[7] = 0; lastINTransmission = HIDTxPacket(HID_EP,BYTE*)hid_report_in, 0x08); } return; } ulf
Der weit verbreitete Denkfehler ist, dass USB Scancodes verwenden würde wie PS/2. Tatsächlich schickt eine HID Tastatur aber eine Zustandsmeldung, also gibt in einem Report an welche Tasten gerade gedrückt sind. Einige Windows-Versionen haben übrigens bunte Effekte bei den Modifiers, die reagieren teilweise erst beim nächsten Report auf eine Änderung des Status. Daher sollte man erst den Modifier als betätigt und dann die dazu gehörende Zeichentaste schicken.
Danke an Guido Körber: Wir haben einen RFID-Reader entwickelt, der sich als USB-HID am Computer anmeldet. Mehrere ID-Nummern sollten durch Semikolon getrennt werden. Klappt auch prima, nur wenn die Daten über eine Windows-Remote-Verbindung übertragen wurden, kam bei manchen Windows-Versionen (XP, 2003 Server) statt des Semikolon nur ein Komma an. Dank dem Tipp von Guido Körber senden wir nun auch zuerst das Drücken der Shift-Taste, dann das Zeichen mit Shift, dann den Code für Tasten losgelassen. So klappt es. Ein tagelanges Suchen hat ein Ende, Markus
:) Musste diese Sachen auf die harte Tour lernen bei der Entwicklung unserer KeyWarrior Controller. Zum Glück arbeiten wir hier cross-Platform und meine hauptsächliche Arbeitsplattform ist MacOS. Dadurch sieht man dann das unterschiedliche Verhalten auf den verschiedenen Betriebssystemen und stellt weniger die eigene geistige Gesundheit als die der Windows-Entwickler in Frage >)
Hallo, ich schicke vom Controller den Modifier und dann an Stelle [2] den Key. Das tut soweit alles, es kommt sauber Shift-Ctrl usw. an. Jetzt habe ich das Problem, dass bei dem Buchstaben Y und Z vertauscht ist. Ich habe schon am Feld bCountry rumgespielt, aber Windows interestiert das nicht. (ja, meine Haupttastatur ist deutsch). Hat hier auch einer der Spezialisten einen Rat? Vielen Dank Wolfgang
Hallo, unter Windows wird die Keycode-Translation erst nach der HID-Device gemacht, d.h. alle Keyboards unterliegen der gleichen Mauschelei. Das kann bei Hotkeys z.B. für eine CNC-Steuerung böse rausgehen: statt in Y-Richtung fährt der Tisch in Z-Richtung. Unter Linux kann man im Xserver die Translation an je jeweilige PID anhängen und so ein Controltastatur unabhängig vom normal angeschlossenen Keyboard machen. cu Wo
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.