USB HID устройство с несколькими геймпадами в одном интерфейсе - используйте разные имена - PullRequest
0 голосов
/ 13 октября 2019

У меня есть 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 */
    // ...
};
...