USB HID-устройство с несколькими геймпадами в одном интерфейсе - используйте разные имена

У меня есть устройство USB на основе AVR, которое объявляет один интерфейс HID с 4 геймпадами в своем дескрипторе отчета. (это проект 4nes4snes https://github.com/norill/4nes4snes)

Он работает, как ожидалось, но все 4 геймпада показывают одно и то же имя в настройках геймпада и в проводнике устройств в окнах, что затрудняет их различение в различных приложениях.

Есть ли способ присвоить собственные строки каждой из конфигураций. Может быть, используя некоторыеUSAGE команда.

К сожалению, я совсем не знаком с USB.

Вот дескриптор отчета:

const char fournsnes_usbHidReportDescriptor[] PROGMEM = {

    /* Controller and report_id 1 */
    0x05, 0x01,         // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,         // USAGE (Joystick)
    0xa1, 0x01,         //  COLLECTION (Application)
    0x09, 0x01,         //      USAGE (Pointer)
    0xa1, 0x00,         //      COLLECTION (Physical)
    0x85, 0x01,         //          REPORT_ID (1)
    0x09, 0x30,         //          USAGE (X)
    0x09, 0x31,         //          USAGE (Y)
    0x15, 0x00,         //          LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,   //          LOGICAL_MAXIMUM (255)
    0x75, 0x08,         //          REPORT_SIZE (8)
    0x95, 0x02,         //          REPORT_COUNT (2)
    0x81, 0x02,         //          INPUT (Data,Var,Abs)

    0x05, 0x09,         //          USAGE_PAGE (Button)
    0x19, 1,            //          USAGE_MINIMUM (Button 1)
    0x29, 8,            //          USAGE_MAXIMUM (Button 8)
    0x15, 0x00,         //          LOGICAL_MINIMUM (0)
    0x25, 0x01,         //          LOGICAL_MAXIMUM (1)
    0x75, 1,            //          REPORT_SIZE (1)
    0x95, 8,            //          REPORT_COUNT (8)
    0x81, 0x02,         //          INPUT (Data,Var,Abs)
    0xc0,               //      END_COLLECTION
    0xc0,               // END_COLLECTION

    /* Controller and report_id 2 */
    0x05, 0x01,         // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,         // USAGE (Joystick)
    0xa1, 0x01,         //  COLLECTION (Application)
    0x09, 0x01,         //      USAGE (Pointer)
    0xa1, 0x00,         //      COLLECTION (Physical)
    0x85, 0x02,         //          REPORT_ID (2)
    0x09, 0x30,         //          USAGE (X)
    0x09, 0x31,         //          USAGE (Y)
    0x15, 0x00,         //          LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,   //          LOGICAL_MAXIMUM (255)
    0x75, 0x08,         //          REPORT_SIZE (8)
    0x95, 0x02,         //          REPORT_COUNT (2)
    0x81, 0x02,         //          INPUT (Data,Var,Abs)
    0x05, 0x09,         //          USAGE_PAGE (Button)
    0x19, 1,            //          USAGE_MINIMUM (Button 1)
    0x29, 8,            //          USAGE_MAXIMUM (Button 8)
    0x15, 0x00,         //          LOGICAL_MINIMUM (0)
    0x25, 0x01,         //          LOGICAL_MAXIMUM (1)
    0x75, 1,            //          REPORT_SIZE (1)
    0x95, 8,            //          REPORT_COUNT (8)
    0x81, 0x02,         //          INPUT (Data,Var,Abs)
    0xc0,               //      END_COLLECTION
    0xc0,               // END_COLLECTION

    /* Controller and report_id 3 & 4 */
    // ...
};

0 ответов

Другие вопросы по тегам