Forum: Mikrocontroller und Digitale Elektronik AT90USB 162 als HID - Atmel Code - HID Report Deskriptor


von aha (Gast)


Lesenswert?

Hallo,

versuche grad AT90USB162 als HID an PC anzumelden...
Was ich will:
8Byte von µC lesen
8Byte auf µC schreiben
Das habe ich schon mit Win32-LIBUSB hinbekommen.

Nun möchte ich das über HID versuchen und kämpfe Atmel code durch...
Ich möchte auch ungerne Code übernehmen, den ich nicht verstanden hab.

Rätzele gerade an dem hier ->
1
S_usb_hid_report_descriptor usb_hid_report_descriptor = {
2
      0x06, 0xFF, 0xFF,         // 04|2   , Usage Page (vendordefined?)
3
      0x09, 0x01,               // 08|1   , Usage      (vendordefined
4
      0xA1, 0x01,               // A0|1   , Collection (Application)
5
      // IN report
6
      0x09, 0x02,               // 08|1   , Usage      (vendordefined)
7
      0x09, 0x03,               // 08|1   , Usage      (vendordefined)
8
      0x15, 0x00,               // 14|1   , Logical Minimum(0 for signed byte?)
9
      0x26 ,0xFF,0x00,           // 24|1   , Logical Maximum(255 for signed byte?)
10
      0x75, 0x08,               // 74|1   , Report Size(8) = field size in bits = 1 byte
11
      0x95, LENGTH_OF_REPORT_IN,   // 94|1:ReportCount(size) = repeat count of previous item
12
      0x81, 0x02,               // 80|1: IN report (Data,Variable, Absolute)
13
      // OUT report
14
      0x09, 0x04,               // 08|1   , Usage      (vendordefined)
15
      0x09, 0x05,               // 08|1   , Usage      (vendordefined)
16
      0x15, 0x00,               // 14|1   , Logical Minimum(0 for signed byte?)
17
      0x26, 0xFF,0x00,           // 24|1   , Logical Maximum(255 for signed byte?)
18
      0x75, 0x08,               // 74|1   , Report Size(8) = field size in bits = 1 byte
19
      0x95, LENGTH_OF_REPORT_OUT,   // 94|1:ReportCount(size) = repeat count of previous item
20
      0x91, 0x02,               // 90|1: OUT report (Data,Variable, Absolute)
21
      // Feature report
22
      0x09, 0x06,               // 08|1   , Usage      (vendordefined)
23
      0x09, 0x07,               // 08|1   , Usage      (vendordefined)
24
      0x15, 0x00,               // 14|1   , LogicalMinimum(0 for signed byte)
25
      0x26, 0xFF,0x00,          // 24|1   , Logical Maximum(255 for signed byte)
26
      0x75, 0x08,               // 74|1   , Report Size(8) =field size in bits = 1 byte
27
      0x95, 0x04,               // 94|1:ReportCount
28
      0xB1, 0x02,               // B0|1:   Feature report
29
      0xC0                      // C0|0    , End Collection
30
 };

kann mir jemand veraten wofür diese ganze zahlen stehen?
Kommentar dahinter ist mir auch ein rätsel -> was ist USAGE??


Gruß
aha

von Ugene (Gast)


Lesenswert?

Hallo,

schau mal hier rein...
http://www.usb.org/developers/devclass_docs/Hut1_12.pdf

Gruß
Ugene

von aha (Gast)


Lesenswert?

Hallo,

@Ugene
Danke

Ich habe soweit die Firmware angepasst. Sie funktioniert. Der Controller 
meldet sich als HID an. Mit USBlyser sehe ich dass alle Transfers 
erfolgreich sind.

Nun gehts an die PC-Software. Ich habe generic_usb_hid_2008-11-19 von 
Atmel runtergeladen. Mit der Demo.exe kann ich mein Controller finden 
Juhhu!
Ich habe aber noch zwei Fragen:

1.AtUsbHid.dll
Gibs dazu auch source code?

2.Datentransfer
Ich habe gesehen, dass der Controller 8Byte empfängt (Report). Davon ist 
nur 1Byte meine Nutzdaten. Ich möchte aber 8Byte Nutzdaten übertragen. 
Reich es wenn ich dazu diese Zeile anpasse:
1
0x75, 0x08,               // 74|1   , Report Size(8) = field size in bits = 1 byte

statt 0x08 würde ich 0x40 schreiben -> 64bit -> 8Byte

hat das schon jemand ausprobiert?

Danke
aha

von Willi71 (Gast)


Lesenswert?

Eines hab ich rausgefunden, Atmel rückt den code nicht raus (leider).

Hat jemand eine Seite (Tudotial) oder was ähnliches wo man lernen kann 
wie man sowas macht?

Oder hat jemand ein Beispielprojekt wo man sieht wie sowas gemacht wird?

von Benjamin S. (recycler)


Lesenswert?

Hallo aha,
der Clou beim HID ist, dass die Übertragungen (Länge, Format) fest 
vorgegeben sind.
Was hast du für ein Device. Mouse, Joystick, Tastatur oder ?
Oder willst du nur über das HID-Interface zugreifen? Sonst kannst du 
über die USB-Schnittstellen von Microsoft (vgl. MSDN) zugreifen.
Ich habe bei meinen Projekten immer die libusb verwendet.

von Willi71 (Gast)


Lesenswert?

Es ist ein Device ähnlich einer Tastatur.
Über einen extra Kanal sollen weitere Informationen an das Device 
gesendet werden, was mit der Atmel-DLL auch finktioniert.

Leider kann diese (Kundenprojekt) nicht verwendet werden. Ebenso 
scheidet libusb aus. Es muss eine (Kundenspezifische) Entwicklung sein.

Gibt es irgendwo ein entsprechendes Beispiel wie mit der MSDN damit 
umgegangen wird? Irgendwie ist der Wald momentan so groß dass ich die 
einzelnen Bäume nicht sehe... :-(

von Benjamin S. (recycler)


Lesenswert?

vlt hilft das:

Beitrag "HID Gerät Ansprechen"
Beitrag "usbn2mc - HID-Kommunikation"

wenns hilft, kannst du ja mal deine Lösung posten bzw. die Ansätze dazu.

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
Noch kein Account? Hier anmelden.