Audiounterstützung für Hörgeräte über Bluetooth LE

Hörgeräte (HA) können durch die Verwendung verbindungsorientierter L2CAP-Kanäle (CoC) über Bluetooth Low Energy (BLE) eine verbesserte Zugänglichkeit auf Android-basierten Mobilgeräten erreichen. CoC verwendet einen elastischen Puffer aus mehreren Audiopaketen, um einen gleichmäßigen Audiofluss auch bei Paketverlusten aufrechtzuerhalten. Dieser Puffer bietet Audioqualität für Hörgeräte auf Kosten der Latenz.

Das Design von CoC orientiert sich an der Bluetooth Core Specification Version 5 (BT). Um mit den Kernspezifikationen in Einklang zu bleiben, müssen alle Multibyte-Werte auf dieser Seite als Little-Endian gelesen werden.

Terminologie

  • Central – das Android-Gerät, das über Bluetooth nach Werbung sucht.
  • Peripheriegerät – das Hörgerät, das Werbepakete über Bluetooth sendet.

Netzwerktopologie und Systemarchitektur

Bei der Verwendung von CoC für Hörgeräte geht die Netzwerktopologie von einem einzigen zentralen und zwei peripheren Geräten aus, einem linken und einem rechten, wie in Abbildung 1 dargestellt. Das Bluetooth-Audiosystem betrachtet die linken und rechten Peripheriegeräte als eine einzige Audiosenke. Fehlt ein Peripheriegerät aufgrund eines monauralen Anschlusses oder eines Verbindungsverlusts, mischt die Zentrale den linken und rechten Audiokanal und überträgt den Ton an das verbleibende Peripheriegerät. Wenn die Zentrale die Verbindung zu beiden Peripheriegeräten verliert, geht die Zentrale davon aus, dass die Verbindung zur Audiosenke verloren gegangen ist. In diesen Fällen leitet die Zentrale das Audiosignal an einen anderen Ausgang weiter.


Abbildung 1. Topologie zum Koppeln von Hörgeräten mit Android-Mobilgeräten mithilfe von CoC über BLE

Wenn die Zentrale keine Audiodaten an das Peripheriegerät streamt und eine BLE-Verbindung aufrechterhalten kann, sollte die Zentrale die Verbindung zum Peripheriegerät nicht trennen. Die Aufrechterhaltung der Verbindung ermöglicht die Datenkommunikation mit dem GATT-Server, der sich auf dem Peripheriegerät befindet.

Beim Koppeln und Verbinden von Hörgeräten muss die Zentrale Folgendes tun:

  • Behalten Sie den Überblick über die zuletzt gekoppelten linken und rechten Peripheriegeräte.
  • Gehen Sie davon aus, dass die Peripheriegeräte verwendet werden, wenn eine gültige Kopplung vorliegt. Die Zentrale versucht, eine Verbindung zum gekoppelten Gerät herzustellen bzw. wiederherzustellen, wenn die Verbindung unterbrochen wird.
  • Gehen Sie davon aus, dass die Peripheriegeräte nicht mehr verwendet werden, wenn eine Kopplung gelöscht wird.

In den oben genannten Fällen bezieht sich „Pairing“ auf die Registrierung eines Hörgerätesatzes mit einer bestimmten UUID und Links-/Rechts-Bezeichnern im Betriebssystem, nicht auf den Bluetooth-Pairing-Prozess.

System Anforderungen

Um CoC für ein gutes Benutzererlebnis ordnungsgemäß umzusetzen, müssen die Bluetooth-Systeme in den Zentral- und Peripheriegeräten:

  • Implementieren Sie einen kompatiblen BT 4.2 oder höher-Controller. LE Secure Connections wird dringend empfohlen.
  • Die Zentrale muss mindestens zwei gleichzeitige LE-Verbindungen mit Parametern unterstützen, wie unter Format und Timing von Audiopaketen beschrieben.
  • Das Peripheriegerät muss mindestens 1 LE-Link mit den unter Audiopaketformat und Timing beschriebenen Parametern unterstützen.
  • über eine LE-Credit-basierte Flusskontrolle verfügen [BT Band 3, Teil A, Abschnitt 10.1]. Geräte müssen eine MTU- und MPS-Größe von mindestens 167 Byte auf CoC unterstützen und in der Lage sein, bis zu 8 Pakete zu puffern.
  • über eine LE-Datenlängenerweiterung [BT Band 6, Teil B, Abschnitt 5.1.9] mit einer Nutzlast von mindestens 167 Byte verfügen.
  • Lassen Sie das Zentralgerät den HCI LE-Verbindungsaktualisierungsbefehl unterstützen und die Parameter maximum_CE_Length “ und minimum_CE_Length ungleich Null einhalten.
  • Lassen Sie die Zentrale den Datendurchsatz für zwei LE-CoC-Verbindungen zu zwei verschiedenen Peripheriegeräten mit den Verbindungsintervallen und Nutzlastgrößen im Audiopaketformat und Timing verwalten.
  • Lassen Sie das Peripheriegerät die Parameter MaxRxOctets und MaxRxTime in den Frames LL_LENGTH_REQ oder LL_LENGTH_RSP auf die kleinsten erforderlichen Werte einstellen, die für diese Spezifikationen erforderlich sind. Dadurch kann die Zentrale ihren Zeitplaner optimieren, wenn sie die zum Empfang eines Frames benötigte Zeit berechnet.

Es wird dringend empfohlen, dass die Zentral- und Peripheriegeräte 2 MB PHY unterstützen, wie in der BT 5.0-Spezifikation angegeben. Die Zentrale muss Audioverbindungen mit mindestens 64 kbit/s auf 1M- und 2M-PHYs unterstützen. Der BLE-Langstrecken-PHY darf nicht verwendet werden.

CoC verwendet die Standard-Bluetooth-Mechanismen für die Link-Layer-Verschlüsselung und das Frequenzsprungverfahren.

ASHA GATT-Dienste

Ein Peripheriegerät muss den unten beschriebenen GATT-Serverdienst Audio Streaming for Hearing Aid (ASHA) implementieren. Das Peripheriegerät muss diesen Dienst im allgemein erkennbaren Modus ankündigen, damit die Zentrale eine Audiosenke erkennen kann. Alle LE-Audio-Streaming-Vorgänge erfordern eine Verschlüsselung. Das BLE-Audio-Streaming besteht aus den folgenden Eigenschaften:

Charakteristisch Eigenschaften Beschreibung
ReadOnlyProperties Lesen Siehe ReadOnlyProperties .
AudioControlPoint Schreiben und Schreiben ohne Antwort Kontrollpunkt für Audiostream. Siehe AudioControlPoint .
AudioStatusPoint Lesen/Benachrichtigen Statusberichtsfeld für den Audiokontrollpunkt. Siehe AudioStatusPoint
Volumen Schreiben Sie ohne Antwort Byte zwischen -128 und 0, das den Dämpfungsgrad angibt, der auf das gestreamte Audiosignal angewendet werden soll, im Bereich von -48 dB bis 0 dB. Die Einstellung -128 wird als vollständig stummgeschaltet interpretiert, dh der niedrigste nicht stummgeschaltete Lautstärkepegel beträgt -127, was einer Dämpfung von -47,625 dB entspricht. Bei der Einstellung 0 soll ein gestreamter Rail-to-Rail-Sinuston einem Eingangsäquivalent von 100 dBSPL am Hörgerät entsprechen. Die Zentrale soll im nominalen Vollausmaß streamen und diese Variable verwenden, um den gewünschten Präsentationspegel in der Peripherie einzustellen.
LE_PSM_OUT Lesen PSM zum Anschluss des Audiokanals. Zur Auswahl aus dem Dynamikbereich [BT Band 3, Teil A, Abschnitt 4.22]

Die dem Dienst und den Merkmalen zugewiesenen UUIDs:

Dienst-UUID : {0xFDF0}

Charakteristisch UUID
ReadOnlyProperties {6333651e-c481-4a3e-9169-7c902aad37bb}
AudioControlPoint {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
AudioStatus {38663f1a-e711-4cac-b641-326b56404837}
Volumen {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

Zusätzlich zum ASHA GATT-Dienst muss das Peripheriegerät auch den Geräteinformationsdienst implementieren, damit die Zentrale die Herstellernamen und Gerätenamen des Peripheriegeräts erkennen kann.

ReadOnlyProperties

ReadOnlyProperties haben die folgenden Werte:

Byte Beschreibung
0 Version – muss 0x01 sein
1 Siehe DeviceCapabilities .
2-9 Siehe HiSyncId .
10 Siehe FeatureMap .
11-12 RenderDelay. Dies ist die Zeit in Millisekunden vom Empfang eines Audioframes durch das Peripheriegerät bis zur Wiedergabe der Ausgabe durch das Peripheriegerät. Diese Bytes können verwendet werden, um ein Video zu verzögern, um es mit dem Audio zu synchronisieren.
13-14 Reserviert für zukünftige Verwendung. Auf Nullen initialisieren.
15-16 Unterstützte Codec-IDs . Dies ist eine Bitmaske der unterstützten Codec-IDs. Eine 1 an einer Bitstelle entspricht einem unterstützten Codec. Beispielsweise gibt 0x0002 an, dass G.722 mit 16 kHz unterstützt wird. Alle anderen Bits müssen auf 0 gesetzt werden.

Gerätefunktionen

Bisschen Beschreibung
0 Geräteseite (0: links, 1: rechts)
1 Gibt an, ob das Gerät eigenständig ist und Monodaten empfängt oder ob das Gerät Teil eines Sets ist (0: monaural, 1: binaural)
2 Gerät unterstützt CSIS (0: nicht unterstützt, 1: unterstützt)
3-7 Reserviert (auf 0 gesetzt)

HiSyncID

Dieses Feld muss für alle binauralen Geräte eindeutig sein, muss jedoch für den linken und rechten Satz gleich sein.

Byte Beschreibung
0-1 ID des Herstellers. Es handelt sich um die von BTSIG zugewiesenen Unternehmenskennungen .
2-7 Eindeutige ID zur Identifizierung des Hörgerätesets. Diese ID muss sowohl am linken als auch am rechten Peripheriegerät gleich eingestellt sein.

FeatureMap

Bisschen Beschreibung
0 LE CoC-Audioausgabe-Streaming wird unterstützt (Ja/Nein).
1-7 Reserviert (auf 0 gesetzt).

Codec-IDs

Wenn das Bit gesetzt ist, wird dieser bestimmte Codec unterstützt.

ID/Bitnummer Codec und Abtastrate Erforderliche Bitrate Rahmenzeit Obligatorisch auf zentraler (C) oder peripherer (P)
0 Reserviert Reserviert Reserviert Reserviert
1 G.722 bei 16 kHz 64 kbit/s Variable C und P
2-15 sind reserviert.
0 ist ebenfalls reserviert.

AudioControlPoint

Dieser Kontrollpunkt kann nicht verwendet werden, wenn das LE CoC geschlossen ist. Eine Beschreibung des Verfahrens finden Sie unter Starten und Stoppen eines Audiostreams .

Opcode Argumente GATT-Unterverfahren Beschreibung
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Schreiben Sie mit Antwort und erwarten Sie eine zusätzliche Statusbenachrichtigung über die AudioStatusPoint -Eigenschaft. Weist das Peripheriegerät an, den Codec zurückzusetzen und die Wiedergabe von Frame 0 zu starten. Das Codec-Feld gibt die Codec-ID an, die für diese Wiedergabe verwendet werden soll. Das Codec-Feld ist beispielsweise „1“ für G.722 bei 16 kHz.

Das Audiotyp-Bitfeld gibt die im Stream vorhandenen Audiotypen an:
  • 0 – Unbekannt
  • 1 - Klingelton
  • 2 - Telefonanruf
  • 3 – Medien
Das Feld „otherstate“ gibt an, ob die andere Seite der binauralen Geräte verbunden ist. Der Feldwert ist 1, wenn das andere Peripheriegerät angeschlossen ist, andernfalls ist der Wert 0.

Das Peripheriegerät darf keine Verbindungsaktualisierungen anfordern, bevor ein «Stop» -Opcode empfangen wurde.
2 «Stop» Keiner Schreiben Sie mit Antwort und erwarten Sie eine zusätzliche Statusbenachrichtigung über die AudioStatusPoint -Eigenschaft. Weist das Peripheriegerät an, die Audiowiedergabe zu stoppen. Nach diesem Stopp sollte eine neue Audio-Setup-Sequenz eingeleitet werden, um das Audio erneut zu rendern.
3 «Status»
  • uint8_t connected
Schreiben Sie ohne Antwort Informiert das angeschlossene Peripheriegerät darüber, dass auf dem anderen Peripheriegerät eine Statusaktualisierung vorliegt. Das verbundene Feld gibt die Art der Aktualisierung an:
  • 0 – Andere Peripheriegeräte nicht angeschlossen
  • 1 – Anderes Peripheriegerät angeschlossen
  • 2 – Bei beiden Verbindungen ist eine LE-Verbindungsparameteraktualisierung aufgetreten

AudioStatusPoint

Statusberichtsfeld für den Audiokontrollpunkt

Opcodes Beschreibung
0 Status OK
-1 Unbekannter Befehl
-2 Ungültige Parameter

Werbung für ASHA GATT Service

Die Dienst-UUID muss im Ankündigungspaket enthalten sein. Entweder im Advertisement- oder Scan-Antwort-Frame müssen die Peripheriegeräte über Servicedaten verfügen:

Byte-Offset Name Beschreibung
0 AD-Länge >= 0x09
1 AD-Typ 0x16 (Dienstdaten – 16-Bit-UUID)
2-3 Dienst-UUID 0xFDF0 (Little-Endian)

Hinweis: Dies ist eine temporäre ID.
4 Protokollversion 0x01
5 Fähigkeit
  • 0 – linke (0) oder rechte (1) Seite
  • 1 – Einzel- (0) oder Dual-Geräte (1).
  • 2 – Gerät unterstützt CSIS (<0: nicht unterstützt, 1: unterstützt)
  • 3-7 - reserviert. Diese Bits müssen Null sein.
6-9 Gekürzte HiSyncID Vier niedrigstwertige Bytes der HiSyncId . Diese Bytes sollten der zufälligste Teil der ID sein.

Die Peripheriegeräte müssen über den Datentyp „Complete Local Name“ verfügen, der den Namen des Hörgeräts angibt. Dieser Name wird auf der Benutzeroberfläche des Mobilgeräts verwendet, damit der Benutzer das richtige Gerät auswählen kann. Der Name darf nicht den linken oder rechten Kanal angeben, da diese Informationen in DeviceCapabilities bereitgestellt werden.

Wenn die Peripheriegeräte die Namens- und ASHA-Dienstdatentypen in denselben Rahmentyp (ADV oder SCAN RESP) einfügen, müssen die beiden Datentypen („Vollständiger lokaler Name“ und „Dienstdaten für ASHA-Dienst“) im selben Rahmen erscheinen. Dadurch erhält der Mobilgerätescanner beide Daten im selben Scanergebnis.

Beim ersten Pairing ist es wichtig, dass die Peripheriegeräte schnell genug Werbung machen, damit das Mobilgerät die Peripheriegeräte schnell erkennt und eine Verbindung zu ihnen herstellt.

Synchronisierung linker und rechter Peripheriegeräte

Um mit Bluetooth auf Android-Mobilgeräten zu arbeiten, sind Peripheriegeräte dafür verantwortlich, dass diese synchronisiert werden. Die Wiedergabe auf den linken und rechten Peripheriegeräten muss zeitlich synchronisiert sein. Beide Peripheriegeräte müssen gleichzeitig Audio-Samples von der Quelle abspielen.

Peripheriegeräte können ihre Zeit synchronisieren, indem sie jedem Paket der Audio-Nutzlast eine Sequenznummer voranstellen. Die Zentrale garantiert, dass Audiopakete, die gleichzeitig auf jedem Peripheriegerät abgespielt werden sollen, die gleiche Sequenznummer haben. Die Sequenznummer erhöht sich nach jedem Audiopaket um eins. Jede Sequenznummer ist 8 Bit lang, sodass sich die Sequenznummern nach 256 Audiopaketen wiederholen. Da die Größe und Abtastrate jedes Audiopakets für jede Verbindung festgelegt ist, können die beiden Peripheriegeräte die relative Spielzeit ableiten. Weitere Informationen zum Audiopaket finden Sie unter Format und Timing des Audiopakets .

Die Zentrale hilft, indem sie den binauralen Geräten Auslöser bereitstellt, wenn die Synchronisierung erfolgen muss. Diese Auslöser informieren jedes Peripheriegerät über den Status seines gekoppelten Peripheriegeräts, wenn ein Vorgang stattfindet, der sich auf die Synchronisierung auswirken könnte. Die Auslöser sind:

  • Im Rahmen des «Start» -Befehls von AudioControlPoint wird der aktuelle Verbindungsstatus der anderen Seite der binauralen Geräte ausgegeben.
  • Immer wenn auf einem Peripheriegerät eine Verbindung, eine Trennung oder eine Aktualisierung der Verbindungsparameter erfolgt, wird der «Status» -Befehl von AudioControlPoint an die andere Seite der binauralen Geräte gesendet.

Format und Timing des Audiopakets

Durch das Packen von Audio-Frames (Sample-Blöcken) in Pakete kann das Hörgerät das Timing von den Timing-Ankern der Verbindungsschicht ableiten. Um die Implementierung zu vereinfachen:

  • Ein Audio-Frame sollte zeitlich immer mit dem Verbindungsintervall übereinstimmen. Wenn das Verbindungsintervall beispielsweise 20 ms und die Abtastrate 16 kHz beträgt, muss der Audiorahmen 320 Abtastwerte enthalten.
  • Die Abtastraten im System sind auf Vielfache von 8 kHz beschränkt, um unabhängig von der Rahmenzeit oder dem Verbindungsintervall immer eine ganzzahlige Anzahl von Abtastwerten in einem Frame zu haben.
  • Ein Sequenzbyte muss Audioframes voranstellen. Das Sequenzbyte muss umlaufend gezählt werden und es dem Peripheriegerät ermöglichen, eine Pufferfehlanpassung oder einen Pufferunterlauf zu erkennen.
  • Ein Audio-Frame muss immer in ein einzelnes LE-Paket passen. Der Audio-Frame wird als separates L2CAP-Paket gesendet. Die Größe der LE LL PDU beträgt:
    Audio-Nutzlastgröße + 1 (Sequenzzähler) + 6 (4 für L2CAP-Header, 2 für SDU)
  • Ein Verbindungsereignis sollte immer groß genug sein, um zwei Audiopakete und zwei leere Pakete für eine ACK zu enthalten, um Bandbreite für erneute Übertragungen zu reservieren. Beachten Sie, dass das Audiopaket möglicherweise durch den Bluetooth-Controller der Zentrale fragmentiert wird. Das Peripheriegerät muss in der Lage sein, mehr als 2 fragmentierte Audiopakete pro Verbindungsereignis zu empfangen.

Um der Zentrale etwas Flexibilität zu geben, wird die G.722-Paketlänge nicht angegeben. Die G.722-Paketlänge kann sich je nach dem von der Zentrale festgelegten Verbindungsintervall ändern.

Das G.722-Ausgabeoktettformat verweist auf den Rec. ITU-T G.722 (09/2012) Abschnitt 1.4.4 „Multiplexer“

Für alle Codecs, die ein Peripheriegerät unterstützt, muss das Peripheriegerät die folgenden Verbindungsparameter unterstützen. Dies ist eine nicht erschöpfende Liste von Konfigurationen, die die Zentrale implementieren kann.

Codec Bitrate Verbindungsintervall CE-Länge (1M/2M PHY) Größe der Audio-Nutzlast
G.722 bei 16 kHz 64 kbit/s 20 ms 5000/3750 uns 160 Byte

Starten und Stoppen eines Audiostreams

Bevor ein Audiostream gestartet wird, fragt die Zentrale die Peripheriegeräte ab und legt einen gemeinsamen Nenner-Codec fest. Die Stream-Einrichtung läuft dann in der folgenden Reihenfolge ab:

  1. PSM und optional RenderDelay werden gelesen. Diese Werte können von der Zentrale zwischengespeichert werden.
  2. Der CoC L2CAP-Kanal ist geöffnet – das Peripheriegerät gewährt zunächst 8 Credits.
  3. Es wird ein Verbindungsupdate ausgegeben, um die Verbindung auf die für den gewählten Codec erforderlichen Parameter umzustellen. Die Zentrale kann diese Verbindungsaktualisierung vor der CoC-Verbindung im vorherigen Schritt durchführen.
  4. Sowohl der zentrale als auch der periphere Host warten auf das Ereignis „Update abgeschlossen“.
  5. Starten Sie den Audio-Encoder neu und setzen Sie die Paketsequenzanzahl auf 0 zurück. Am AudioControlPoint wird ein «Start» -Befehl mit den relevanten Parametern ausgegeben. Die Zentrale wartet vor dem Streaming auf eine erfolgreiche Statusmeldung des vorherigen «Start» -Befehls vom Peripheriegerät. Diese Wartezeit gibt dem Peripheriegerät Zeit, seine Audiowiedergabe-Pipeline vorzubereiten. Während des Audio-Streamings sollte das Replikat bei jedem Verbindungsereignis verfügbar sein, auch wenn die aktuelle Replikatlatenz möglicherweise ungleich Null ist.
  6. Das Peripheriegerät nimmt das erste Audiopaket aus seiner internen Warteschlange (Sequenznummer 0) und spielt es ab.

Die Zentrale gibt den Befehl „Stopp“ aus, um den Audiostream zu schließen. Nach diesem Befehl muss das Peripheriegerät nicht bei jedem Verbindungsereignis verfügbar sein. Um das Audio-Streaming neu zu starten, führen Sie die obige Sequenz ab Schritt 5 durch. Wenn die Zentrale kein Audio-Streaming durchführt, sollte sie dennoch eine LE-Verbindung für GATT-Dienste aufrechterhalten.

Das Peripheriegerät darf keine Verbindungsaktualisierung an die Zentrale senden. Um Strom zu sparen, sendet die Zentrale möglicherweise eine Verbindungsaktualisierung an das Peripheriegerät, wenn dieses kein Audio streamt.