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.
†