隐藏游戏板报告描述符问题

HID Gamepad Report Descriptor Issue

本文关键字:问题 描述 报告 游戏 隐藏      更新时间:2023-10-16

我正在处理一个适配器,该适配器将两个库并将发射机/控制器输入转换为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部分中最好地问,我可以在此处发布,但是我认为这是我对描述符的错误。

我非常感谢任何人的时间和帮助!请让我知道是否有更多信息有助于发布。

在实现简单的实现后解决了问题。只是在以下文件中找到了一个文件:usbhidreportDescriptor,发现我需要调整的USBConfig.h文件中有一个定义。仅在任何人遇到相同问题的情况下发布!