Перейти к содержанию
    

Композитное HID-устройство

Еще раз всем доброго времени суток!

Не подскажет ли кто адекватную программу, дабы проверить форматы дескрипторов, получаемых хостом? Или, возможно, просто идею подаст, в направлении, где искать...

Суть проблемы:

Делаю композитное 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:

 

Забыл добавить: часть кода переделана из Атмеловского фреймворка, с исправлением замеченных мною косяков...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз всем доброго времени суток!

Делаю композитное HID-устройство. ...

1 интерфейс - стандартная клавиатура, все работает (2 EP)

2 интерфейс - трекбол, работает в режиме мыша, все работает (1 EP)

3 интерфейс (Generic) - клавиатура со специфичными сканкодами для программы (2 EP)

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

 

P.S. А зачем клавиатуре по две EP на интерфейс ? Никогда такого не видел. По одной EP Interrupt In на интерфейс и управление всей клавиатурой через Control EP0 ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока вообще уберите четвертый интерфейс и добейтесь нормальной работы первых трех.

Так у меня сейчас два последних убраны. Как раз и пытаюсь приживить третий... Ну, ради интереса разик попробовал запустить сразу 4-й, без третьего... :biggrin:

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

Давно, когда еще начинал делать год назад брал, смотрел. Но, в принципе, да, надо заново глянуть, мож свежим взглядом что увижу. Спасибо за идею.

К чему я веду: возьмите фабричную клавиатуру, заполучите ее дескрипторы, тем же BuSHound'ом,

Оп-па! Новое слово!! Это какой-то очередной сниффер USB?

и посмотрите, как они сделаны ...

Да прямо сейчас на ноуте и гляну, в файлик сгоню, а завтра на работе проанализирую...

P.S. А зачем клавиатуре по две EP на интерфейс ? Никогда такого не видел. По одной EP Interrupt In на интерфейс и управление всей клавиатурой через Control EP0 ...

Out для управления светодиодами (CapsLock, NumLock и т.д.)... Кстати, та клава, что я смотрел когда-то, тоже так была сделана, вроде... Хотя, могу уже и ошибаться... Да и среди примеров репорт-дескриптора (они меня в замешательство приводят, если честно) для клавы не видел ни одного с фичами в описании (я не путаю, что именно они нужны для прогона данных через EP0?). Реально, когда год назад начинал делать прогу, начитался по теме, а потом за год почти работы над другими изделиями все выветрилось, и сейчас смотрю на собственную программу как Чебурашка...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оп-па! Новое слово!! Это какой-то очередной сниффер USB?

 

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

BusHound - это такая программа - сниффер.

Interrupt Out для управления светодиодами ? А зачем ? В обычных клавиатурах это всегда делается через управляющие передачи по EP0 ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

BusHound - это такая программа - сниффер.

Скачал, попробую. Снуппи мне не понравился, глючноват... Сейчас пользуюсь USBlyzer-ом, вроде приятно, но вдруг эта лучше будет...

Interrupt Out для управления светодиодами ? А зачем ? В обычных клавиатурах это всегда делается через управляющие передачи по EP0 ...

Так получилось :biggrin: Работает, и ладно (когда все заработает, тогда и поправлю)

P.S. Вижу, Вы в USB не новичек, если несложно разрешите мои сомнения... Правильно ли я понимаю, что для такой клавы (3-й интерфейс) я могу заявиться в дескрипторе репорта USAGE как клавиатура, а USAGE_PAGE как Vendor Defined, чтоб винда не пыталась обрабатывать нажатия ее кнопок, а отдавала их на растерзание пользовательской программе.

Кстати, для 3-го интерфейса EP0 вероятно не покатит, там аж 11 байт управления светодиодами...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

BusHound - это такая программа - сниффер.

Посмотрел... действительно, непохожая на другие снифферы программа... Завтра на работе опробую в "боевых условиях". Хотя, если честно, еще не до конца ее понял.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понимаю, что для такой клавы (3-й интерфейс) я могу заявиться в дескрипторе репорта USAGE как клавиатура, а USAGE_PAGE как Vendor Defined, чтоб винда не пыталась обрабатывать нажатия ее кнопок, а отдавала их на растерзание пользовательской программе.

Не подскажу, т.к. я сам дескрипторы Report'ов не формировал, а использовал готовые ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вопрос вдогонку.

Как уважаемый stalko описывал hid-репорты для своих нескольких интерфейсов?. очень хочется глянуть...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вопрос вдогонку.

Как уважаемый stalko описывал hid-репорты для своих нескольких интерфейсов?. очень хочется глянуть...

Вам полностью содержание полей дескрипторов, или просто сам порядок дескрипторов интересен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...