Suporte HID do dispositivo de destino do Linux

1

Eu quero que meu dispositivo ARM embarcado 3.10 de destino para Linux receba e envie comandos para um PC HOST via USB HID. O PC do HOST terá uma interface gráfica que se comunica via USB HID para o dispositivo de destino do Linux. Normalmente eu usaria um driver não-HID para esse tipo de coisa, mas isso não é uma opção agora. No lado do alvo eu criei uma plataforma struct hidg_func_descriptor para o driver "hidg". O ID do relatório é 5, que eu uso para o primeiro byte dos DATA. Eu criei "/ dev / hidg0". Eu posso escrever de volta para o PC HOST com o write () para hidg0. Chega como uma interrupção com dados no analisador. Mas eu preciso ler () o HID_SET_REPORT do PC HOST USB. Atualmente, o read () simplesmente trava, não importa o que o HOST envia. No analisador USB, vejo que ele envia o USB_REQ_SET_CONFIGURATION (0x9) no nível do UDC. Em seguida, os dados vão para o hidg_setup (HID_REQ_SET_REPORT) e faz um goto stall.

Q1. O hidg0 foi projetado para manipular HID_SET / GET_REPORTs como um alvo?

Q2. Como dispositivo de destino, devo usar um / dev / xxx diferente para esse tipo de operação?

Q3. É melhor usar / dev / hidraw0 para esta plataforma HID personalizada.

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
    },
};
    
por Crizzo 24.10.2016 / 18:26

0 respostas