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

 
 
> Как организовать эффективное взаимодействие с HID устройством ?
_3m
сообщение Jan 20 2009, 12:01
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Изучаю USB HID класс. Обмен информацией работает - посылаю и принимаю репорты через Interrupt transfer, работают SET_FEATURE и GET_FEATURE, научился писишным софтом перезапускать зависший usb порт и определять факт зависания. Однако в литературе я нигде не нашел рекомендаций по организации взаимодействия между прикладным софтом PC и девайсом. В литературе и демо-проектах рассматривается джойстики мышки и светодиоды (зажечь/погасить по команда PC). Нигде не рассматривается как строить взаимодействие со сложными устройствами генерирующие двунаправленные потоки данных близкие к предельным для HID устройств (например PC<->PIC18F2550_HID_class<->СС1100).
Мои эксперименты показывают что использование простейшего взаимодействия типа "запрос PC - ответ HID девайса" получится неэффективным. Несинхронизированный поточный обмен работает минимум в 2 раза быстрее, но требуется буферизация а в пике с рамой напряженка.
Также есть и более конкретные вопросы:
* имеет ли смысл использовать feature репорты
* нужно ли поддерживать запись репортов через control transfer, ведь это нужно только win98 не-SE. которая не поддерживает out interrupt transfer.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
galjoen
сообщение Feb 18 2009, 21:29
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(_3m @ Jan 20 2009, 15:01) *
* имеет ли смысл использовать feature репорты

Имеет. Особенно GET_FEATURE. Их ведь 255 штук м.б. Вот N этого репорта и будет запросом. Если вам этого хватит - ваш вопрос об эффективном взаимодействии решён.
У меня у некоторых HID-ов только FEATURE и есть. Ни InterruptIn ни, тем более, InterruptOut нет вообще.
Цитата(_3m @ Jan 20 2009, 15:01) *
* нужно ли поддерживать запись репортов через control transfer, ведь это нужно только win98 не-SE. которая не поддерживает out interrupt transfer.

Вы имеете ввиду InterruptOut? А они разве у вас есть? Зачем? Имхо у них нет никаких преимуществ перед SET_FEATURE.
Go to the top of the page
 
+Quote Post
_3m
сообщение Feb 24 2009, 19:44
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(galjoen @ Feb 19 2009, 00:29) *
Имеет. Особенно GET_FEATURE. Их ведь 255 штук м.б. Вот N этого репорта и будет запросом. Если вам этого хватит - ваш вопрос об эффективном взаимодействии решён.

Чтобы сделать 255 репортов нужно создать 255 дескрипторов репоров, это совершенно нереально. Если в дескрипторе 1 репорт то винда не дает работать с report id отличным от нуля, во всяком случае мне это не удалось.

Цитата
У меня у некоторых HID-ов только FEATURE и есть. Ни InterruptIn ни, тем более, InterruptOut нет вообще.

Так ведь interrupt in по спецификации обязателен для hid класса. Как же оно у вас работает то?

Цитата
Вы имеете ввиду InterruptOut? А они разве у вас есть? Зачем? Имхо у них нет никаких преимуществ перед SET_FEATURE.

C interrupt out передачей несколько проще работать в микроконтроллере.
Впрочем после прочтения информации о баге в драйверее hid win xp sp2-3 вопрос о работе через interrupt out отпал сам собой. В xp sp2-3 там баг, починен только в висте.

Сообщение отредактировал _3m - Feb 24 2009, 19:45
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:55
Рейтинг@Mail.ru


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