|
Покритикуйте плиз HID report descriptor |
|
|
|
Nov 14 2006, 18:48
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Всем привет! Имею намерение сотворить джойстик на максимальное количество осей и не менее максимальное количество кнопок. После долгих ломаний мозга выдумался вот такой репорт-дескриптор. Код char ReportDescriptor[70] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x09, 0x04, // USAGE (Joystick) 0xa1, 0x01, // COLLECTION (Application) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x01, // USAGE (Pointer) 0xa1, 0x00, // COLLECTION (Physical) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) 0x09, 0x32, // USAGE (Z) 0x09, 0x33, // USAGE (Rx) 0x09, 0x34, // USAGE (Ry) 0x09, 0x35, // USAGE (Rz) 0x09, 0x36, // USAGE (Slider) 0x09, 0x37, // USAGE (Dial) 0x15, 0x81, // LOGICAL_MINIMUM (-127) 0x25, 0x7f, // LOGICAL_MAXIMUM (127) 0x75, 0x08, // REPORT_SIZE (8) 0x95, 0x08, // REPORT_COUNT (8) 0x81, 0x02, // INPUT (Data,Var,Abs) 0xc0, // END_COLLECTION 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x3f, // USAGE_MAXIMUM (Button 63) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x3f, // REPORT_COUNT (63) 0x55, 0x00, // UNIT_EXPONENT (0) 0x65, 0x00, // UNIT (None) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x01, // INPUT (Cnst,Ary,Abs) 0xc0 // END_COLLECTION }; Покритикуйте, пожалуйста, что в нем не так. В целом устройство вроде как работает. В дальнейшем планирую открыть еще один ендпоинт для передачи данных от хоста к девайсу. Да, а вот еще вопрос на засыпку. А можно ли как-нибудь организовать джойстик с бОльшим количеством кнопок, чем 63? USAGE_MAXIMUM(Button63) и ... все... Как люди по 100 с лишним кнопок делают? Спасибо!
|
|
|
|
|
 |
Ответов
(1 - 8)
|
Nov 16 2006, 11:01
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Цитата(Sirotinin @ Nov 16 2006, 05:10)  Я может чего недопонимаю, сам столько кнопок на джойстики не делал, но кто мешает поставить USAGE_MAXIMUM в 0x65 и выше... ведь целый байт дан. Допустим такой дескриптор для клавиатуры имеет в этом байте 101 клавишу и выше... Спасибо за ответ! Дело в том, что я этот дескриптор ваял при помощи DT, а там максимум указан в 63 кнопки. Косность мышления не позволила попробовать вживую  Спасибо за идею!!
|
|
|
|
|
Nov 20 2006, 01:22
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Цитата(Kitsok @ Nov 16 2006, 14:01)  Цитата(Sirotinin @ Nov 16 2006, 05:10)  Я может чего недопонимаю, сам столько кнопок на джойстики не делал, но кто мешает поставить USAGE_MAXIMUM в 0x65 и выше... ведь целый байт дан. Допустим такой дескриптор для клавиатуры имеет в этом байте 101 клавишу и выше...
Спасибо за ответ! Дело в том, что я этот дескриптор ваял при помощи DT, а там максимум указан в 63 кнопки. Косность мышления не позволила попробовать вживую  Спасибо за идею!! А вот не работает. Т.е. устройство аттачится и определяется, но виндовый драйвер не может разобрать, че там приходит. Кроме этого, в моем W2K при отключении происходит радостный BSOD  Так что, похоже винда больше 63 кнопок в одном репорте все-таки не может обработать.
|
|
|
|
|
Nov 21 2006, 01:18
|
Участник

Группа: Новичок
Сообщений: 27
Регистрация: 20-01-06
Пользователь №: 13 391

|
а HID Descriptor Tool, Вам не пригодиться? http://www.usb.org/developers/hidpage/dt2_4.zip
Сообщение отредактировал AndrV - Nov 21 2006, 01:20
|
|
|
|
|
Nov 21 2006, 09:55
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Цитата(AndrV @ Nov 21 2006, 01:18)  а HID Descriptor Tool, Вам не пригодиться? Спасибо за ссылку, но им я и делал свой репорт дескриптор  И именно в нем нету больше, чем Button63 Попытался искать что-нибудь схожее по функционалу, но не нашел.
Сообщение отредактировал Kitsok - Nov 21 2006, 09:55
|
|
|
|
|
Nov 23 2006, 10:00
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Не знаю, может кому пригодится Код const portCHAR pxReportDescriptor[] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x09, 0x04, // USAGE (Joystick) 0xa1, 0x01, // COLLECTION (Application) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x01, // USAGE (Pointer) 0xa1, 0x00, // COLLECTION (Physical) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) 0x09, 0x32, // USAGE (Z) 0x09, 0x33, // USAGE (Rx) 0x09, 0x34, // USAGE (Ry) 0x09, 0x35, // USAGE (Rz) 0x09, 0x36, // USAGE (Slider) 0x09, 0x37, // USAGE (Dial) 0x15, 0x81, // LOGICAL_MINIMUM (-127) 0x25, 0x7f, // LOGICAL_MAXIMUM (127) 0x75, 0x08, // REPORT_SIZE (8) 0x95, 0x08, // REPORT_COUNT (8) 0x81, 0x02, // INPUT (Data,Var,Abs) 0xc0, // END_COLLECTION 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x3F, // USAGE_MAXIMUM (Button 63) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x3F, // REPORT_COUNT (63) 0x55, 0x00, // UNIT_EXPONENT (0) 0x65, 0x00, // UNIT (None) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x40, // USAGE_MINIMUM (Button 64) 0x29, 0x7E, // USAGE_MAXIMUM (Button 127) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x3F, // REPORT_COUNT (63) 0x55, 0x00, // UNIT_EXPONENT (0) 0x65, 0x00, // UNIT (None) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x02, // REPORT_COUNT(2) 0x75, 0x01, // REPORT_SIZE(1) 0x81, 0x01, // INPUT (Cnst,Arr,Abs) 0xc0 // END_COLLECTION }; Итого - 126 кнопок. При попытке сделать в одной хм... пачке больше 63 кнопок, происходит BSOD.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|