我正在实施具有以下界面的自定义HID设备:
0x06, 0xA0, 0xFF, // Usage Page (Vendor Defined 0xFFA0)
0x09, 0x01, // Usage (0x01)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // Report ID (1)
0x15, 0x00, // Logical Minimum (0)
0x26, 0x01, 0x00, // Logical Maximum (1)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x01, // Report ID (1)
0x15, 0x00, // Logical Minimum (0)
0x26, 0x01, 0x00, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x75, 0x06, // Report Size (6)
0x95, 0x01, // Report Count (1)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x85, 0x03, // Report ID (1)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0xFF, // Logical Maximum (65535)
0x75, 0x10, // Report Size (16)
0x95, 0x01, // Report Count (1)
0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0, // End Collection
当我通过USB逻辑分析仪将此设备插入计算机时,我看到它是枚举的,然后是某些东西(我不确定是什么,有什么想法?)使用hid报告描述符智能地抓取一堆报告:
(control)(endpoint 0) Get Input Report[1]
(control)(endpoint 0) Get Feature Report[1]
"获取输入报告"因为我认为输入报告是通过中断传输发送的,所以条目很困惑。如果我使用usbhid的hid_write,我会看到以下条目,所以对于通过中断传输发送的输入报告,我必须至少有一半......:
(interrupt)(endpoint 1) Input Report[1]"
我一直无法找到描述控制之间差异的信息"获取输入报告"并打断"输入报告"转让,我希望你们中的一个人会知道。
为什么控制"获取输入报告"存在?
为什么不让规范要求获得功能报告"每个"输入报告都存在条目" id entry?
为什么使用输入报告的控制传输与中断传输来获取每个已定义的输入/功能报告的输入/功能报告?
答案 0 :(得分:1)
查看USB HID v1.1,第51页有Get_Report请求的定义:
此请求在绝对项的初始化时间和确定要素项的状态时很有用。此请求不用于定期轮询设备状态。
在这里,这正是驱动程序正在做的事情:它正在检索各种报告以初始化其当前状态。请注意,主机无法请求设备在其中断管道上发送报告。因此对控制管道的请求。
第4.4章解释了各种端点的使用。
另请注意,功能报告和输入报告不会处理相同的数据,即使它们具有相同的报告ID(报告ID是每种报告类型)。