Подтвердить что ты не робот

Android usb requestWait not return

ByteBuffer byteBuffer = ByteBuffer.allocate(9);;    
UsbRequest request = new UsbRequest();
request.initialize(mConnection,mEndpointIntr);
boolean b = request.queue(byteBuffer, 9);
Log.d(TAG, "start the request wait");
UsbRequest ur = mConnection.requestWait();

Я хочу использовать прерывание Android USB. Вышеупомянутый код представляет собой поток для приема данных с моей собственной платы USB. Но когда я пытаюсь вызвать UsbRequest ur = mConnection.requestWait();, функция не возвращается, она всегда пробегает requestWait(). Почему это происходит?

4b9b3361

Ответ 1

requestWait() в вашем коде будет ждать результат request.queue(byteBuffer, 9)

Вот несколько возможных причин, по которым он не возвращается:

  • Ваша очередь запросов находится на другой конечной точке, чем то, что на самом деле передает ваше USB-устройство. Дважды проверьте, что вы слушаете правильный интерфейс и конечную точку.

  • На стороне прошивки устройства USB не создавайте конечную точку прерывания на общем интерфейсе, например HID. Создайте новый специфический для поставщика интерфейс, иначе ядро ​​может получить интерфейс, если он HID, и очередь запросов может завершиться неудачей, вот что со мной произошло.

Ответ 2

На моем собственном USB-HID-устройстве с двумя конечными точками (IN и OUT), подключенными к MK802, я столкнулся с той же проблемой (очередь на запрос, возвращенный false). У меня было требованиеInterface, вызванное с ложным. Упорядочение следующего помогло, я получаю данные в порядке.

c.claimInterface(device.getInterface(0), true);