Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Композитное HID-устройство
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
stalko
Еще раз всем доброго времени суток!
Не подскажет ли кто адекватную программу, дабы проверить форматы дескрипторов, получаемых хостом? Или, возможно, просто идею подаст, в направлении, где искать...
Суть проблемы:
Делаю композитное HID-устройство. Процессор Xmega128A3U. Начинал делать еще с год назад, но начальник тогда работу приостановил, вот дошло время продолжить...
1 интерфейс - стандартная клавиатура, все работает (2 EP)
2 интерфейс - трекбол, работает в режиме мыша, все работает (1 EP)
3 интерфейс (Generic) - клавиатура со специфичными сканкодами для программы (2 EP)
4 интерфейс (Generic) - набор энкодеров (1EP)
Первые два интерфейса запустил, все работает. Включаю третий - все три при энумерации встают с восклицательными знаками. Включаю четвертый (пропустив третий) - два первых работают, но интерфейс стоит с восклицательным знаком. В последнем случае подозреваю, что проблема в дескрипторе репорта (если неправ, поправьте). В первом даже не знаю, на что грешить. На что вообще такое поведение указывает обычно? Я USB раньше не делал, если честно, а тут сразу композит.
Проверял с помощью USBlyzer (в дескрипторе конфигурации говорю, что интерфейсов два, но спихиваю все 4 набора дескрипторов). Вроде, все дескрипторы в порядке, передаются нормально...
P.S. Есть еще "забавная" фишка: все интерфейсы нормально при энумерации отображают имя забитое в строковом дескрипторе, а вот 2-й упорно хочет на это плевать, хотя код выбора строки единый, по switch-у, номер дескриптора правильный, строка сама есть, все проверил...
P.P.S. Понимаю, что многого хочу... но вдруг... laughing.gif

Забыл добавить: часть кода переделана из Атмеловского фреймворка, с исправлением замеченных мною косяков...
kovigor
Цитата(stalko @ Nov 26 2012, 13:42) *
Еще раз всем доброго времени суток!
Делаю композитное HID-устройство. ...
1 интерфейс - стандартная клавиатура, все работает (2 EP)
2 интерфейс - трекбол, работает в режиме мыша, все работает (1 EP)
3 интерфейс (Generic) - клавиатура со специфичными сканкодами для программы (2 EP)

Пока вообще уберите четвертый интерфейс и добейтесь нормальной работы первых трех. Замечу, что любая USB - клавиатура - это всегда устройство с двумя интерфейсами (других я пока не встречал). Первый интерфейс - сама клавиатура (т.е., основной набор клавиш), а второй - мультимедийные клавиши (неважно, сколько их - одна кнопка "Sleep" или десяток мультимедийных кнопок). К чему я веду: возьмите фабричную клавиатуру, заполучите ее дескрипторы, тем же BuSHound'ом, и посмотрите, как они сделаны ...

P.S. А зачем клавиатуре по две EP на интерфейс ? Никогда такого не видел. По одной EP Interrupt In на интерфейс и управление всей клавиатурой через Control EP0 ...
stalko
Цитата(kovigor @ Nov 26 2012, 19:33) *
Пока вообще уберите четвертый интерфейс и добейтесь нормальной работы первых трех.

Так у меня сейчас два последних убраны. Как раз и пытаюсь приживить третий... Ну, ради интереса разик попробовал запустить сразу 4-й, без третьего... biggrin.gif
Цитата(kovigor @ Nov 26 2012, 19:33) *
Замечу, что любая USB - клавиатура - это всегда устройство с двумя интерфейсами (других я пока не встречал). Первый интерфейс - сама клавиатура (т.е., основной набор клавиш), а второй - мультимедийные клавиши (неважно, сколько их - одна кнопка "Sleep" или десяток мультимедийных кнопок).

Давно, когда еще начинал делать год назад брал, смотрел. Но, в принципе, да, надо заново глянуть, мож свежим взглядом что увижу. Спасибо за идею.
Цитата(kovigor @ Nov 26 2012, 19:33) *
К чему я веду: возьмите фабричную клавиатуру, заполучите ее дескрипторы, тем же BuSHound'ом,

Оп-па! Новое слово!! Это какой-то очередной сниффер USB?
Цитата(kovigor @ Nov 26 2012, 19:33) *
и посмотрите, как они сделаны ...

Да прямо сейчас на ноуте и гляну, в файлик сгоню, а завтра на работе проанализирую...
Цитата(kovigor @ Nov 26 2012, 19:33) *
P.S. А зачем клавиатуре по две EP на интерфейс ? Никогда такого не видел. По одной EP Interrupt In на интерфейс и управление всей клавиатурой через Control EP0 ...

Out для управления светодиодами (CapsLock, NumLock и т.д.)... Кстати, та клава, что я смотрел когда-то, тоже так была сделана, вроде... Хотя, могу уже и ошибаться... Да и среди примеров репорт-дескриптора (они меня в замешательство приводят, если честно) для клавы не видел ни одного с фичами в описании (я не путаю, что именно они нужны для прогона данных через EP0?). Реально, когда год назад начинал делать прогу, начитался по теме, а потом за год почти работы над другими изделиями все выветрилось, и сейчас смотрю на собственную программу как Чебурашка...
kovigor
Цитата(stalko @ Nov 26 2012, 21:13) *
Оп-па! Новое слово!! Это какой-то очередной сниффер USB?

Out для управления светодиодами (CapsLock, NumLock и т.д.)...

BusHound - это такая программа - сниффер.
Interrupt Out для управления светодиодами ? А зачем ? В обычных клавиатурах это всегда делается через управляющие передачи по EP0 ...
stalko
Цитата(kovigor @ Nov 26 2012, 22:56) *
BusHound - это такая программа - сниффер.

Скачал, попробую. Снуппи мне не понравился, глючноват... Сейчас пользуюсь USBlyzer-ом, вроде приятно, но вдруг эта лучше будет...
Цитата(kovigor @ Nov 26 2012, 22:56) *
Interrupt Out для управления светодиодами ? А зачем ? В обычных клавиатурах это всегда делается через управляющие передачи по EP0 ...

Так получилось biggrin.gif Работает, и ладно (когда все заработает, тогда и поправлю)
P.S. Вижу, Вы в USB не новичек, если несложно разрешите мои сомнения... Правильно ли я понимаю, что для такой клавы (3-й интерфейс) я могу заявиться в дескрипторе репорта USAGE как клавиатура, а USAGE_PAGE как Vendor Defined, чтоб винда не пыталась обрабатывать нажатия ее кнопок, а отдавала их на растерзание пользовательской программе.
Кстати, для 3-го интерфейса EP0 вероятно не покатит, там аж 11 байт управления светодиодами...
stalko
Цитата(kovigor @ Nov 26 2012, 22:56) *
BusHound - это такая программа - сниффер.

Посмотрел... действительно, непохожая на другие снифферы программа... Завтра на работе опробую в "боевых условиях". Хотя, если честно, еще не до конца ее понял.
kovigor
Цитата(stalko @ Nov 26 2012, 22:22) *
Правильно ли я понимаю, что для такой клавы (3-й интерфейс) я могу заявиться в дескрипторе репорта USAGE как клавиатура, а USAGE_PAGE как Vendor Defined, чтоб винда не пыталась обрабатывать нажатия ее кнопок, а отдавала их на растерзание пользовательской программе.

Не подскажу, т.к. я сам дескрипторы Report'ов не формировал, а использовал готовые ...
Маруся
вопрос вдогонку.
Как уважаемый stalko описывал hid-репорты для своих нескольких интерфейсов?. очень хочется глянуть...
stalko
Цитата(Маруся @ Mar 1 2013, 14:02) *
вопрос вдогонку.
Как уважаемый stalko описывал hid-репорты для своих нескольких интерфейсов?. очень хочется глянуть...

Вам полностью содержание полей дескрипторов, или просто сам порядок дескрипторов интересен?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.