2012-12-24 4 views
7

Scrivo un'app nella scheda galassia p7300 per comunicare con un tasto (dispositivo scsi) tramite cavo otg. Posso leggere i dati per la prima volta con bulkTransfer(), ma non posso la prossima volta. Quindi uso Ellisys Visual USB per annusare i dati e trovo che la chiave restituisca effettivamente 13 byte di dati. Ma nel client Android (GT-P7300) ricevo -1 quel ritorno bulkTransfer. Ho esaurito la mia idea. Grazie a chiunque possa darmi un indizio.Ritorno bulkTransfer Android -1 durante la lettura dei dati, ma nel buffer sono presenti alcuni dati

+0

Un ritorno di un numero negativo corrisponde di solito a un codice di errore per una funzione come questa. Controlla qualunque classe tu stia usando per le variabili 'ERROR_'. –

+0

Grazie, Matt Clark. Rendimi confuso è che la chiave restituisce effettivamente i dati ture, ma bulkTransfer restituisce -1. –

+0

Felice che tu sia riuscito a capire il tuo problema. Felice codifica! E buon Natale! : p –

risposta

6

Quando si utilizza il trasferimento di massa USB, ecco una lista di cose da controllare quando la transazione non riesce

a) verificare la direzione dell'endpoint aver superato la funzione bulkTransfer

b) garantire che il buffer è sufficiente lunghezza per memorizzare dati in ingresso

c) il campo lunghezza è forse la più importante. Se conosci la dimensione esatta della risposta, usala.

d) Il parametro Timeout. Se si invia una query al dispositivo e non si fornisce un timeout sufficiente durante l'ascolto della risposta, il bulkTransfer può restituire -1.

Sembra che il timeout stia influenzando il comportamento nel tuo caso. Il mio suggerimento è di usare il numero esatto di byte nei campi di lunghezza per ogni risposta, e usare un timeout più lungo (come 1000) in modo da dare abbastanza tempo per completare la richiesta di massa.

+0

Grazie Jan, quello che hai detto che ho provato, il mio problema è che l'endpoint bulkIn restituisce un segnale di stallo, quindi invio un comando per cancellare lo stallo.Dopo che, posso ricevere i dati normalmente, ma quando il segnale di stallo si è verificato di nuovo , Invio il comando per cancellarlo, mentre non funziona bene quando ricevo i dati. Restituisce -1 ma ci sono alcuni dati in realtà. Ho esaurito le mie idee. –

+0

@ Wayne.liu sei in grado di risolvere questo problema? se sì per favore condividi le tue scoperte! –

+0

@ Wayne.liu Si prega di condividere la soluzione al problema che si stava affrontando. Grazie – Sagar

1

È troppo tardi per pubblicare una soluzione, ma nel caso in cui qualcuno abbia bisogno di aiuto in proposito, può ottenere una risposta da qui.

Ho affrontato lo stesso problema. Stavo usando Android (Samsung Galaxy s3) come dispositivo host USB. Ho capito l'endpoint di lettura e scrivere endpoint non trasferendo dati utilizzando USB BulkTransfer. Ho provato a cambiare gli endpoint per il caso in modalità host, ha riconosciuto e scritto/letto correttamente i dati.

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

P.S c'è un'applicazione disponibile per Android denominata "Informazioni dispositivo USB". Mi ha aiutato molto nella comprensione delle interfacce e degli endpoint del mio dispositivo USB.