HID двусторонняя связь между Arduino и Android (controlTransfert)

Я хочу иметь 2 двухстороннюю (входную и выходную) HID-связь между leonardo и планшетом Android (выступающим в качестве хоста). На leonardo я использую Nicohood HID project. Мне удалось успешно заставить код работать на Linux, Windows и MacOs, так что это возможно.

Используя чистую реализацию Android, я могу только получать данные от леонардо, но не отправлять ему...

Из того, что я видел в дескрипторе, данные отправляются с устройства (направление IN) с использованием определенной конечной точки. Для другого пути (OUT, к устройству) мы должны использовать конечную точку управления.

Тем не менее, это не работает на андроиде. Вот код, который я использовал:

UsbDeviceConnection mUsbConnection = mUsbManager.openDevice(myDevice);
byte data[] = {7, 11, 13, 17};
int resOut = mUsbConnection.controlTransfer(0x21, 9, 200, 2, data, data.length, 50);

 // => resOut value is always -1 (didn't succeed to communicate)

Для параметров я использовал ответы на этот вопрос: Использование Android для связи с USB HID-устройством и посмотрел примеры связи libusb/nicohood hid на linux...

К счастью, я попытался изменить значение с «200» на «0» или индекс с 0 на 1 или 2, но я действительно не знаю, что они означают, и это не очень помогло...

Как я могу отправить данные на устройство, используя конечную точку управления с Android?

PS: я могу читать HID-сообщения с устройства, так что это не проблема разрешения.


person ice3    schedule 15.03.2017    source источник
comment
У вас была возможность поместить USB-анализатор между устройством Android и микроконтроллером, чтобы увидеть, почему транзакции OUT не выполняются? Один вопрос - что за ошибка у вас вылетает? Это ошибка транзакции USB или ошибка STALL?   -  person Shaibal    schedule 21.03.2017