2012-10-08 3 views
11
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(); 

Ich möchte Android USB-Interrupt verwenden. Der obige Code ist ein Thread zum Empfangen von Daten von meiner eigenen USB-Platine. Aber wenn ich versuche, UsbRequest ur = mConnection.requestWait(); anzurufen, kehrt die Funktion nicht zurück, es läuft immer in requestWait(). Warum passiert das?android usb anfrageWarte nicht zurück

Antwort

8

Die requestWait() in Ihrem Code wird für das Ergebnis des warten request.queue(byteBuffer, 9)

Hier sind einige mögliche Gründe, warum es nicht zurückgibt:

  1. Ihre Anfrage Warteschlange befindet sich auf einem anderen Endpunkt als das, was Ihr Das USB-Gerät sendet tatsächlich Daten an. Überprüfen Sie, ob Sie die richtige Schnittstelle und den richtigen Endpunkt überwachen.

  2. Erstellen Sie auf der Seite der USB-Geräte-Firmware Ihren Interrupt-Endpunkt nicht auf einer gemeinsamen Schnittstellenklasse wie HID. Erstellen Sie eine neue herstellerspezifische Schnittstelle, andernfalls könnte der Kernel die Schnittstelle erhalten, wenn er HID ist und die Anforderungswarteschlange möglicherweise fehlschlägt. Dies ist mir passiert.

0

Auf meinem eigenen USB-HID-Gerät mit zwei Endpunkten (IN und OUT) zu MK802 verbunden, stieß ich das gleiche Problem (eine Anforderung zurück falsche Schlange stehen). Ich hatte AnspruchInterface mit falsch genannt. Die folgenden Einstellungen haben geholfen, ich erhalte Daten in Ordnung.

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