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