Forum: Mikrocontroller und Digitale Elektronik USB Audio-Dongle


von Michi (michi89)


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
von Harald K. (kirnbichler)


Lesenswert?

Michi schrieb:
> Dieser soll erkennen, dass das
> Headset nicht mehr aktiv ist

Und ... wie soll er das tun?
von Εrnst B. (ernst)


Lesenswert?

Harald K. schrieb:
> Und ... wie soll er das tun?

Langes Kabel vom Headset zu der Kiste mit dem Dongle-Abschalt-Relais.
von Michi (michi89)


Lesenswert?

evtl. über den „Verlust“ der 2,4Ghz Verbindung? Sobald das headset aus 
ist löst sich doch die Verbindung? Es müsste ein internes Signal im 
dongle geben der dann die Stromversorgung löst
von Andreas M. (andreas_m62)


Lesenswert?

Headsetbuchsen haben oft einen Kontakt,
mit welchem beim Einstöpseln Schalthandlungen durchgeführt werden.
Damit einfach die 5 Volt USB-Spannung für den Audio-Dongle
ein- und ausschalten.
Dazu in der +Ub eine Trennstelle einbauen.
: Bearbeitet durch User
von Nemopuk (nemopuk)


Lesenswert?

Michi schrieb:
> Es müsste ein internes Signal im dongle geben der dann die
> Stromversorgung löst

Dann finde heraus, wie du an dieses Dignal heran kommst. Idealerweise 
elektrisch, nicht per Software/USB-Kommunikation.
von Axel S. (a-za-z0-9)


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
von Michi (michi89)


Lesenswert?

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


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)
von Michi (michi89)


Lesenswert?

Hast du dafür evtl. einen Link und wie funktioniert das in der Praxis? 
Das würde evtl. mein Problem lösen, weil genau das kann die Software 
meiner PlayStation nicht.
von Nemopuk (nemopuk)


Lesenswert?

Michi schrieb:
> Das würde evtl. mein Problem lösen, weil genau das kann die Software
> meiner PlayStation nicht.

Verstehe ich nicht. Wenn die Playstation das nicht kann, wie löst es 
(das zusätzliches HID-Interface) dann dein Problem?
von Εrnst B. (ernst)


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
von .● Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Vielleicht könnte ein anderes System brauchbarer sein?

An der grünen Klinkenbuchse und Strom/Daten von USB
eine kleine Umschaltbox (...)
von Εrnst B. (ernst)


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...
von Rahul D. (rahul)


Lesenswert?

.● Des|ntegrator ●. schrieb:
> An der grünen Klinkenbuchse und Strom/Daten von USB
> eine kleine Umschaltbox (...)

Wo hat USB denn eine grüne Klinkenbuchse?
Das Headset läuft doch komplett ohne Analogteil am PC.
von Harald A. (embedded)


Lesenswert?

Warum der ganze Aufwand, meist reicht es doch schon, wenn man die 5V des 
Dongles trennt. Das Headset liegt dann z.B. auf einer Ablage mit 
Magnetschalter o.ä. und schaltet eben diese 5V.
von .● Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Rahul D. schrieb:
> .● Des|ntegrator ●. schrieb:
>> An der grünen Klinkenbuchse und Strom/Daten von USB
>> eine kleine Umschaltbox (...)
>
> Wo hat USB denn eine grüne Klinkenbuchse?
> Das Headset läuft doch komplett ohne Analogteil am PC.

Na? wird Dir zu warm?
von Rahul D. (rahul)


Lesenswert?

.● Des|ntegrator ●. schrieb:
> Na? wird Dir zu warm?

Das wollte ich dich schon fragen.
Wie kommst du auf die grüne Buchse?
von .● Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Der Herr möchte doch entwickeln...
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.