2016-07-20 8 views
7

Po the simple tutorial mogę połączyć się z urządzeniem (myszą optyczną USB z chipem ADNS-5000 wewnątrz) i utworzyć bulkTransfer.Jak uzyskać dostęp do usługi Android USB Host Jakich odpowiedzi na urządzenie USB uzyskuje po wysłaniu polecenia przez Hosta?

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 Spec (można google out) określa pewien zestaw "Polecenia USB", wśród których występuje na przykład:

Mnemonic: Get_Status_Device

Command: 80 00 00 00 00 00 02 00

Uwagi: Normalnie zwraca 00 00, 00 00 z własnym zasilaniem, Pilot zdalnego budzenia 02 00

Więc rozumiem, że podoba: kiedy piszę dane:

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

do urządzenia powinien dostać albo 0x00, 0x00 lub 0x00, 0x00(jest to prawdopodobnie błąd w specyfikacji jak ta sekwencja bajtów jest zdefiniowana jako wynik dla dwojga różne statusy) lub 0x20, 0x00 w zamian, , ale nie widzę żadnego sposobu, żeby api zwracał cokolwiek, czy mam rację?

Odpowiedz

0

Rzuciłem okiem na specyfikację ADNS-5000. Jedno jest pewne, masz dostęp do punktu końcowego IN i OUT.

Get_Status_Endpt0 82 00 00 00 XX 00 02 00 OUT: xx = 00 IN: xx = 80 normalnie powraca 00 00

To oznacza, że ​​polecenia (nie API) może powrócić wynik.

Jedyny sposób, jaki mogę sobie wyobrazić, to napisanie polecenia do punktu końcowego OUT i odczytanie (przez odpytywanie) stanu (po wykonaniu polecenia) z punktu końcowego IN.

Jest to coś, czego używałem w kilku projektach i jest idealnie w porządku. Nie jestem pewien co do ADNS-5000, ponieważ nie sprawdziłem szczegółów protokołu USB.

Mam nadzieję, że to pomaga.