реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Report ID USB-HID, LPC2148 реализация HID с несколькими REPORT ID
Golikov A.
сообщение Feb 3 2010, 22:08
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет! Не уверен что суда, если что простите

Есть LPC2148, на нем HID устройство, оно обменивается с компом все ок.

вопросы возникаю с Report ID

когда идут запросы через контрольную конечную точку, тут все понятно Report ID находится в сетап покете (как кстати реагировать на неверное значение?).
Но когда обмен идет через Интерапт конечную точку, где должно быть поле Report ID? Со стороны конпа обмен через интерапт конечные точки идет через WriteFile, ReadFile. И если еще есть шанс во WriteFile первым байтом передать репорт ID, то как быть с ReadFile? из LPC2148 я посылаю 8 байт, а ReadFile читает 9, первый с 0 значением - репорт ID. Как это происходит? Это в винде что-то подправлено и ReadFile другой для хендлов на HID, или LPC добавляет байт? С WriteFile таже фигня,пишем 7, а в контролер на конечную точку падает 6, первый отсекается...

Резюме вопросов:
1. Как реагировать на неверное значение Report ID в сетап покете? Stall или Ack но не сохранять данные?
2. Откуда берет дополнительный байт с Report ID функция ReadFile? И куда девается в контролере после WriteFile?
3. Как слать и получать Report ID через интерапт конечные точки?
4. Вопрос про толкование стандарта и устройтсво мираsmile.gif Поле Report ID имеет смысл только если оно не нулевое? Может ли винда отсекать идентификатор понимая что он один и нулевой, а вернее не требовать его в пакете данных, и добавлять его от себя? Описание хид репорта используется в работе драйвера или нет?

Просто очень хочется понять магию... Спасибо!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 4 2010, 13:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет! После серии эксперементов имею некторые ответы, думаю кому-то будут полезны

В целом ХИД драйвер виндоус анализирует вид отчета, то есть если в нем не указан таг Репорт ИД, то виндоус делает его нулевым и не использует. Он не ждет его на интерапт конечной точке, и не посылает его на интерапт конечную точку. WriteFile, ReadFile сам регулирует этот момент, WriteFile требует нулевое значение, а ReadFile возвращает нулевое значение. В устройство передается только данные отчета без первого символа РепортИД, и принимаются тоже только данные отчета.

Если же добавить таг репорта ИД в описание хид репорта, тогда ReadFile требует данных на 1 байт больше и нулевой должен быть идентификато отчета, если слать из устройтсва сообщения с неверным нулевым байтом то ReadFile не возвращается со считанными данными, WriteFile требует верный РепортИд на входе, и этот байт приходит в устройство.

То есть виндоус на основе данных об описании репорта сам регулирует все дела с РепортИд, не дает передавать неверные, и игнорирует прием неверных.
Что делать в устройстве с неправильным РепортИД непонятно, так как виндоус не дает посылать те идентификаторы что неверны, если же ответить Сталл на верный ИД виндоус вернет ошибку устройтсво не работает. Попытка из винды слать неверные репорт ИД данные до устрйотсва не доходят, функция возвращает ошибку контрольной суммы, думаю имелось ввиду ошибка данных.

Резюме
1. непонятно, так как виндоус не допускает посылки неверных репорт ИД, логично наверное посылать СТАЛЛ, на случай стороних хост устройств.
2. Они добавляются драйвером и отрезаются драйвером хид. Если нет тага репорт ИД в описании хид репорта, то их не будет в отчетах, если будут то их надо дабавлять, и устройство буддет их получать
3. Если нет репорт ИД то просто слать данные, если есть то первым символом идет РепортИД, иначе передача не пройдет
4. Да, да, да по данным численного эксперементаsmile.gif)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01342 секунд с 7
ELECTRONIX ©2004-2016