USB Audio-Dongle

OP #8065981
Lesenswert?

Hallo zusammen,

ich möchte fragen, ob es grundsätzlich möglich ist, einen USB-Proxy bzw. USB-Adapter zu entwickeln, der einen USB-Audio-Dongle transparent durchreicht und bei Bedarf logisch vom Host trennt und später wieder verbindet.

Hintergrund ist folgender:

Wireless-Headsets mit USB-Dongle (in meinem Fall ein SteelSeries Arctis Nova 5P) bleiben sowohl unter Windows als auch an der PlayStation 5 als aktives USB-Audiogerät angemeldet, obwohl das Headset ausgeschaltet ist. Dadurch erfolgt keine automatische Rückschaltung auf die Lautsprecher, solange der Dongle eingesteckt bleibt.

Nach mehreren Tests (verschiedene USB-Ports, Firmware-Updates, Windows und PS5) sowie Rückmeldungen des Herstellers scheint dieses Verhalten beabsichtigt zu sein und nicht auf einen Defekt zurückzuführen.

Die Idee wäre nun, einen universellen Adapter zwischen Host (PC, Konsole usw.) und dem USB-Dongle zu entwickeln. Dieser soll erkennen, dass das Headset nicht mehr aktiv ist, den Dongle gegenüber dem Betriebssystem logisch trennen und beim erneuten Einschalten des Headsets automatisch wieder verbinden – ganz ohne manuelles Ausstecken.

Mir geht es ausdrücklich nicht um einen Workaround oder um Einstellungen an der PS5 oder unter Windows, sondern ausschließlich um die technische Machbarkeit eines solchen Geräts.

Meine Fragen wären daher:

  • Ist ein solcher USB-Proxy grundsätzlich realisierbar?
  • Kann ein Mikrocontroller einen USB-Dongle transparent zwischen Host und Gerät durchreichen und bei Bedarf eine Trennung bzw. erneute Enumeration auslösen?
  • Welche Hardware- und Softwarekenntnisse wären für einen ersten Prototypen erforderlich?
  • Gibt es bereits ähnliche Projekte oder Open-Source-Ansätze, auf denen man aufbauen könnte?

Ich freue mich über jede technische Einschätzung. Sollte sich herausstellen, dass die Idee grundsätzlich realisierbar ist, könnte ich mir vorstellen, daraus einen ersten Prototypen zu entwickeln.

Vielen Dank im Voraus

#8066002
Lesenswert?

Michi schrieb:

Die Idee wäre nun, einen universellen Adapter zwischen Host (PC, Konsole usw.) und dem USB-Dongle zu entwickeln. Dieser soll erkennen, dass das Headset nicht mehr aktiv ist, den Dongle gegenüber dem Betriebssystem logisch trennen und beim erneuten Einschalten des Headsets automatisch wieder verbinden – ganz ohne manuelles Ausstecken.

Kriegst du nicht hin. Es gibt zwar Soundkarten, die erkennen können ob ein Gerät am Audio-Port steckt und so bei (Nicht)vorhandensein des Kopfhörers das Audio-Signal entsprechend routen. Aber das geht eben nur über die Buchsenbelegung. Im Prinzip könnte eine solche Soundkarte das dann gegenüber dem Host kommunizieren.

Aber: das ist ein Eingriff in die grundlegende Funktionsweise des USB-Audio Adapters. Wenn der das nicht von Haus aus kann, geht das nicht nachzurüsten. Und ob du nun das Headset aus den Adaper ausstöpselst oder gleich den ganzen Adapter rausziehst, bleibt gehüpft wie gesprungen.

Was klappen könnte, wäre ein USB-Hub der zwischen 2 Upstream USB-Hosts umgeschaltet werden kann. Z.B. https://www.amazon.de/dp/B0DGFC4MWK

#8066007
Lesenswert?

Michi schrieb:

Würde man sowas auch nicht hinbekommen, wenn man so ein Gerät selbst entwickeln könnte? Also von Grund auf.

Natürlich. Headsets mit so 2.4GHz-Nicht-Bluetooth-Dongles von anderen Herstellern machen das ja. (Also nicht das komplett abschalten/disconnecten. Aber über ein zusätzliches HID-Interface teilt der Dongle dem Betriebssystem mit, ob das Headset verbunden ist oder nicht, das kann daraufhin den Audio-Kanal umschalten)

#8066085
Lesenswert?

Michi schrieb:

Hast du dafür evtl. einen Link

Such nach "USB Audio Class 2.0 Specification" (beim USB-IF), dort bei "Terminal Descriptor" o.Ä. Das wäre der "Native Weg", rein mit dem Klassentreiber.

und wie funktioniert das in der Praxis?

Hängt stark von den verwendeten Chips (und deren Firmware) ab. Beliebt sind z.B. die Chips von Zhuhai Jieli Technology Co., weil billig.

Gibt leider kaum Dokumentation dafür, alles unter NDA...

Die könnten das, wenn in der Firmware aktiviert. Die meisten Hersteller nehmen aber nur deren Beispiel-Firmware, tauschen den Vendor-String im Descriptor aus und sind fertig. Dann geht das nicht, und das Dongle meldet einen ganzen Zoo an Tasten, die weder am Dongle noch am Headset überhaupt vorhanden sind.

Bei Steelseries wäre die Info die du suchst in einem HID-Raw-Report. Vermutlich. Inoffiziell reverse-engineered: Bei Arctis 1 im zweiten Byte, das ist 0x01 wenn disconnected. Bei Arctis 9 im ersten und zweiten Byte, 0xAA 0x01 ist connected. Bei Arctis 5: Selber suchen...

Problem: Das mit dem HID-Report ist schön und gut, wenn du einen passenden Treiber hast. Wenn du nur den Standard-USB-Audio-Klassentreiber benutzt (was die Playstation wohl machen wird), hilft das nicht weiter.

: Bearbeitet durch User
#8066236
Lesenswert?

Eine Lösung zum dazwischenstöpseln könnte man z.B. aus einem RasPi (4B, 5) basteln, so als Prototyp.

Der kriegt als USB-Host den Empfänger-Dongle, und stellt als USB-Gadget ein Audio-Interface für PC oder PS bereit, was dann natürlich per Software auch disconnected werden kann.

Vorteile:

  • Du bist frei in der Trigger-Wahl, wann du zum PC hin abschaltest. z.B. wenn länger kein Batteriestand vom Headset mehr gemeldet wird, wenn das Mic komplett stumm ist (ganz ohne Rauschen), wenn spezielle HID-Events kommen usw.
  • Du kannst den RasPi nebenbei noch was rechnen lassen, z.B. DSP-Filter wie Echo-Cancel, Noise-Suppression, Equalizer, …

Nachteile:

  • Hardware wäre ziemlicher Overkill
  • du kriegst ca. 40ms Latenz dazu

Wenn du das am RasPi am laufen hast, kannst du überlegen das auf einen µC zu portieren. Größenordnung STM32H7, vielleicht reicht sogar STM32F4. Die haben zwei USB-Ports, ST USB Device Library und ST USB Host Library kannst du im CubeMX reinklicken...

(Firma: FULL PALATINSK) Persönliche Seite #8066322
Lesenswert?

Man wird wohl eher was mit nem physischen Audioumschalter machen müssen. Einmal zwischen Line-out und Kopfhörerausgang vom PC und dann von KH zum den Boxen. Und wenn der Umschalter Strom braucht, kann der das von USB bekommen.

So dachte ich.

Oder eben oldschool den KH an den Verstärker und der KH ist dann was mit Funk.

#8066326
Lesenswert?

Michi schrieb im Beitrag #8065981 im Kern:

Hintergrund ist folgender: Headsets USB-Dongle [...] bleiben [...] angemeldet, obwohl Headset aus

Dadurch [...] keine autom. Rückschaltung auf Lautsprecher, solange eingesteckt

Grüne Buchse taucht wo auf?

Des|ntegrator schrieb:

Oder eben oldschool den KH an den Verstärker Headset ist bidirektional

OP #8067033
Lesenswert?

Ich habe jetzt einen 10€ Schalter mit USB-C Kabel gekauft. Der hängt an der PS und sobald ich den betätige bekommt der Dongle keinen Strom mehr und die PS meldet Headset getrennt und der Sound kommt wieder vom TV, sobald ich wieder einschalte verbindet sich das Headset und ich habe da wieder Ton. Kann so ein Verhalten über soft oder Hardware Komponenten gelöst werden? Das wäre die alltagstauglichste Lösung.

#8068646
Lesenswert?

Hallo Michi, ich hatte vor langer Zeit das gleiche Problem mit meinem SteelSeries Arctis Pro Wireless headset. Ich hab es gelöst, indem ich das HID Protokoll zur USB Basisstation reverse engineered habe und mir dann ein kleines Programm zum umschalten des Audiogerätes programmiert habe. Du findest es auf meinem GitHub: https://github.com/julr/arctis-pro-wireless-helper Evtl. lässt sich das für dein Nova 5P anpassen. Das Protokoll habe ich damals mittels Wireshark und USBPcap untersucht, während die SteelSeries Software lief (die zeigt den Verbindungsstatus an)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren