Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Куда же USB-хост шлет репорты?!
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Chestor
Добрый день...
Исследую эмулятор клавиатуры из примеров ATMEL для AT91SAM9G45 (работаю в IAR).

ПРИМЕР ATMEL: показывает клавиатуру с двумя эндпоинтами (кроме нулевой) IN и OUT.
IN посылает статусы с нажатыми клавишами, а OUT принимает состояние светодиодов и устанавливает их.
Для описания репортов обмена испрользуется один дескриптор-репорта.

Попробовал впихнуть дескрипторы от реальной клавиатуры для исследования, как оно устроено...
РЕАЛЬНАЯ КЛАВА: содержит одну конечную точку OUT, и шлет через нее статусы с нажатыми клавишами. Установка состояния светодиодов при этом осуществляется через 0-точку. Описание репортов находится в одном дескрипторе репорта.

ДЕСКРИПТОРЫ РЕАЛЬНОЙ КЛАВЫ НА ПРОЦЕ:
переношу их 1-в-1 в мой проц... "клавиатура" обнаруживается, шлет все эти дескрипторы (проверял снифером), даже правильно посылает статусы с нажатыми клавишами!! НО не принимает (почти) статусы светодиодов!...
Почему "почти"?... потому что принимает, но только те, которые после включения и определения устройстве в винде отсылаются на нулевую точку... дальнейшие поползновения с отправкой статусов светодиодов ни к чему не приводят... =(

НЕПОНЯТКИ: Думаю, хост шлет репорты не туда... =( Но не могу понять, откуда хост берет информацию о том, на какую конечную точку слать репорты???!!... Может, я где-то чего-то упустил при переносе дескрипторов?!...

ПРИМЕЧАНИЯ: при впихивании клавиатурных дескрипторов в проц я оставил дескриптор репорта тем, который был в процессоре (чтобы не переделывать обработку нажатых клавиш). при этом, конечно же, не забыв поменять соответствующее поле длины дескриптора репорта в HID-дескрипторе.
...для любителей отвечать "читай usb.org": читал, но не нашел. Если подскажете более точно, где натий, то спасибо.

Спасибо за ответы!
galjoen
Цитата(Chestor @ Aug 30 2011, 17:08) *
РЕАЛЬНАЯ КЛАВА: содержит одну конечную точку OUT, и шлет через нее статусы с нажатыми клавишами.

Реальная клава обязательно содержит конечную точку IN, и через InterruptIn шлёт клавиши, а вот OUT ни разу не видел. Краем уха слышал, что с InterruptOut в винде какая то проблема, но сам с ним дело не имел. Да и не представляю для чего это может понадобится - через 0-ю EP работать куда лучше.
Chestor
Цитата(galjoen @ Aug 30 2011, 19:05) *
...через 0-ю EP работать куда лучше.

Ок, Понял... но у меня проблема в том, что БЕЗ EndPoint2 мой макет не работет!!! Я бы и рад работать через нулевую конечную тоску, но как??!!
galjoen
Цитата(Chestor @ Aug 31 2011, 11:43) *
Я бы и рад работать через нулевую конечную тоску, но как??!!

Если InterruptOut EP не описывать, то через SET_REPORT в EP 0 от компа данные в HID пойдут. Причём, у какой то винды, в любом случае только через EP 0 данные идут (встречался), поэтому, даже если InterruptOut EP есть, то приём этих данных через EP 0 всё равно писать нужно (только разбор заголовка 8 байт добавляется, а сами данные те же), чтобы и так и сяк работало.
Лучше всего сниффером посмотреть какие пакеты от хоста в EP 0 идут - там всё понятно будет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.