www.mikrocontroller.net

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


Autor: aha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ->
S_usb_hid_report_descriptor usb_hid_report_descriptor = {
      0x06, 0xFF, 0xFF,         // 04|2   , Usage Page (vendordefined?)
      0x09, 0x01,               // 08|1   , Usage      (vendordefined
      0xA1, 0x01,               // A0|1   , Collection (Application)
      // IN report
      0x09, 0x02,               // 08|1   , Usage      (vendordefined)
      0x09, 0x03,               // 08|1   , Usage      (vendordefined)
      0x15, 0x00,               // 14|1   , Logical Minimum(0 for signed byte?)
      0x26 ,0xFF,0x00,           // 24|1   , Logical Maximum(255 for signed byte?)
      0x75, 0x08,               // 74|1   , Report Size(8) = field size in bits = 1 byte
      0x95, LENGTH_OF_REPORT_IN,   // 94|1:ReportCount(size) = repeat count of previous item
      0x81, 0x02,               // 80|1: IN report (Data,Variable, Absolute)
      // OUT report
      0x09, 0x04,               // 08|1   , Usage      (vendordefined)
      0x09, 0x05,               // 08|1   , Usage      (vendordefined)
      0x15, 0x00,               // 14|1   , Logical Minimum(0 for signed byte?)
      0x26, 0xFF,0x00,           // 24|1   , Logical Maximum(255 for signed byte?)
      0x75, 0x08,               // 74|1   , Report Size(8) = field size in bits = 1 byte
      0x95, LENGTH_OF_REPORT_OUT,   // 94|1:ReportCount(size) = repeat count of previous item
      0x91, 0x02,               // 90|1: OUT report (Data,Variable, Absolute)
      // Feature report
      0x09, 0x06,               // 08|1   , Usage      (vendordefined)
      0x09, 0x07,               // 08|1   , Usage      (vendordefined)
      0x15, 0x00,               // 14|1   , LogicalMinimum(0 for signed byte)
      0x26, 0xFF,0x00,          // 24|1   , Logical Maximum(255 for signed byte)
      0x75, 0x08,               // 74|1   , Report Size(8) =field size in bits = 1 byte
      0x95, 0x04,               // 94|1:ReportCount
      0xB1, 0x02,               // B0|1:   Feature report
      0xC0                      // C0|0    , End Collection
 };

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


Gruß
aha

Autor: Ugene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Gruß
Ugene

Autor: aha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
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

Autor: Willi71 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willi71 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... :-(

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.