Делал USB-HID джойстик. Возникла следующая проблема: с помощью HID Descriptor Tool собрать следующий дескриптор HID-а:
Код: Выделить всё
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x02, // USAGE_PAGE (Simulation Controls)
0x09, 0xb0, // USAGE (Aileron)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0xb8, // USAGE (Elevator)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0xbb, // USAGE (Throttle)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0xba, // USAGE (Rudder)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
Если кратко, 4 аналоговых оси: элероны, руль высоты, газ, руль направления, по 1 байту на каждую ось. Собственно, при подключении устройства видны и корректно обрабатываются только газ и руль направления. Пробовал менять свойства, пределы значений, так же пробовал другие варианты осей (Dial, Slider), так же переставлял местами оси. Ничего не помогает: упорно видится только газ и руль направления. Может кто знает, что в данном дескрипторе неверно?
После того, как взял из MJoy дескриптор (обрезав его до 4х каналов):
Код: Выделить всё
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x32, // USAGE (Z)
0x09, 0x33, // USAGE (Rx)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xc0 // END_COLLECTION
Все 4 оси видятся, но под несколько другими именами. Собственно настроить софт на данном этапе не особая проблема, но все же может кто сталкивался, почему надо делать такой несколько замороченный дескриптор и почему не прокатил мой вариант?