Hallo, Ich probier gerade ein USB-HID zu progammieren, ich hab mir auch schon die entsprechenden Dokumente von usb.org geholt. Ich blicke da aber nicht so recht Durch. Ich wollte die Libarys von http://www.obdev.at/avrusb/ verwenden. Ich hab jetzt doch mal ein paar Fragen zum USB-HID Reportdescriptor und zur Übertragung. Ist es richtig das im Reportdescriptor beschrieben wird wie die Daten sich beim Übertragen zusammensetzen? Bsp.: Gamepad mit 24 Buttons... 0x05,0x01 ;Usage_Page (Generic Desktop) 0x09,0x05 ;Usage (Game Pad) 0xA1,0x01 ;Collection (Application) 0x05,0x09 ;Usage_Page (Button) 0x19,0x01 ;Usage_Minimum (Button 1) 0x29,0x18 ;Usage_Maximum (Button 24) 0x15,0x00 ;Logical_Minimum (0) 0x25,0x01 ;Logical_Maximum (1) 0x75,0x01 ;Report_Size (1) 0x95,0x18 ;Report_Count (24) 0x55,0x00 ;Unit_Exponent (0) 0x65,0x00 ;Unit (None) 0x81,0x02 ;Input (Data, Var, Abs) 0xC0 ;End_Collection 24 Buttons * 1Bit = 3 Bytes Ist das im Prinzip so das ich jetzt die 24 Bits für die Buttons zu 3 Bytes zusammenfasse und dann über den Befehl usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); zum PC rausschicke? Ich hoffe ich hab mich jetzt nicht allzu Dämlich ausgedrückt. Aber Vielen Dank schon mal!
Ich habe deinen Descriptor nicht geprüft, aber versuch mal ein einfaches Beispiel. Du kannst mit USB nix schicken, der Host (PC) holt sich die Daten ab. Du musst auf die Anfragen reagieren, um das klarzustellen.
Also stellt die Funktion "usbSetInterrupt(reportBuffer, sizeof(reportBuffer))" die Daten bereit die sich der PC abholt? Was wäre so ein einfaches Beispiel? Hast Du da einen Tip oder ein Beispiel?
Ich hab mit AVR USB noch nicht gearbeitet. Nimm ein einfaches Beispiel, zB bei Tastendruck wird was auf dem Bildschirm (PC) geschrieben, wenns eine Tastaturemulation ist. So einfach wie RS232 ist USB leider nicht.
Kann mir keiner ein kleines Beispiel für ein Gamepad mit z.B. einer Taste geben, auf das ich dann entsprechend aufbauen kann? Ich blicke bei den großen Projekten nicht so recht Durch. Ich möchte nicht jeden Schrit vorgekaut bekommen nur so ein paar Tips zum grundsätzlichen Aufbau und Ablauf. In den Dokumenten von usb.org ist zwar alles haarklein beschrieben aber Irgendwie bekomme ich die nötigen Infos nicht zusammen.
Hier aus dem EzHID-Projekt der Descriptor für ein SNES-Gamepad:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
Gast
#1264112
Beispiele für Descriptoren stehen auch in der USB HID Spec.
Gast
#1270398
Schau mal bei obdev auf der Seite. Da sollte das passende Beispiel für Dich dabei sein. Gruss Potter68
Hallo,
ist zwar schon ein Paar Tage her, aber jetzt habe ich wieder ein bischen
Zeit mich mit der Thematik USB-HID auseinanderzusetzen.
Mittlerweile habe ich mir auch eine kleine Platine mit Atmega8 und der
Notwendigen Beschaltung für USB erstellt.
Getestet hab ich die Schaltun mit HID-Keys von der Obdev-Seite.
Also die Hardware zu testen setht bereits.
Nach einigem erfolglosem rumbasteln habe ich jetzt verschiedene Fragen:
- Kann man ein Gamepad Reportdescriptor mit nur 8 Buttons und sonst
keinen Steuerelementen erstellen der unter Windows funktioniert? (also
Ohne Steuerkreuz)
z.B.
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x05, // USAGE (Game Pad)
0xA1, 0x01, // Collection (Application)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x08, // USAGE_MAXIMUM (Button 8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x55, 0x00, // Unit_Exponent (0)
0x65, 0x00, // Unit (None)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
- Kann mir Jemand den Unterschied zwischen Report_Size und Report_Count
erklären?
- Gibt es ein beispiel für ein Gampad USB-HID in C mit Atmega8? (Ich
habe bisher nur Assembler Beispiele gefunden.)
- Gibt es Tools um einen Reportdescriptor zu Überprüfen. (ausser HID
Descriptor Tool (DT))
- Würde es reichen z.B in HID.Keys erstmal den report Descriptor zu
ändern das Windows das entsprechende Gerät erkennt.
Ddas da natürlich nichts an Daten ankommt ist mir klar das wäre dann
Step2.
Viele Viele Fragen.
Ich Hoffe mir kann jemand Helfen.
Vielen Dank schonmal.
Gibt es eigentlich eine USB-HID Dokumentation in Deutsch?
Hat den niemand einen Tip?
Gast
#1373423
Hi, lies das Buch von Jan Axelson. Das ist eine sehr ausführliche Rundum-Einführung in USB. Gruß Potter68
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.