HID Gamepad Report Descriptor Проблема

Я работаю над адаптером, который берет две библиотеки и преобразует вход передатчика / контроллера во вход 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 Descriptor Tool, выглядит так:

 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, я могу опубликовать там, но я думаю, что это больше, что я делаю неправильно с дескриптором.

Я очень ценю чье-то время и помощь! Пожалуйста, дайте мне знать, если есть дополнительная информация, которая будет полезна для публикации.

0

Решение

Разобрался с проблемой после простой реализации. Просто выполнил поиск в файлах: usbHidReportDescriptor и обнаружил, что в файле usbconfig.h есть определение для длины, которое мне нужно настроить. Просто отправьте это на тот случай, если у кого-то возникнет та же проблема!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]