Как получить в Android Usb Host то, что USB-устройство отвечает после того, как Host отправляет команду?

Следуя простому руководству, я могу подключиться к устройству (USB-оптическая мышь с чипом ADNS-5000 внутри) и выполнить массовый перенос.

UsbInterface intf = device.getInterface(0);
UsbEndpoint endpoint = intf.getEndpoint(0);
UsbDeviceConnection connection = manager.openDevice(device);
connection.claimInterface(intf, forceClaim);
connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); //do in another thread

Спецификация ADNS-5000 (может быть выведена из строя) определяет некоторый набор "USB-команд", среди которых есть, например:

Мнемоника: Get_Status_Device

Команда: 80 00 00 00 00 00 02 00

Примечания: обычно возвращает 00 00, автономное питание 00 00, дистанционное включение 02 00

Так что я понимаю, как: когда я пишу данные:

private byte[] bytes = {(byte) 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00};

на устройство я должен получить либо 0x00, 0x00 или же 0x00, 0x00 (это, вероятно, ошибка в спецификации, так как эта последовательность байтов определяется как результат для двух разных состояний) или 0x20, 0x00 взамен, но я не вижу, как API возвращает что-нибудь, я прав?

1 ответ

Я быстро взглянул на спецификацию ADNS-5000. Одно можно сказать наверняка, у вас есть доступная конечная точка IN и OUT.

Get_Status_Endpt0 82 00 00 00 xx 00 02 00 OUT: xx = 00, IN: xx = 80 Обычно возвращает 00 00

Это означает, что команды (нет API) могут возвращать результат.

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

Это то, что я использовал в нескольких проектах, и это прекрасно. Я не уверен насчет ADNS-5000, так как я не проверял детали протокола USB.

Надеюсь, поможет.

Другие вопросы по тегам