реклама на сайте
подробности

 
 
> Покритикуйте плиз HID report descriptor
Kitsok
сообщение Nov 14 2006, 18:48
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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 с лишним кнопок делают?

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
Sirotinin
сообщение Nov 16 2006, 02:10
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 21-11-04
Пользователь №: 1 189



Я может чего недопонимаю, сам столько кнопок на джойстики не делал, но кто мешает поставить USAGE_MAXIMUM в 0x65 и выше... ведь целый байт дан. Допустим такой дескриптор для клавиатуры имеет в этом байте 101 клавишу и выше...


--------------------
user posted image
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 16 2006, 11:01
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Sirotinin @ Nov 16 2006, 05:10) *
Я может чего недопонимаю, сам столько кнопок на джойстики не делал, но кто мешает поставить USAGE_MAXIMUM в 0x65 и выше... ведь целый байт дан. Допустим такой дескриптор для клавиатуры имеет в этом байте 101 клавишу и выше...


Спасибо за ответ!

Дело в том, что я этот дескриптор ваял при помощи DT, а там максимум указан в 63 кнопки. Косность мышления не позволила попробовать вживую wink.gif Спасибо за идею!!
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 20 2006, 01:22
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Kitsok @ Nov 16 2006, 14:01) *
Цитата(Sirotinin @ Nov 16 2006, 05:10) *

Я может чего недопонимаю, сам столько кнопок на джойстики не делал, но кто мешает поставить USAGE_MAXIMUM в 0x65 и выше... ведь целый байт дан. Допустим такой дескриптор для клавиатуры имеет в этом байте 101 клавишу и выше...


Спасибо за ответ!

Дело в том, что я этот дескриптор ваял при помощи DT, а там максимум указан в 63 кнопки. Косность мышления не позволила попробовать вживую wink.gif Спасибо за идею!!


А вот не работает.

Т.е. устройство аттачится и определяется, но виндовый драйвер не может разобрать, че там приходит.
Кроме этого, в моем W2K при отключении происходит радостный BSOD smile.gif Так что, похоже винда больше 63 кнопок в одном репорте все-таки не может обработать.
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Nov 20 2006, 07:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



http://www.mindaugas.com/projects/MJoy/
посмотрите здесь

http://www.mindaugas.com/projects/MJoy/
посмотрите здесь


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 20 2006, 10:56
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Pyku_He_oTTyda @ Nov 20 2006, 07:37) *
http://www.mindaugas.com/projects/MJoy/
посмотрите здесь

http://www.mindaugas.com/projects/MJoy/
посмотрите здесь


wink.gif Смотрел wink.gif
Нужный мне репорт-дескриптор находится в MJoy-16 C1, а исходников сего чуда нету wink.gif
Т.е. в прошивке его я, конечно, подклядывал, но там три разных репорта с разными ID. Плюс у Миндога ограничение на макс. 8 байт в пакете, а у меня - 64. Но, видно, не получится в одном пакете больше 63 кнопок передать.
Go to the top of the page
 
+Quote Post
AndrV
сообщение Nov 21 2006, 01:18
Сообщение #7


Участник
*

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



а HID Descriptor Tool, Вам не пригодиться?

http://www.usb.org/developers/hidpage/dt2_4.zip

Сообщение отредактировал AndrV - Nov 21 2006, 01:20
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 21 2006, 09:55
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(AndrV @ Nov 21 2006, 01:18) *
а HID Descriptor Tool, Вам не пригодиться?


Спасибо за ссылку, но им я и делал свой репорт дескриптор wink.gif И именно в нем нету больше, чем Button63 smile.gif
Попытался искать что-нибудь схожее по функционалу, но не нашел.

Сообщение отредактировал Kitsok - Nov 21 2006, 09:55
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Nov 23 2006, 10:00
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Не знаю, может кому пригодится wink.gif
Код
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.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016