Как получить в 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.
Надеюсь, поможет.