Estoy desarrollando un dispositivo USB de consumo que se configurará a través de una interfaz web.
La primera interfaz es un Gamepad HID. La segunda es una interfaz de proveedor donde se manejará la configuración.
Al ejecutar este código WebUSB, aparece el siguiente error:
async () => { try { let device = await navigator.usb.requestDevice(); await device.open(); await device.selectConfiguration(1); await device.claimInterface(1); await device.controlTransferOut({ // ERROR OCCURS AT THIS LINE! requestType: "vendor", recipient: "interface", request: 0x01, value: 0x01, index: 0x01, }); const dataToSend = new ArrayBuffer(8); dataToSend[0] = 2; let result = await device.transferOut(4, dataToSend); const decoder = new TextDecoder(); console.log("Received: " + decoder.decode(result.data)); } catch (error) { console.error(error); } Que genera DOMException: A transfer error has occurred.
Al revisar los registros del dispositivo Chrome, veo esto en chrome://device-log/ :
[22:21:07] Transfer failed: A device attached to the system is not functioning. (0x1F)
Una nota al margen: estoy casi seguro de que este código funcionaba hace 6 meses y recuerdo vagamente que puede haber tenido que ver con la siguiente parte (específicamente el "controlador" :)
[22:15:57] USB device added: path=\\?\usb#vid_0f0d&pid_00cc#a&33dbaa40&1&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed} vendor=3853 "keyboard.gg", product=204 "Edgeguard", serial="", driver="usbccgp", guid=c240342b-ed28-41aa-a8c9-bc505467059e
La primera señal de alerta para mí es que el dispositivo está usando driver="usbccgp" ; esperaba ver WinUsb . Usando una herramienta llamada Zadig, puedo ver que la primera interfaz no es WCID, pero la segunda sí (tenga en cuenta: no cambié manualmente ninguno de estos, esto es lo que detecta Windows).
Mi memoria es borrosa, pero creo que esta transferencia puede estar fallando porque Chrome está agregando el dispositivo con un controlador usbccgp . Cualquier consejo sería apreciado.
Esto se debió a una configuración incorrecta del código de firmware de mi dispositivo (¡no se inicializó ni configuró los terminales!)
Eso se solucionó y puedo enviar datos correctamente.