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.
Credo di essere riuscito a portare avanti, dopo uno stallo facendo una chrome.usb.resetDevice() seguita da una completa ri-acquisizione del dispositivo . – nraynaud
Il rapporto modifiche/anwers è sopra il tetto, avrò presto una domanda senza risposta di qualità di Shakespeare. – nraynaud