2016-12-06 1 views
4

Nach Zugang zu einem angeschlossenen Gerät zu erhalten navigator.usb.requestDevice indem ich versuche, eine Verbindung mit einem angeschlossenen Gerät zu öffnen, wie folgt:Wie beanspruche Schnittstelle mit WebUSB?

device.open() 
    .then(() => device.selectConfiguration(1)) 
    .then(() => device.claimInterface(1)) 

Es scheinbar wählt die Konfiguration erfolgreich, aber der claimInterface Schritt wird die folgenden Fehler erzeugen:

DOMException: Unable to claim interface. 

ich bin mit Chrome 55.0.2883.75 beta mit der --disable-webusb-security Flagge als Wurzel (ohne die ich keine Geräte hast) auf Ubuntu 16.10.

Wie kann ich die Verbindung herstellen und ausführen?

Edit:

Es scheint, dass die cdc_acm Fahrer bereits die Schnittstelle beansprucht seit Vorrichtung I ist ein serielles Gerät zu befestigen bin versucht, den Fahrer Entladen ermöglicht es Ihnen, das Gerät (jedoch nach diesem Anspruch darüber beschwert Schnittstelle 1 nicht verfügbar, sowie 0 oder 2).

+0

Da dieses Gerät mehr Schnittstellen hat sollten wir sicherstellen, dass Sie die richtigen sind behaupten. Bitte fügen Sie die Ausgabe von 'lsusb -v' für Ihr Gerät ein, welches die vollständigen Gerätedeskriptoren auflistet. Ein USB-CDC-Gerät wird in der Tat schwierig mit WebUSB zu verwenden wegen der vorhandenen Treiber, die geladen werden, aber zwingt den Treiber zum Entladen sollte die Schnittstelle freigeben. Wenn ein Fehler wie "Kann keine Schnittstelle anfordern" angezeigt wird, liefert Chrome möglicherweise weitere Details zum Fehler in chrome: // device-log. –

Antwort

1

Sobald die Konfiguration ausgewählt ist, können Sie die richtige Schnittstellennummer in device.configuration.interfaces[0].interfaceNumber finden:

device.open() 
    .then(() => device.selectConfiguration(1)) 
    .then(() => device.claimInterface(device.configuration.interfaces[0].interfaceNumber)) 
+0

Vielen Dank für Ihre Antwort. Die Nummer 0, 1 und 2 habe ich mit der hier vorgeschlagenen Methode gefunden. Aber alle diese werden den gleichen Fehler erzeugen. –

+0

@JorisBlaak Auf welche Art von Gerät versuchen Sie zuzugreifen? hast du es mit einem anderen Gerät versucht (zB USB Key)? – Supersharp

+0

Ein serielles Gerät, wie in der _Edit_ erwähnt wurde bereits vom Fahrer behauptet –