Jump to content

    
Sign in to follow this  
chechestor

Куда же USB-хост шлет репорты?!

Recommended Posts

Добрый день...

Исследую эмулятор клавиатуры из примеров ATMEL для AT91SAM9G45 (работаю в IAR).

 

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

IN посылает статусы с нажатыми клавишами, а OUT принимает состояние светодиодов и устанавливает их.

Для описания репортов обмена испрользуется один дескриптор-репорта.

 

Попробовал впихнуть дескрипторы от реальной клавиатуры для исследования, как оно устроено...

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

 

ДЕСКРИПТОРЫ РЕАЛЬНОЙ КЛАВЫ НА ПРОЦЕ:

переношу их 1-в-1 в мой проц... "клавиатура" обнаруживается, шлет все эти дескрипторы (проверял снифером), даже правильно посылает статусы с нажатыми клавишами!! НО не принимает (почти) статусы светодиодов!...

Почему "почти"?... потому что принимает, но только те, которые после включения и определения устройстве в винде отсылаются на нулевую точку... дальнейшие поползновения с отправкой статусов светодиодов ни к чему не приводят... =(

 

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

 

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

...для любителей отвечать "читай usb.org": читал, но не нашел. Если подскажете более точно, где натий, то спасибо.

 

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

Share this post


Link to post
Share on other sites
РЕАЛЬНАЯ КЛАВА: содержит одну конечную точку OUT, и шлет через нее статусы с нажатыми клавишами.

Реальная клава обязательно содержит конечную точку IN, и через InterruptIn шлёт клавиши, а вот OUT ни разу не видел. Краем уха слышал, что с InterruptOut в винде какая то проблема, но сам с ним дело не имел. Да и не представляю для чего это может понадобится - через 0-ю EP работать куда лучше.

Share this post


Link to post
Share on other sites
...через 0-ю EP работать куда лучше.

Ок, Понял... но у меня проблема в том, что БЕЗ EndPoint2 мой макет не работет!!! Я бы и рад работать через нулевую конечную тоску, но как??!!

Share this post


Link to post
Share on other sites
Я бы и рад работать через нулевую конечную тоску, но как??!!

Если InterruptOut EP не описывать, то через SET_REPORT в EP 0 от компа данные в HID пойдут. Причём, у какой то винды, в любом случае только через EP 0 данные идут (встречался), поэтому, даже если InterruptOut EP есть, то приём этих данных через EP 0 всё равно писать нужно (только разбор заголовка 8 байт добавляется, а сами данные те же), чтобы и так и сяк работало.

Лучше всего сниффером посмотреть какие пакеты от хоста в EP 0 идут - там всё понятно будет.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this