Supporto HID del dispositivo di destinazione Linux


1

Voglio che il mio dispositivo ARM integrato 3.10 di destinazione Linux possa recuperare e inviare comandi a un PC HOST tramite USB HID. Il PC HOST avrà una GUI che comunica tramite USB HID al dispositivo di destinazione Linux. Di solito userei un driver non HID per questo tipo di cose, ma questa non è un'opzione ora. Sul lato target ho creato una piattaforma hidg_func_descriptor per il driver "hidg". L'ID del rapporto è 5, che utilizzo per il primo byte dei DATI. Ho creato "/ dev / hidg0". Posso riscrivere sul PC HOST con write () su hidg0. Arriva come interruzione con i dati sull'analizzatore. Ma devo leggere () l'HID_SET_REPORT dal PC HOST USB. Attualmente read () si blocca, indipendentemente da ciò che l'HOST invia. Sull'analizzatore USB posso vederlo inviare USB_REQ_SET_CONFIGURATION (0x9) a livello di UDC.

Q1. Hidg0 è progettato per gestire HID_SET / GET_REPORTs come target?

Q2. Come dispositivo di destinazione, dovrei usare un / dev / xxx diverso per questo tipo di operazione?

Q3. È meglio usare / dev / hidraw0 per questa piattaforma HID un po 'personalizzata.

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
    },
};
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.