USB Interface Deskriptor - USB als Keyboard

OP #3156338
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe das Forum schon ein wenig durchstöbert, hänge gerade ein 
wenig....

Kann ich generell jedes USB Gerät als virtuelles Keyboard registrieren 
lassen. Ich habe hier eine Aussage von einem Kollegen, welche ich nicht 
recht glauben kann. Er meint, dass sich Geräte, bei denen es sich um 
eine Vendor-HID-class handelt nicht ginge. Um das zu realisiern müsste 
die Klasse in eine HID sub class keyboard geändert werden.

Ich habe recherchiert, dass die Interface Deskriptoren den 
Registirierungstyp (Keyboard) dem Betriebssystem mitteilen.
Könnte man hier nicht die Information auf den Chip übertragen, heißt 
kann ich nachträglich die Informationen der Deskriptoren für das USB 
Gerät ändern?

Vielen Dank im Voraus für Ihre Mühe.

bvb09man
(Firma: matzetronics) #3156350
Lesenswert?
• ▲
▼
Fabian Hoffmann schrieb:
> Könnte man hier nicht die Information auf den Chip übertragen, heißt
> kann ich nachträglich die Informationen der Deskriptoren für das USB
> Gerät ändern?

Das geht natürlich erstmal nur, wenn die Deskriptoren nicht 'hart' im 
USB Chip kodiert sind, sondern z.B. in einem Flash erreichbar sind. Und 
dann muss sich die Peripherie auch wie ein solches Gerät verhalten, d.h. 
ein Keyboard kann nicht plötzlich relative Mauskoordinaten liefern, 
sondern muss sich an die Konventionen der jeweilige Geräteklasse halten.
Hier ist mal ein USB Deskriptor (in V-USB syntax) eines Keyboards:
1
PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] = { /* USB report descriptor */
2
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
3
    0x09, 0x06,                    // USAGE (Keyboard)
4
    0xa1, 0x01,                    // COLLECTION (Application)
5
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
6
    0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
7
    0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
8
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
9
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
10
    0x75, 0x01,                    //   REPORT_SIZE (1)
11
    0x95, 0x08,                    //   REPORT_COUNT (8)
12
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
13
    0x95, 0x01,                    //   REPORT_COUNT (1)
14
    0x75, 0x08,                    //   REPORT_SIZE (8)
15
    0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
16
    0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
17
    0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
18
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
19
    0xc0                           // END_COLLECTION
20
};
Im Vergleich dazu hier mal eine Maus (mit absoluten Koordinaten, da es 
eigentlich ein Tablet ist):
1
PROGMEM char usbHidReportDescriptor[60] = {
2
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
3
    0x09, 0x02,                    // USAGE (Mouse)
4
    0xa1, 0x01,                    // COLLECTION (Application)
5
    0x09, 0x01,                    //   USAGE (Pointer)
6
    0xa1, 0x00,                    //   COLLECTION (Physical)
7
    0x05, 0x09,                    //     USAGE_PAGE (Button)
8
    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
9
    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
10
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
11
    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
12
    0x95, 0x03,                    //     REPORT_COUNT (3)
13
    0x75, 0x01,                    //     REPORT_SIZE (1)
14
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
15
    0x95, 0x01,                    //     REPORT_COUNT (1)
16
    0x75, 0x05,                    //     REPORT_SIZE (5)
17
    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)
18
    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
19
    0x09, 0x30,                    //     USAGE (X)
20
    0x09, 0x31,                    //     USAGE (Y)
21
    0x35, 0x00,                    //     PHYSICAL_MINIMUM (0)
22
    0x46, 0x9d, 0x0b,              //     PHYSICAL_MAXIMUM (2973)
23
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
24
    0x26, 0x9d, 0x0b,              //     LOGICAL_MAXIMUM (2973)
25
    0x65, 0x11,                    //     UNIT (SI Lin:Distance)
26
    0x55, 0x0e,                    //     UNIT_EXPONENT (-2)
27
    0x75, 0x10,                    //     REPORT_SIZE (16)
28
    0x95, 0x02,                    //     REPORT_COUNT (2)
29
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
30
    0xc0,                          //   END_COLLECTION
31
    0xc0                           // END_COLLECTION
32
};
OP #3217890
Lesenswert?
• ▲
▼
Hallo, ich habe noch ein Verständnisproblem bezüglich des Anmeldens 
eines virtuellen Keyboards und hoffe, dass Ihr mir erneut helfen könnt.

Ich habe hier ein Board, welches sich jetzt über HID als virtuelles 
Keyboard anmeldet. Welcher Treiber auf der Gegenseite (windows) 
registriert denn dieses Board? Kann ich beliebige Tatsten der Tastatur 
(z.B. Pfeiltasten) für die Schalter auf dem Board festlegen? Welche 
Tasten machen denn am meisten Sinn?

Vielen Dank im Voraus für Eure Mühe.

bvb09man

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.