www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR und V-USB: mit ATmega/tiny als USB-Tastatur Tastendrücke senden und Daten empfangen


Autor: Nils ‫‪ (n-regen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte eins der V-USB-Beispiele (z.B. HIDKeys 
(http://www.obdev.at/products/vusb/hidkeys.html) oder hid-data 
(http://www.obdev.at/products/vusb/download.html)) so umbauen, dass sich 
ein ATmega oder ATtiny als USB-Tastatur am Computer anmeldet und 
Tastendrücke senden kann, man ihm aber auch per SetFeature Daten senden 
kann.
Ich habe schon einen Feature-Report in den Report-Descriptor der 
HIDKeys-Firmware geschrieben, aber Windows erkennt die "Tastatur" dann 
nicht (statt dem "Gerät angesteckt"-Sound wird der 
"Hardwarefehler"-Sound abgespielt).
Was muss ich in den Report-Descriptor und die V-USB-Funktionen 
schreiben, damit der µC Tastendrücke senden und Daten empfangen kann?

Autor: Nico B. (Firma: Trimble) (vegetico)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung, ob dir das hier was hilft, aber:
PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] = { /* USB report descriptor */
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x06,                    // USAGE (Keyboard)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
    0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x08,                    //   REPORT_COUNT (8)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
    0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
    0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
    0xc0                           // END_COLLECTION
};
Hatte ich mal hier (http://macetech.com/blog/?q=node/46) her genommen 
und lief problemlos...

Autor: Nils ‫‪ (n-regen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist der minimalistische Tastatur-Descriptor (nur einzelne 
Tastendrücke, keine LEDs), der auch bei HIDKeys verwendet wird.
Ich brauch aber einen, der auch Feature-Requests unterstützt - nur 
meldet mir Windows einen Hardwarefehler, wenn ich einfach "USAGE 
(Undefined)" (0x09, 0x00) und "Feature (Data,Var,Abs,Buf)" (Hexwerte 
habe ich gerade nicht im Kopf) dazuschreibe.
Hat irgendjemand einen Beispielquelltext, wo beides 
(Tastatur-Implementierung und Feature-Requests) zusammen funktioniert 
oder kann mir erklären, was ich dazu an HIDKeys verändern muss?

Autor: Andreas B. (andreasb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs mir jetzt nicht genau angesehen, aber ggf. hilfts dir weiter:

http://www.schatenseite.de/dulcimer.html?L=2

>This coincidence proves how popular the Model M still is: Another
>replacement electronics to give USB connectivity to IBM’s old keyboard,
>developed at the same time as rump (see above) and without knowing about
>the parallel effort. *This version supports the keyboard’s LEDs as well.*
char PROGMEM usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] = {
    0x05, 0x01,   // USAGE_PAGE (Generic Desktop)
    0x09, 0x06,   // USAGE (Keyboard)
    0xa1, 0x01,   // COLLECTION (Application)
    0x05, 0x07,   //   USAGE_PAGE (Keyboard)
    0x19, 0xe0,   //   USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7,   //   USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00,   //   LOGICAL_MINIMUM (0)
    0x25, 0x01,   //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,   //   REPORT_SIZE (1)
    0x95, 0x08,   //   REPORT_COUNT (8)
    0x81, 0x02,   //   INPUT (Data,Var,Abs)
    0x95, 0x01,   //   REPORT_COUNT (1)
    0x75, 0x08,   //   REPORT_SIZE (8)
    0x81, 0x03,   //   INPUT (Cnst,Var,Abs)
    0x95, 0x05,   //   REPORT_COUNT (5)
    0x75, 0x01,   //   REPORT_SIZE (1)
    0x05, 0x08,   //   USAGE_PAGE (LEDs)
    0x19, 0x01,   //   USAGE_MINIMUM (Num Lock)
    0x29, 0x05,   //   USAGE_MAXIMUM (Kana)
    0x91, 0x02,   //   OUTPUT (Data,Var,Abs)
    0x95, 0x01,   //   REPORT_COUNT (1)
    0x75, 0x03,   //   REPORT_SIZE (3)
    0x91, 0x03,   //   OUTPUT (Cnst,Var,Abs)
    0x95, 0x06,   //   REPORT_COUNT (6)
    0x75, 0x08,   //   REPORT_SIZE (8)
    0x15, 0x00,   //   LOGICAL_MINIMUM (0)
    0x25, 0x65,   //   LOGICAL_MAXIMUM (101)
    0x05, 0x07,   //   USAGE_PAGE (Keyboard)
    0x19, 0x00,   //   USAGE_MINIMUM (Reserved (no event indicated))
    0x29, 0x65,   //   USAGE_MAXIMUM (Keyboard Application)
    0x81, 0x00,   //   INPUT (Data,Ary,Abs)
    0xc0          // END_COLLECTION
};

mfg Andreas

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.