2013-12-17 12 views
9

Sto inviando un trasferimento di massa fuori, e lo stallo nel dispositivo (scrivo il codice su entrambe le estremità del cavo) per interrompere l'azione. Sto inviando un controllo fatto in casa trasferendo SET_FEATURE ENDPOINT_HALT all'endpoint e quando l'interruzione è completa, seguo un CLEAR_FEATURE ENDPOINT_HALT per ripristinare l'endpoint e utilizzarlo di nuovo. Nel debugger incorporato posso confermare che è stato cancellato nel dispositivo. Ma nel browser, qualsiasi trasferimento successivo sull'endpoint finirà con il messaggio "Trasferimento non riuscito" molto utile (codice 1).Come recuperare da uno stallo in chrome.usb?

if (errorCode == 4) { 
    var ENDPOINT_HALT = 0; 
    var CLEAR_FEATURE = 0x01; 
    controlTransfer(currentDevice, {direction: 'out', recipient: 'endpoint', requestType: 'standard', 
    request: CLEAR_FEATURE, value: ENDPOINT_HALT, index: 1, data: new ArrayBuffer(0)}, genericErrorFilter()); 
} 

Da quello che ho trovato su internet, libusb ha una funzione speciale per la compensazione una stalla sul lato host, per dire al kernel che l'endpoint è stato recuperato, e dovrebbe riflettere sul fatto che nelle sue strutture interne. Questa funzione non è esposta in chrome.usb.

C'è un modo per recuperare da uno stallo in Chrome? O esiste un modo alternativo recuperabile dal dispositivo per interrompere un trasferimento di massa in corso?

Sto usando Mac   OS   X e Chrome Canary.

+0

Credo di essere riuscito a portare avanti, dopo uno stallo facendo una chrome.usb.resetDevice() seguita da una completa ri-acquisizione del dispositivo . – nraynaud

+5

Il rapporto modifiche/anwers è sopra il tetto, avrò presto una domanda senza risposta di qualità di Shakespeare. – nraynaud

risposta

1

Si può provare un'interruptTransfer sul vostro messaggio di stallo catturato

chrome.experimental.usb.interruptTransfer(integer device, 
string direction, 
integer endpoint, 
string data, 
function callback) 
Problemi correlati