Linux 目标设备 HID 支持

Linux 目标设备 HID 支持

我希望我的 Linux 目标 3.10 嵌入式 ARM 设备通过 USB HID 接收和发送命令到主机 PC。主机 PC 将有一个 GUI,通过 HID USB 与 Linux 目标设备通信。通常我会使用非 HID 驱动程序来实现这种功能,但现在不行了。在目标端,我为“hidg”驱动程序创建了一个平台结构 hidg_func_descriptor。报告 ID 为 5,我将其用作数据的第一个字节。我创建了“/dev/hidg0”。我可以使用 write() 向 hidg0 写回主机 PC。它作为带有数据的中断到达分析仪。但我需要从 PC 主机 USB 读取 HID_SET_REPORT。目前,无论主机发送什么,read() 都会挂起。在 USB 分析仪上,我可以看到它在 UDC 级别发送 USB_REQ_SET_CONFIGURATION (0x9)。接下来数据转到 hidg_setup (HID_REQ_SET_REPORT) 并执行 goto 停顿。

Q1. hidg0 是否设计用于将 HID_SET/GET_REPORTs 作为目标来处理?

Q2. 作为目标设备,我是否应该使用不同的 /dev/xxx 进行此类操作?

Q3. 对于这种稍微定制的 HID 平台,使用 /dev/hidraw0 是否更好?

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
    },
};

相关内容