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

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

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

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

 

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

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

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

 

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

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

 

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

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

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

 

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

 

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

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

 

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

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


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

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

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

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


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

...через 0-ю EP работать куда лучше.

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

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


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

Я бы и рад работать через нулевую конечную тоску, но как??!!

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

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

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


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

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

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

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

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

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

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

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

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

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