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

 
 
> USB HID на AVR, Создание HID Report Descriptors - шаманство от Microsoft?
osnwt
сообщение Feb 11 2006, 17:41
Сообщение #1


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

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Привет всем!

Возникло желание сделать HID-совместимое устройство на AVR с программно реализованным USB стеком. Тем более, что появилась отличная открытая и бесплатная реализация стека, написанная на C (кроме критического по времени куска - тот на асме) и документированная на предмет возможностей и ограничений. Буквально 5 дней назад вышла версия с поддержкой HID девайсов, сэкономив мне кучу времени.

В общем, примеры все работают. И свое устройство, в целом, тоже работает. Проблема лишь с написанием HID Report Descriptor для этой штуки. Это просто какое-то шаманство. Скажем, есть работающий report. В начале стоит левый LOGICAL MINIMUM (0), который не нужен, ибо перед первым же INPUT определены свои minimum и maximum. Стоит его убрать - всё, винды видят устройство с ошибкой.

Пример два: стоит в работающем дескрипторе REPORT ID (1). Всё работает. Убираю REPORT ID, уменьшаю на 1 количество байтов в возвращаемых данных (поскольку первый байт исчез), правлю длину дескриптора (так как два байта на REPORT ID тоже ушло). Компилирую, прошиваю, включаю - не работает.

Перерыл весь инет. Все ссылаются на HID Descriptor Tools с usb.org. Интерфейс там еще тот, но ладно. Проверка ошибок там бестолковая, конечно. Винды более критичны к этому. Но другого-то инструмента нет. Перечитал все доки, нигде нет конкретных указаний. В материалах с usb.org сплошные should или may.

Похоже, все изготовители софтверных USB-решений на Atmel (на другие решения я просто не смотрел) страдают точно также с этими дескрипторами, так как сплошь и рядом встречаются в коде dummy logical minimum и т.п. навороты.

Собственно, вопросы к уважаемой публике:

1) можно ли где-то посмотреть диагностику виндовского HID parser'а: что конкретно его не устраивает в предлагаемых ему дескрипторах?

2) есть ли какие-либо решения для создания дескрипторов наподобие HID Descriptor Tools, но дающие более-менее работоспособные под Windows варианты?

Не верится, что проблема кроется где-то в софтверной реализации. Ибо, сначала не мог поднять количество байтов выше 2-х в interrupt transfer. Думал, что бага в библиотеке. Но потом из рабочего кода взял другой дескриптор с 7-ю байтами - и тоже всё работает до первой правки.

В общем, мистика! Help! help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
osnwt
сообщение Feb 11 2006, 18:30
Сообщение #2


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

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Чтобы говорить конкретнее, вот один из примеров. Этот дескриптор работает:

Код
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    (57)  /* total length of report descriptor */

#define USB_HID_REPORT_SIZE     7

static uchar    reportBuffer[USB_HID_REPORT_SIZE];  /* buffer for HID reports */

const char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] PROGMEM =
{
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x15, 0x00,                    // LOGICAL_MINIMUM (0)
    0x09, 0x04,                    // USAGE (Joystick)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x85, 0x01,                    //   REPORT_ID (1)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //     REPORT_SIZE (8)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0x05, 0x02,                    //     USAGE_PAGE (Simulation Controls)
    0x09, 0xba,                    //     USAGE (Rudder)
    0x09, 0xbb,                    //     USAGE (Throttle)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //     END_COLLECTION
    0x16, 0x01, 0xfe,              //   LOGICAL_MINIMUM (-511)            <------------
    0x05, 0x01,                    //   USAGE_PAGE (Generic Desktop)
    0x09, 0x36,                    //   USAGE (Slider)
    0x09, 0x37,                    //   USAGE (Dial)
    0x15, 0x81,                    //   LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //   LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x02,                    //   REPORT_COUNT (2)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0xc0                           // END_COLLECTION
};


Достаточно убрать ненужный совершенно
Код
     0x16, 0x01, 0xfe,              //   LOGICAL_MINIMUM (-511)            <------------


и соответственно подправить длину дескриптора с
Код
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    (57)  /* total length of report descriptor */

на
Код
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    (54)  /* total length of report descriptor */


и всё. blink.gif

Может, кто видит в этом криминал, типа там, выравнивание на границу слова или т.п.? Если да, то какой именно? У меня уже идей нет, двое суток непрерывно долбаюсь с таким моментом, которого вообще, по идее, и быть не должно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- osnwt   USB HID на AVR   Feb 11 2006, 17:41
- - osnwt   Цитата(osnwt @ Feb 11 2006, 19:41) Не вер...   Feb 12 2006, 16:18
- - GDI   А можно ссылочку на эту библиотеку?   Feb 14 2006, 10:25
- - osnwt   Я всё ждал, когда кто-нибудь спросит Можно, кон...   Feb 14 2006, 11:22
- - GDI   Спасибо.   Feb 14 2006, 11:30
- - unichorn   Да вот здесь лежит интересная книга "Интерфей...   Feb 15 2006, 08:16
- - osnwt   Хорошая книжка, спасибо. Вчера была пара часов вр...   Feb 15 2006, 10:21
- - grave   Кто-то уже реализовал USB HID Keypad на меге? Было...   Feb 23 2006, 09:10
|- - osnwt   Цитата(grave @ Feb 23 2006, 11:10) Кто-то...   Feb 24 2006, 07:27
- - d71   ! а как я раньше туму не увидел, именно интере...   Feb 27 2006, 05:10
|- - lazycamel   Цитата(d71 @ Feb 27 2006, 09:10) ! а ...   Feb 27 2006, 05:52
|- - osnwt   Цитата(d71 @ Feb 27 2006, 07:10) именно и...   Feb 27 2006, 15:11
- - d71   насколько я знаю 4 оси это только плоскости, навер...   Feb 27 2006, 07:08
- - Roy   Цитата(unichorn @ Feb 15 2006, 11:16) Да ...   Feb 28 2006, 09:48
|- - osnwt   Обращаю внимание на то, что в проектах с указанным...   Feb 28 2006, 10:02
- - Roy   Все равно не нашел. Как хоть книжка называется - п...   Feb 28 2006, 10:50
|- - osnwt   Цитата(Roy @ Feb 28 2006, 12:50) Все равн...   Feb 28 2006, 11:04
- - lazycamel   Вперся в непонятный глюк. Сделал фьючерепорты, сд...   Mar 6 2006, 22:09
- - osnwt   Цитата(lazycamel @ Mar 7 2006, 00:09) Впе...   Mar 7 2006, 12:15
- - lazycamel   Цитата(osnwt @ Mar 7 2006, 16:15) Цитата(...   Mar 7 2006, 21:35
- - osnwt   Цитата(lazycamel @ Mar 7 2006, 23:35) Сло...   Mar 7 2006, 21:45


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

 


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


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