HID 游戏手柄报告描述符问题
Posted
技术标签:
【中文标题】HID 游戏手柄报告描述符问题【英文标题】:HID Gamepad Report Descriptor Issue 【发布时间】:2016-12-14 16:43:06 【问题描述】:我正在开发一个适配器,它需要两个库并将发射器/控制器输入转换为 HID 输入(通过 PPM,但我认为这对这篇文章没有影响)。我正在使用 Arduino,但在这里发帖是因为除非我有误解,否则我的问题在于 HID 报告描述符,而不是我的 Arduino 代码。
我有一个示例描述符,如果我使用它就可以工作,工作的是这样的:
PROGMEM const char usbHidReportDescriptor[36] =
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x05, // USAGE (Game Pad)
0xa1, 0x01, // COLLECTION (Application)
0xa1, 0x00, // COLLECTION (Physical)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x32, // USAGE (Z) rx
0x09, 0x35, // USAGE (Rx) ry
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0xff, 0x00, // PHYSICAL_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (-127)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x04, // REPORT_COUNT (4)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0 // END_COLLECTION
;
第一个示例只有棒,没有按钮,所以我尝试创建一个有按钮的描述符。我使用 HID 描述符工具生成的配置文件是这样的:
PROGMEM const char usbHidReportDescriptor[46] =
0x05, 0x01, //USAGE_PAGE (Generic Desktop)
0x09, 0x05, //USAGE (Game Pad)
0xa1, 0x01, //COLLECTION (APPLICATION)
0xa1, 0x00, // COLLECTION (Physical)
0x05, 0x09, //USAGE_PAGE (Button)
0x19, 0x01, //USAGE_MINIMUM (Button1)
0x29, 0x10, //USAGE_MAXIMUM (Button 16)
0x15, 0x00, //LOGICAL_MINIMUM (0)
0x25, 0x01, //LOGICAL_MAXIMUM(1)
0x95, 0x10, //REPORT_COUNT (16)
0x75, 0x01, //REPORT_SIZE (1)
0x81, 0x02, //INPUT(Data, Var, Abs)
0x05, 0x01, //USAGE_PAGE (Generic Desktop)
0x09, 0x30, //USAGE (X)
0x09, 0x31, //USAGE (Y)
0x09, 0x32, //USAGE (Z)
0x09, 0x33, //USAGE (Rx)
0x15, 0x81, //LOGICAL_MINIMUM(-127)
0x25, 0x7f, //LOGICAL_MAXIMUM(127)
0x75, 0x08, //REPORT_SIZE(8)
0x95, 0x04, //REPORT_COUNT(4)
0x81, 0x02, //INPUT(Data,Var,Abs)
0xc0, //END_Collection
0xc0 //END_Collection
;
当我编译它时,我没有收到错误,但在上传到设备后,我在设备配置文件中收到“此设备无法启动。(代码 10)”消息。这是目前我在测试中更改的唯一导致此问题的内容。
如果您仍然觉得最好在 Arduino 部分问这个问题,我可以在那里发布,但我认为这更多是我在描述符上做错了。
非常感谢任何人的时间和帮助!如果有更多信息有助于发布,请告诉我。
【问题讨论】:
【参考方案1】:经过简单的认识,问题就解决了。刚刚在以下文件中查找:usbHidReportDescriptor,发现usbconfig.h文件中有一个长度定义需要调整。只是发布这个以防万一有人遇到同样的问题!
【讨论】:
以上是关于HID 游戏手柄报告描述符问题的主要内容,如果未能解决你的问题,请参考以下文章