Добрый день... Исследую эмулятор клавиатуры из примеров ATMEL для AT91SAM9G45 (работаю в IAR).
ПРИМЕР ATMEL: показывает клавиатуру с двумя эндпоинтами (кроме нулевой) IN и OUT. IN посылает статусы с нажатыми клавишами, а OUT принимает состояние светодиодов и устанавливает их. Для описания репортов обмена испрользуется один дескриптор-репорта.
Попробовал впихнуть дескрипторы от реальной клавиатуры для исследования, как оно устроено... РЕАЛЬНАЯ КЛАВА: содержит одну конечную точку OUT, и шлет через нее статусы с нажатыми клавишами. Установка состояния светодиодов при этом осуществляется через 0-точку. Описание репортов находится в одном дескрипторе репорта.
ДЕСКРИПТОРЫ РЕАЛЬНОЙ КЛАВЫ НА ПРОЦЕ: переношу их 1-в-1 в мой проц... "клавиатура" обнаруживается, шлет все эти дескрипторы (проверял снифером), даже правильно посылает статусы с нажатыми клавишами!! НО не принимает (почти) статусы светодиодов!... Почему "почти"?... потому что принимает, но только те, которые после включения и определения устройстве в винде отсылаются на нулевую точку... дальнейшие поползновения с отправкой статусов светодиодов ни к чему не приводят... =(
НЕПОНЯТКИ: Думаю, хост шлет репорты не туда... =( Но не могу понять, откуда хост берет информацию о том, на какую конечную точку слать репорты???!!... Может, я где-то чего-то упустил при переносе дескрипторов?!...
ПРИМЕЧАНИЯ: при впихивании клавиатурных дескрипторов в проц я оставил дескриптор репорта тем, который был в процессоре (чтобы не переделывать обработку нажатых клавиш). при этом, конечно же, не забыв поменять соответствующее поле длины дескриптора репорта в HID-дескрипторе. ...для любителей отвечать "читай usb.org": читал, но не нашел. Если подскажете более точно, где натий, то спасибо.
Спасибо за ответы!
|