Forum: PC Hard- und Software WebUSB und WebSerial vertragen sich nicht


von Henrik H. (Firma: TU Chemnitz) (heha)


Lesenswert?

Eine Feststellung:

Bietet ein USB-Multifunktionsgerät sowohl CDC (aka serielle 
Schnittstelle, v.a. um kompatibel mit älterer PC-Software zu sein, hier 
«grbl» auf Arduino Uno) als auch WebUSB / WinUSB an (via BOS-Deskriptor 
und den üblichen Rattenschwanz an Deskriptoren für Windows, inklusive 
LandingPage), läuft alles soweit prima: Das USB-Gerät enumeriert 
(zumindest unter Windows ≥8; Windows7 kennt den dazu erforderlichen{?} 
Association Descriptor nicht) und alle Treiber werden geladen.
Das Gerät lässt sich per COM-Port als auch per WinUSB komplett 
ansprechen.
Die für USB zuständige Firmware sitzt im ATmega16U2 des Unos.

Auch im Browser klappte es zunächst mit WebUSB als auch WebSerial.
Nach einigen Kode-Änderungen funktionierte plötzlich WebUSB nicht mehr.
Nach dem Rollback _auch nicht mehr!_
Fehlermeldung: Kann Interface nicht in Besitz nehmen.

Nachgelesen: Ein Browser-Update implementiert einen „Schutz“ vor dem 
Hacken von Smartcards.
Und verbietet WebUSB wenn auch WebSerial zur Verfügung steht.
Mit anderen Worten, der Browser verdächtigt mich als bösen Hacker, der 
sich an das Geld anderer Leute heranmacht.

Das ist in meinem Fall ganz schlecht, denn ich hatte vor, über WebUSB 
„urgent data“ an der gefüllten Warteschlange mit CDC-Daten (hier: gcode) 
vorbeizuschleusen, um Overrides (= Eingriff in Vorschubgeschwindigkeit 
und Spindeldrehzahl) und Zwischenstopp durchzusetzen, ohne die 
Warteschlange leeren zu müssen.
Per CDC aka WebSerial gibt's leider keinen „urgent data“-Mechanismus.
Hatte man anno dazumal im vergangenen Jahrtausend beim Definieren der 
CDC-Klasse schlicht vergessen.

CDC wird zudem für grbl-Firmwareupdate† benötigt, und WebUSB für die 
Smartphone-Bedienung (Smartphone-Browser haben kein WebSerial).

Die Lösung ist nun, in einem Deskriptorsatz ein althergebrachtes 
CDC-Interface anzubieten, und in einem anderen WebUSB, und zwischen 
beiden mit einem „magic key“ umzuschalten.
Hier "#1*\n" zu CDC, "#2*\n" zu WebUSB.
Ein Jumper tät's auch, ist aber in der CNC-Maschine unzugänglich.
Nicht schön, aber umschifft den Ärger mit den Browsern und hält die 
CNC-Maschine auch unter Windows7 und notfalls Windows98 am Laufen.
Wenn man ein Smartphone anschließen will (so ähnlich wie im Film Iron 
Sky an die Götterdämmerung) muss man vorher am PC "#2*\n" eingeben.

Windows 10/11, Edge und Chrome.

†
1
avrdude -c arduino ...

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.