Linux-Zielgerät-HID-Unterstützung

763
Crizzo

Ich möchte, dass mein Linux Target 3.10 Embedded ARM-Gerät über USB-HID Befehle an einen HOST-PC sendet und sendet. Der HOST-PC verfügt über eine GUI, die über HID USB mit dem Linux-Zielgerät kommuniziert. Normalerweise würde ich einen Nicht-HID-Treiber für diese Art von Dingen verwenden, aber das ist jetzt keine Option. Auf der Zielseite habe ich eine Plattform struct hidg_func_descriptor für den "hidg" -Treiber erstellt. Die Report-ID ist 5, die ich für das erste Byte der DATA verwende. Ich habe "/ dev / hidg0" erstellt. Ich kann mit dem write () nach hidg0 auf den Host-PC zurückschreiben. Es kommt als Interrupt mit Daten auf dem Analysator an. Aber ich muss den HID_SET_REPORT vom PC HOST USB lesen (). Derzeit hängt das read () einfach, egal was der HOST sendet. Auf dem USB-Analysator kann ich sehen, dass er die USB_REQ_SET_CONFIGURATION (0x9) auf UDC-Ebene sendet.

Q1. Ist hidg0 darauf ausgelegt, HID_SET / GET_REPORTs als Ziel zu behandeln?

Q2. Sollte ich als Zielgerät für diese Art von Operation ein anderes / dev / xxx verwenden?

Q3. Ist es besser, / dev / hidraw0 für diese etwas angepasste HID-Plattform zu verwenden?

platform configuration: static struct hidg_func_descriptor hcr4_usb_hid_data = { .subclass = 0, .protocol = 0, .report_length = 64, .report_desc_length = 41, .report_desc = { 0x06, 0x20, 0xFF, // Usage Page (Vendor Defined 0xFF20) 0x09, 0x01, // Usage (0x01) 0xA1, 0x01, // Collection (Application) 0x75, 0x08, // Report Size (8) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x85, 0x05, // Report ID (5) 0x09, 0x05, // Usage (0x05) 0x95, 0x3F, // Report Count (63) 0xB2, 0x02, 0x01, // Feature () 0x85, 0x02, // Report ID (2) 0x09, 0x20, // Usage (0x20) 0x95, 0x3F, // Report Count (63) 0x82, 0x02, 0x01, // Input () 0x85, 0x03, // Report ID (3) 0x09, 0x21, // Usage (0x21) 0x95, 0x05, // Report Count (5) 0x91, 0x02, // Output () 0xC0, // End Collection }, }; 
1

0 Antworten auf die Frage