2016-12-14 4 views
0

Я работаю над адаптером, который берет две библиотеки и преобразует вход передатчика/контроллера в вход HID (через PPM, но я не думаю, что это будет иметь значение для этого сообщения). Я использую Arduino, но публикую здесь, потому что, если я не ошибаюсь, моя проблема заключается в дескрипторе HID Report, а не в коде Arduino.HID Gamepad Report Descriptor Issue

У меня есть дескриптор образца, который работает, если я использую его, работая один такой:

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

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

ответ

1

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