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

 
 
> Linux: работа с USB HID устройством - чтение Input Report (Interrupr In EP)., Под Win всё работает, а в Linux надо настраивать? Или нужен HID драйве
galjoen
сообщение Apr 8 2008, 18:12
Сообщение #1


Знающий
****

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



Подключаю свой самодельный Full Speed HID к Linux. У него имеются 3 вида репортов SetFeature, GetFeature и Input. SetFeature и GetFeature через шлются контрольный канал (адрес EP = 0) и работают без проблем. Даже лучше чем под Win т.к. позволяют задавать таймаут, а под Win таймаут =5 секундам и изменить невозможно. Input Report шлётся от устройства в комп через EP, работающую в режиме Interrupt In с интервалом опроса 2 милисекунды (так у меня в дескрипторе EP). И с ним проблемма.
В Win всё корректно - после подключения моего устройства хост как и положено шлёт запросы 1 раз за 2 кадра (2 милисекунды). Причём даже если никто это устройство не использует. И буферизирует посланные мной Input репорты. Причём кол-во буферов можно задавать.
Linux по своей инициативе вообще не шлёт никаких запросов. Если подключиться к устройству, то можно слать запросы (ReadFile). Но ни о каких 2 милисекундах и речи нет. Выполняешь ReadFile - запрос посылается. И буферизации никакой нет. Из-за этого Input репорты теряются. Особенно почему-то при выводе на экран. Т.е. какое-то время не опрашивали Interrupt In EP (переключились на другую задачу) - буфер в устройстве переполняется - данные теряются.
Выходов из этой ситуации 2.
Первый (лучший): сказать Linux чтоб он опрашивал Interrupt In EP (как и написано в её дескрипторе) и буферизировал прочитанные данные (как Win). Но как это сделать я не знаю (невозможно?).
Второй (вынужденный): повесить на таймер программку, которая будет запускаться 1 раз в 2 милисекунды (реал тайм!). И будет читать Interrupt In EP (ReadFile) и буферизировать прочитанное. Как это сделать я тоже не знаю, но наверное смогу разобраться.

А может ещё какие способы имеются?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amw
сообщение Apr 22 2009, 21:04
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



linux-2.6.28.1/drivers/hid/Kconfig
Цитата
Say Y here if you want to support HID devices (from the USB
specification standpoint) that aren't strictly user interface
devices, like monitor controls and Uninterruptable Power Supplies.

This module supports these devices separately using a separate
event interface on /dev/hidraw.

There is also a /dev/hiddev configuration option in the USB HID
configuration menu. In comparison to hiddev, this device does not process
the hid events at all (no parsing, no lookups)
. This lets applications
to work on raw hid events when they want to, and avoid using transport-specific
userspace libhid/libusb libraries.

http://libusb.wiki.sourceforge.net/
http://libhid.alioth.debian.org/

Цитата(galjoen @ Apr 22 2009, 17:10) *
Как правильно работать с HID-ом под Linux?

Три варианта
1. Стандартное устройство - стандартный драйвер - стандартный интерфейс.
2. libusb
3. Свой драйвер.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 1 2009, 10:47
Сообщение #3


Знающий
****

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



Цитата(amw @ Apr 23 2009, 01:04) *
Три варианта
1. Стандартное устройство - стандартный драйвер - стандартный интерфейс.
2. libusb
3. Свой драйвер.

Почему вариантов всего 3? Теперь, после исправления ошибки в ядре, есть как минимум ещё один:
Нестандартное устройство (не клавиатура, мышь, джойстик). Для него Linux создаёт файл hidraw. Из это файла читаются HID репорты, посылаемые устройством через InterruptIn EP.
Найти своё устройство можно прочитав HID Usage (IOCTL к hidraw). Т.е. если у устройства все данные шлются ТОЛЬКО через InterruptIn (возможно InterruptOut - не проверял), то работать с данным НЕСТАНДАРТНЫМ устройством можно без libusb и без специального драйвера.
Другое дело, что почему-то нет возможности получать(передавать) Get(Set)Feature репорты ОДНОВРЕМЕННО с этим (без использования партизанских способов). Или м.б. такой способ есть, но я не знаю. Как появится время - ещё покопаю/отпишу.
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 16 2009, 13:14
Сообщение #4


Знающий
****

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



Вобщем-то под Linux мой HID работает на том-же уровне, что и под вин, но столкнулся с ещё одной проблеммой. Если к компу подключены 2 (или больше) моих девайса - не удаётся определить где чей hidraw. Почему-то сделали только чтение из hidraw VID и PID, а сериал нумбер не доступен. Можно конечно внести в HID Report Descriptor номер устройсва (в неявном виде, типа Physical Minimum/Maximum сделать номером), но это опять-таки партизанский способ. А м.б. в новой версии этих проблем уже не будет? Стоит просто подождать.
Попытаюсь разработчику написать, но мой английский таков, что скорее всего меня там не поймут.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Aug 19 2009, 11:54
Сообщение #5


Знающий
****

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



Выявил ещё один глюк в многострадальном hidraw. В ядрах 2.6.29 и 2.6.30. В ядре 2.6.26 его не было. Другие ядра не проверял. Причём глюк проявляется независимо от дистрибутива - проверяли сусе и дебиан. Глюк заключается в добавлении произвольного байта в начало HID репорта, передаваемого HID девайсом через Interrup In EP, при чтении его через hidraw. При этом остальные байты этого репорта сдвигаются. Последний байт при этом видимо пропадает, но не проверял. В любом случае использовать эти ядра невозможно.
Попытаюсь написать письмо разработчикам, но судя по предыдущему опыту ошибка была исправлена примерно через год...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- galjoen   Linux: работа с USB HID устройством - чтение Input Report (Interrupr In EP).   Apr 8 2008, 18:12
- - amw   Цитата(galjoen @ Apr 8 2008, 21:12) Первы...   Apr 9 2008, 08:13
|- - galjoen   Цитата(amw @ Apr 9 2008, 12:13) Вероятно ...   Apr 11 2008, 15:37
|- - XVR   Цитата(galjoen @ Apr 11 2008, 19:37) 2 XV...   Apr 11 2008, 17:18
|- - amw   Цитата(galjoen @ Apr 11 2008, 18:37) Да, ...   Apr 11 2008, 19:26
|- - galjoen   Цитата(amw @ Apr 11 2008, 23:26) Это плох...   Apr 12 2008, 13:46
|- - amw   Цитата(galjoen @ Apr 12 2008, 16:46) А Fe...   Apr 12 2008, 15:07
||- - galjoen   Цитата(amw @ Apr 12 2008, 19:07) А понял,...   Apr 14 2008, 20:40
||- - amw   Цитата(galjoen @ Apr 14 2008, 23:40) Кодd...   Apr 15 2008, 08:48
||- - galjoen   Цитата(amw @ Apr 15 2008, 12:48) Устройст...   Apr 15 2008, 09:56
||- - amw   Цитата(galjoen @ Apr 15 2008, 12:56) Разб...   Apr 15 2008, 10:14
||- - galjoen   Цитата(amw @ Apr 15 2008, 12:48) Вот снял...   Apr 17 2008, 10:22
||- - amw   Цитата(galjoen @ Apr 17 2008, 13:22) Это ...   Apr 17 2008, 16:48
||- - galjoen   Цитата(amw @ Apr 17 2008, 20:48) Мммм...э...   Apr 17 2008, 17:55
||- - amw   Цитата(galjoen @ Apr 17 2008, 20:55) Може...   Apr 18 2008, 07:40
||- - galjoen   Разработчики модуля USB для Linux прислали ответ. ...   Apr 22 2008, 14:46
||- - amw   Цитата(galjoen @ Apr 22 2008, 17:46) Разр...   Apr 22 2008, 15:17
||- - galjoen   Цитата(amw @ Apr 22 2008, 19:17) Теперь В...   Apr 25 2008, 15:42
||- - amw   Цитата(galjoen @ Apr 25 2008, 18:42) Да к...   Apr 25 2008, 18:56
||- - galjoen   Цитата(amw @ Apr 25 2008, 22:56) Ну и lin...   May 6 2008, 09:28
||- - amw   Цитата(galjoen @ May 6 2008, 12:28) Спаси...   May 6 2008, 12:09
||- - galjoen   Цитата(amw @ May 6 2008, 16:09) Гляньте е...   May 7 2008, 15:45
||- - amw   Цитата(galjoen @ May 7 2008, 18:45) Прове...   May 8 2008, 09:45
||- - galjoen   После годового перерыва вернулся к этой теме. Наде...   Apr 22 2009, 14:10
|- - path_finder   Цитата(galjoen @ Apr 12 2008, 15:46) Насч...   Apr 15 2008, 13:35
|- - galjoen   Цитата(path_finder @ Apr 15 2008, 17:35) ...   Apr 15 2008, 13:53
- - XVR   Цитата(galjoen @ Apr 8 2008, 22:12) Подкл...   Apr 9 2008, 08:14


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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 16:18
Рейтинг@Mail.ru


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