Как обрабатываются устройства USB-HID, у которых нет исходящих конечных точек? - PullRequest
0 голосов
/ 15 мая 2019

Я работал над подключаемым модулем USB-HID Java для Android, который должен взаимодействовать с несколькими устройствами, и я в основном добился успеха, используя метод bulkTransfer ().

Вплоть до тех пор, пока я не встретил аппаратное устройство, у которого не было исходящих конечных точек. У этого конкретного было 2 интерфейса и 1 конечная точка на каждом. Оба были входящими, поэтому было невозможно отправить ему команды с помощью bulkTransfer ().

Мои вопросы:

1) Можно ли отправлять те же команды на устройство, используя вместо этого метод controlTransfer ()?

2) Могу ли я использовать тот же байтовый массив, который я передавал в bulkTransfer ()?

3) Если оба вышеперечисленных являются истинными, что делают значения и параметры индекса в controlTransfer ():

https://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html#controlTransfer(int,%2520int,%2520int,%2520int,%2520byte%5B%5D,%2520int,%2520int)

Я посмотрел на: Чем отличается controlTransfer от оптового перевода?

Но это не отвечало на мой главный вопрос.

1 Ответ

1 голос
/ 15 мая 2019

Во-первых, как примечание, HID, как правило, используют прерывание IN, а не массовые передачи. Это НЕ то же самое, что труба управления или наливная труба. Когда вы перемещаете мышь или клавиатуру (обычно), она отправит сообщение о прерывании на ваш компьютер, чтобы ОС не приходилось постоянно опрашивать канал управления для получения отчетов. В андроиде это делается с помощью queue / requestWait.

Лично я никогда не видел HID с объемной трубой.

Все устройства имеют конечную точку 0, которая является каналом двустороннего управления. Если вы контролируете прошивку устройства, вы можете отправлять пользовательские команды на канал управления. Теоретически, вы можете сделать это и использовать один и тот же байтовый массив. Но вам нужно знать, что ожидает ваше устройство с точки зрения идентификатора запроса, индекса и значения. Индекс, вероятно, будет 0 (дескриптор интерфейса; UsbInterface.getId). Значение также зависит от того, что ожидает ваше устройство (попробуйте 0).

Для справки, вот HID spec.

...