Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Дискриптор USB HID джойстика STM32

Ср дек 18, 2019 23:19:10

Добрый день ! Помогите понять и разобраться что еще требуется установить чтобы заработало 16 битное значение джойстика, оси X и Y Z Rx соответственно значения должны быть -32768 32767

Микроконтроллер stm32f103
Библиотека HAL

Есть такой рабочий дескриптор, он у меня работает, оси работают в 8 битном режиме -128 127

0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x32, // USAGE (Z)
0x09, 0x33, // USAGE (Rx)
0x15, 0x80, /* LOGICAL_MINIMUM (-128) */
0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x95, 0x04, /* REPORT_COUNT (4) */

Общий размер дескриптора составляет: 169
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE 169


Когда я пытаюсь установить 16 битное значение джойстика, оси X и Y, он определяется системой Windows без ошибок, но все кнопки и оси перестают работать:

0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x32, // USAGE (Z)
0x09, 0x33, // USAGE (Rx)
0x16, 0x00, 0x80, /* LOGICAL_MINIMUM (-32768) */
0x26, 0xFF, 0x7F, /* LOGICAL_MAXIMUM (32767) */
0x75, 0x10, /* REPORT_SIZE (16) */
0x95, 0x04, /* REPORT_COUNT (4) */
Общий размер дескриптора увеличивается: 171
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE 171





Рабочий дескриптор, включает в себя Клавиатуру, Джойстик на 8 осей 32 кнопки 16 положений переключателя вида :

// 83* // общее количество 169

0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x05, // USAGE (Game Pad)
0xa1, 0x01, // COLLECTION (Application)
0xa1, 0x00, // COLLECTION (Physical)
0x85, 0x01, // REPORT_ID (1)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x20, // USAGE_MAXIMUM (Button 32)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x20, // REPORT_COUNT (32)
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, 0x80, /* LOGICAL_MINIMUM (-128) */
0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */
0x75, 0x08, /* REPORT_SIZE (16) */
0x95, 0x04, /* REPORT_COUNT (4) */
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x34, /* USAGE (Z) */
0x09, 0x35, /* USAGE (Rz) */
0x09, 0x36, /* USAGE (Z) */
0x09, 0x37, /* USAGE (Rz) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x26, 0xff, 0x00, /* LOGICAL_MAXIMUM (255) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x95, 0x04, /* REPORT_COUNT (2) */
0x81, 0x02, /* INPUT (Data,Var,Abs) */
0xc0, /* END_COLLECTION */
// /* 2 Hat Switches */
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x09, 0x39, /* USAGE (Hat switch) */
0x09, 0x39, /* USAGE (Hat switch) */
0x15, 0x01, /* LOGICAL_MINIMUM (1) */
0x25, 0x08, /* LOGICAL_MAXIMUM (8) */
0x95, 0x02, /* REPORT_COUNT (2) */
0x75, 0x04, /* REPORT_SIZE (4) */
0x81, 0x02, /* INPUT (Data,Var,Abs) */
0xc0, /* END_COLLECTION */

/* 47 */
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x02, // REPORT_ID (2)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x65, // LOGICAL_MAXIMUM (101)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0, // END_COLLECTION

/* 39*/
0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
0x09, 0x01, // USAGE (Consumer Control)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x03, // REPORT_ID (3)
0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
0x09, 0xe2, // USAGE (Mute)
0x09, 0xe9, // USAGE (VolumeUp)
0x09, 0xea, // USAGE (VolumeDown)
0x09, 0xb0, // USAGE (Play)
0x09, 0xb1, // USAGE (Pause)
0x09, 0xb7, // USAGE (Stop)
0x15, 0x01, // LOGICAL_MINIMUM (1)
0x25, 0x06, // LOGICAL_MAXIMUM (6)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x10, // REPORT_SIZE (16)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0xc0, // END_COLLECTION[/center][/center]
Ответить