WebUSB und WebSerial vertragen sich nicht

OP (Firma: TU Chemnitz) #7815386
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 ...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.