2012-12-24 3 views
7

Ich schreibe eine App in Galaxy Registerkarte P7300 mit einem Schlüssel (SCSI-Gerät) über otg Kabel zu kommunizieren. Ich kann Daten erstmalig mit bulkTransfer() lesen, kann es aber beim nächsten Mal nicht. Dann benutze ich Ellisys Visual USB, um Daten zu schnüffeln, und ich finde, dass der Schlüssel wirklich 13 Bytes Daten zurückgibt. Aber im Android-Client (GT-P7300) bekomme ich -1, dass BulkTransfer zurückgibt. Ich habe meine Idee ausgelaufen. Danke für alle, die mir ein paar Hinweise geben können.Android BulkTransfer Return -1 beim Lesen von Daten, aber es gibt wirklich einige Daten im Puffer

+0

Eine Rückgabe einer negativen Zahl entspricht normalerweise einem Fehlercode für eine Funktion wie diese. Überprüfen Sie, welche Klasse Sie für 'ERROR_'-Variablen verwenden. –

+0

Danke, Matt Clark. Mach mich verwirrt ist, dass der Schlüssel tatsächlich die Ture-Daten zurückgibt, aber BulkTransfer gibt -1 zurück. –

+0

Ich bin froh, dass du dein Problem herausgefunden hast. Glückliche Kodierung! Und frohe Weihnachten! : p –

Antwort

6

Wenn die Übertragung USB-Massen verwenden, hier ist eine Liste der Dinge zu überprüfen, wenn Transaktion

a) Überprüfen Sie die Richtung des Endpunkt fehlschlägt Sie die bulkTransfer Funktion

b bestanden haben) dafür sorgen, dass der Puffer hat eine ausreichende Länge eingehende Daten speichern

c) das Längenfeld ist vielleicht das wichtigste. Wenn Sie die genaue Größe der Antwort kennen, verwenden Sie sie.

d) Der Timeout-Parameter. Wenn Sie eine Abfrage an das Gerät senden und beim Abhören der Antwort nicht genügend Zeitlimit angeben, kann der BulkTransfer -1 zurückgeben.

Es sieht so aus, als ob das Timeout das Verhalten in Ihrem Fall beeinflusst. Mein Vorschlag ist, die genaue Anzahl der Bytes in den Längenfeldern für jede Antwort zu verwenden und ein längeres Zeitlimit (wie 1000) zu verwenden, so dass Sie genügend Zeit geben, um die Massenanforderung abzuschließen.

+0

Danke Jan, was du gesagt hast Ich habe versucht, mein Problem ist die bulkIn Endpunkt zurückgeben ein Stall-Signal, also sende ich einen Befehl, um den Stall zu löschen.Nachdem kann ich die Daten normal erhalten, aber wenn das Stall-Signal wieder auftrat Ich sende den Befehl, um es zu löschen, während es nicht gut funktionierte, wenn ich Daten erhalte. Es gibt -1 zurück, aber es gibt einige Daten tatsächlich. Ich habe meine Ideen auslaufen lassen. –

+0

@ Wayne.liu sind Sie in der Lage, dieses Problem zu lösen? Wenn ja, bitte teilen Sie Ihre Erkenntnisse! –

+0

@ Wayne.liu Bitte teilen Sie die Lösung für das Problem, das Sie konfrontiert waren. Danke – Sagar

1

Es ist zu spät, um eine Lösung zu posten, aber für den Fall, dass jemand in Zukunft Hilfe braucht, kann man von hier eine Antwort bekommen.

Ich konfrontiert das gleiche Problem. Ich benutzte Android (Samsung Galaxy S3) als USB-Host-Gerät. Ich habe den Lese-Endpunkt herausgefunden und schreibe den Endpunkt, der keine Daten mit USB BulkTransfer überträgt. Ich habe versucht, die Endpunkte für den Host-Modus zu wechseln, es erkannt und erfolgreich die Daten geschrieben/gelesen.

mReadEndpoint = mDataInterface.getEndpoint(0);// tweaking endpoints // 1 was for read and 0 was for write 
mWriteEndpoint = mDataInterface.getEndpoint(1); 

P.S gibt es eine Anwendung für Android namens "USB-Gerät Info". Es hat mir sehr geholfen, Schnittstellen und Endpunkte meines USB-Geräts zu verstehen.

Verwandte Themen