Dukungan Audio Alat Bantu Dengar Menggunakan Bluetooth LE

Perangkat alat bantu dengar (HA) dapat meningkatkan aksesibilitas pada perangkat seluler yang diberdayakan Android dengan menggunakan saluran L2CAP (CoC) berorientasi koneksi melalui Bluetooth Low Energy (BLE). CoC menggunakan buffer elastis dari beberapa paket audio untuk menjaga aliran audio tetap stabil, bahkan ketika ada paket yang hilang. Buffer ini memberikan kualitas audio untuk perangkat alat bantu dengar dengan mengorbankan latensi.

Desain CoC mengacu pada Spesifikasi Inti Bluetooth Versi 5 (BT). Agar tetap selaras dengan spesifikasi inti, semua nilai multi-byte di halaman ini harus dibaca sebagai little-endian.

Terminologi

  • Central - perangkat Android yang memindai iklan melalui Bluetooth.
  • Periferal - alat bantu dengar yang mengirimkan paket iklan melalui Bluetooth.

Topologi jaringan dan arsitektur sistem

Saat menggunakan CoC untuk alat bantu dengar, topologi jaringan mengasumsikan satu pusat dan dua periferal, satu kiri dan satu kanan, seperti terlihat pada Gambar 1 . Sistem audio Bluetooth memandang periferal kiri dan kanan sebagai satu wastafel audio. Jika periferal hilang, karena kecocokan monaural atau hilangnya koneksi, maka periferal pusat akan mencampur saluran audio kiri dan kanan dan mentransmisikan audio ke periferal yang tersisa. Jika pusat kehilangan koneksi ke kedua periferal, maka pusat menganggap tautan ke wastafel audio hilang. Dalam kasus tersebut, pusat merutekan audio ke output lain.


Gambar 1. Topologi untuk memasangkan alat bantu dengar dengan perangkat seluler Android menggunakan CoC melalui BLE

Ketika pusat tidak mengalirkan data audio ke periferal dan dapat mempertahankan koneksi BLE, pusat tidak boleh memutuskan sambungan dari periferal. Menjaga koneksi memungkinkan komunikasi data ke server GATT yang berada di periferal.

Saat memasangkan dan menyambungkan alat bantu dengar, pusat harus:

  • Pantau terus periferal kiri dan kanan terbaru yang dipasangkan.
  • Asumsikan periferal sedang digunakan jika ada pasangan yang valid. Pusat harus mencoba menyambung atau menyambung kembali dengan perangkat yang dipasangkan ketika sambungan terputus.
  • Asumsikan periferal tidak lagi digunakan jika pasangan dihapus.

Dalam kasus di atas, pemasangan mengacu pada tindakan mendaftarkan satu set alat bantu dengar dengan UUID tertentu dan penanda kiri/kanan di OS, bukan proses pemasangan Bluetooth.

Persyaratan sistem

Untuk menerapkan CoC dengan benar demi pengalaman pengguna yang baik, sistem Bluetooth di perangkat pusat dan periferal harus:

  • menerapkan pengontrol BT 4.2 atau lebih tinggi yang sesuai. Koneksi Aman LE sangat disarankan.
  • memiliki dukungan pusat setidaknya 2 tautan LE secara simultan dengan parameter seperti yang dijelaskan dalam format dan waktu paket Audio .
  • memiliki dukungan periferal minimal 1 link LE dengan parameter yang dijelaskan dalam format dan waktu paket Audio .
  • memiliki kontrol aliran berbasis kredit LE [BT Vol 3, Bagian A, Bagian 10.1]. Perangkat harus mendukung ukuran MTU dan MPS minimal 167 byte pada CoC dan mampu melakukan buffering hingga 8 paket.
  • memiliki ekstensi panjang data LE [BT Vol 6, Part B, Sec 5.1.9] dengan payload minimal 167 byte.
  • minta perangkat pusat mendukung Perintah Pembaruan Koneksi HCI LE dan mematuhi parameter maximum_CE_Length dan minimum_CE_Length yang bukan nol.
  • minta pusat menjaga throughput data untuk dua koneksi LE CoC ke dua periferal berbeda dengan interval koneksi dan ukuran muatan dalam format dan waktu paket Audio .
  • minta periferal mengatur parameter MaxRxOctets dan MaxRxTime dalam bingkai LL_LENGTH_REQ atau LL_LENGTH_RSP menjadi nilai terkecil yang diperlukan untuk spesifikasi ini. Hal ini memungkinkan pusat mengoptimalkan penjadwal waktunya ketika menghitung jumlah waktu yang dibutuhkan untuk menerima frame.

Sangat disarankan agar pusat dan periferal mendukung 2MB PHY seperti yang ditentukan dalam spesifikasi BT 5.0. Pusat harus mendukung tautan audio minimal 64 kbit/s pada PHY 1M dan 2M. PHY jarak jauh BLE tidak boleh digunakan.

CoC menggunakan mekanisme Bluetooth standar untuk enkripsi lapisan tautan dan lompatan frekuensi.

Layanan ASHA GATT

Periferal harus menerapkan layanan server GATT Audio Streaming untuk Alat Bantu Dengar (ASHA) yang dijelaskan di bawah. Periferal akan mengiklankan layanan ini ketika dalam mode umum dapat ditemukan agar pusat dapat mengenali wastafel audio. Setiap operasi streaming audio LE memerlukan enkripsi. Streaming audio BLE terdiri dari karakteristik berikut:

Ciri Properti Keterangan
Properti ReadOnly Membaca Lihat ReadOnlyProperties .
Titik Kontrol Audio Menulis dan Menulis tanpa Respon Titik kontrol untuk aliran audio. Lihat AudioControlPoint .
Titik Status Audio Baca/Beritahu Bidang laporan status untuk titik kontrol audio. Lihat AudioStatusPoint
Volume Menulis tanpa Respon Byte antara -128 dan 0 menunjukkan jumlah redaman yang diterapkan pada sinyal audio yang dialirkan, berkisar antara -48 dB hingga 0 dB. Setting -128 diartikan sebagai full muted, yaitu level volume terendah yang tidak mute adalah -127 yang setara dengan redaman -47.625 dB. Pada pengaturan 0, nada sinus rel-ke-rel yang dialirkan harus mewakili setara input 100 dBSPL pada alat bantu dengar. Pusat harus melakukan streaming dalam skala nominal penuh dan menggunakan variabel ini untuk mengatur tingkat presentasi yang diinginkan di perangkat.
LE_PSM_OUT Membaca PSM digunakan untuk menghubungkan saluran audio. Untuk dipilih dari rentang dinamis [BT Vol 3, Bagian A, Bagian 4.22]

UUID yang ditetapkan untuk layanan dan karakteristiknya:

UUID Layanan : {0xFDF0}

Ciri UUID
Properti ReadOnly {6333651e-c481-4a3e-9169-7c902aad37bb}
Titik Kontrol Audio {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
Status Audio {38663f1a-e711-4cac-b641-326b56404837}
Volume {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

Selain layanan ASHA GATT, periferal juga harus menerapkan Layanan Informasi Perangkat agar pusat dapat mendeteksi nama pabrikan dan nama perangkat periferal.

Properti ReadOnly

ReadOnlyProperties memiliki nilai berikut:

byte Keterangan
0 Versi - harus 0x01
1 Lihat Kemampuan Perangkat .
2-9 Lihat HiSyncId .
10 Lihat FeatureMap .
11-12 Penundaan Render. Ini adalah waktu, dalam milidetik, sejak perangkat menerima bingkai audio hingga perangkat memberikan output. Byte ini dapat digunakan untuk menunda video agar disinkronkan dengan audio.
13-14 Dicadangkan untuk penggunaan di masa mendatang. Inisialisasi ke nol.
15-16 ID Codec yang didukung. Ini adalah bitmask ID codec yang didukung. Lokasi 1 dalam bit sesuai dengan codec yang didukung. Misalnya, 0x0002 menunjukkan bahwa G.722 pada 16 kHz didukung. Semua bit lainnya harus disetel ke 0.

Kemampuan Perangkat

Sedikit Keterangan
0 Sisi perangkat (0: kiri, 1: kanan)
1 Menunjukkan apakah perangkat berdiri sendiri dan menerima data mono, atau jika perangkat merupakan bagian dari kumpulan (0: monaural, 1: binaural)
2 Perangkat mendukung CSIS (0: tidak didukung, 1: didukung)
3-7 Dicadangkan (disetel ke 0)

HiSyncID

Bidang ini harus unik untuk semua perangkat binaural namun harus sama untuk perangkat kiri dan kanan.

byte Keterangan
0-1 ID pabrikan. Ini adalah Pengidentifikasi Perusahaan yang ditugaskan oleh BTSIG.
2-7 ID unik yang mengidentifikasi set alat bantu dengar. ID ini harus disetel sama pada periferal kiri dan kanan.

Peta Fitur

Sedikit Keterangan
0 Streaming output audio LE CoC didukung (Ya/Tidak).
1-7 Dicadangkan (disetel ke 0).

ID Kodek

Jika bitnya disetel, maka codec tertentu tersebut didukung.

ID/nomor bit Codec dan kecepatan sampel Kecepatan bit yang diperlukan Waktu bingkai Wajib di pusat (C) atau periferal (P)
0 Disimpan Disimpan Disimpan Disimpan
1 G.722 @ 16kHz 64 kbit/dtk Variabel C dan P
2-15 sudah dipesan.
0 juga dicadangkan.

Titik Kontrol Audio

Titik kontrol ini tidak dapat digunakan ketika LE CoC ditutup. Lihat Memulai dan menghentikan streaming audio untuk deskripsi prosedur.

Kode op Argumen Sub-prosedur GATT Keterangan
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Tulis dengan respons, dan harapkan pemberitahuan status tambahan melalui karakteristik AudioStatusPoint . Memerintahkan periferal untuk mereset codec dan memulai pemutaran frame 0. Bidang codec menunjukkan ID codec yang akan digunakan untuk pemutaran ini. Misalnya, kolom codec adalah "1" untuk G.722 pada 16k Hz.

Bidang bit jenis audio menunjukkan jenis audio yang ada di aliran:
  • 0 - Tidak Diketahui
  • 1 - Nada dering
  • 2 - Panggilan Telepon
  • 3 - Media
Bidang otherstate menunjukkan apakah sisi lain dari perangkat binaural terhubung. Nilai bidangnya adalah 1 ketika perangkat periferal lain tersambung, jika tidak maka nilainya adalah 0.

Periferal tidak boleh meminta pembaruan koneksi sebelum opcode «Stop» diterima.
2 «Stop» Tidak ada Tulis dengan respons, dan harapkan pemberitahuan status tambahan melalui karakteristik AudioStatusPoint . Menginstruksikan periferal untuk berhenti merender audio. Urutan pengaturan audio baru harus dimulai setelah penghentian ini untuk merender audio lagi.
3 «Status»
  • uint8_t connected
Menulis tanpa tanggapan Menginformasikan periferal yang terhubung bahwa ada pembaruan status pada periferal lainnya. Bidang terhubung menunjukkan jenis pembaruan:
  • 0 - Periferal lain terputus
  • 1 - Periferal lain tersambung
  • 2 - Pembaruan Parameter Koneksi LE terjadi pada koneksi mana pun

Titik Status Audio

Bidang laporan status untuk titik kontrol audio

Opcode Keterangan
0 Status oke
-1 Perintah tidak diketahui
-2 Parameter ilegal

Iklan untuk Layanan ASHA GATT

UUID layanan harus ada dalam paket iklan. Baik dalam iklan atau bingkai respons pemindaian, periferal harus memiliki Data Layanan:

Pengimbangan byte Nama Keterangan
0 Panjang IKLAN >= 0x09
1 Tipe IKLAN 0x16 (Data Layanan - UUID 16-bit)
2-3 UUID Layanan 0xFDF0 (little-endian)

Catatan: Ini adalah ID sementara.
4 Versi Protokol 0x01
5 Kemampuan
  • 0 - sisi kiri (0) atau kanan (1).
  • 1 - perangkat tunggal (0) atau ganda (1).
  • 2 - perangkat mendukung CSIS (<0: tidak didukung, 1: didukung)
  • 3-7 - dilindungi undang-undang. Bit-bit ini harus nol.
6-9 HiSyncID terpotong Empat byte paling tidak signifikan dari HiSyncId . Byte ini harus menjadi bagian ID yang paling acak.

Periferal harus memiliki tipe data Nama Lokal Lengkap yang menunjukkan nama alat bantu dengar. Nama ini akan digunakan pada antarmuka pengguna perangkat seluler sehingga pengguna dapat memilih perangkat yang tepat. Nama tidak boleh menunjukkan saluran kiri atau kanan karena informasi ini disediakan di DeviceCapabilities .

Jika periferal memasukkan nama dan tipe data layanan ASHA dalam tipe frame yang sama (ADV atau SCAN RESP), maka kedua tipe data tersebut ("Nama Lokal Lengkap" dan "Data Layanan untuk layanan ASHA") akan muncul dalam frame yang sama. Ini memungkinkan pemindai perangkat seluler mendapatkan kedua data dalam hasil pemindaian yang sama.

Selama pemasangan awal, periferal harus beriklan dengan kecepatan yang cukup cepat agar perangkat seluler dapat dengan cepat menemukan periferal dan terhubung dengannya.

Menyinkronkan perangkat periferal kiri dan kanan

Untuk bekerja dengan Bluetooth di perangkat seluler Android, perangkat periferal bertanggung jawab untuk memastikan sinkronisasinya. Pemutaran di perangkat periferal kiri dan kanan perlu disinkronkan tepat waktu. Kedua perangkat periferal harus memutar sampel audio dari sumber secara bersamaan.

Perangkat periferal dapat menyinkronkan waktunya dengan menggunakan nomor urut yang ditambahkan ke setiap paket muatan audio. Pusat menjamin bahwa paket audio yang dimaksudkan untuk diputar pada waktu yang sama di setiap periferal memiliki nomor urut yang sama. Nomor urut bertambah satu setelah setiap paket audio. Setiap nomor urut memiliki panjang 8-bit, sehingga nomor urut akan berulang setelah 256 paket audio. Karena setiap ukuran paket audio dan laju sampel ditetapkan untuk setiap sambungan, kedua periferal dapat menyimpulkan waktu pemutaran relatif. Untuk informasi lebih lanjut tentang paket audio, lihat Format dan waktu paket audio .

Pusat membantu dengan menyediakan pemicu ke perangkat binaural ketika sinkronisasi mungkin perlu dilakukan. Pemicu ini menginformasikan setiap periferal tentang status perangkat periferal yang dipasangkan setiap kali ada operasi yang dapat mempengaruhi sinkronisasi. Pemicunya adalah:

  • Sebagai bagian dari perintah «Start» AudioControlPoint, status koneksi saat ini dari sisi lain perangkat binaural diberikan.
  • Setiap kali ada operasi koneksi, pemutusan, atau pembaruan parameter koneksi pada satu periferal, perintah «Status» dari AudioControlPoint dikirim ke sisi lain perangkat binaural.

Format dan waktu paket audio

Mengemas bingkai audio (blok sampel) ke dalam paket memungkinkan alat bantu dengar memperoleh pengaturan waktu dari jangkar pengaturan waktu lapisan tautan. Untuk menyederhanakan implementasi:

  • Bingkai audio harus selalu sesuai dengan interval waktu koneksi. Misalnya, jika interval koneksi adalah 20 ms dan laju sampel adalah 16 kHz, maka bingkai audio harus berisi 320 sampel.
  • Kecepatan sampel dalam sistem dibatasi hingga kelipatan 8kHz agar selalu memiliki jumlah sampel bilangan bulat dalam satu frame tanpa memperhatikan waktu frame atau interval koneksi.
  • Sebuah byte urutan harus menambahkan bingkai audio. Byte urutan harus dihitung secara menyeluruh dan memungkinkan periferal mendeteksi ketidakcocokan buffer atau kekurangan aliran.
  • Sebuah frame audio harus selalu masuk ke dalam satu paket LE. Bingkai audio harus dikirim sebagai paket L2CAP terpisah. Besaran LE LL PDU adalah:
    ukuran muatan audio + 1 (penghitung urutan) + 6 (4 untuk header L2CAP, 2 untuk SDU)
  • Peristiwa koneksi harus selalu cukup besar untuk menampung 2 paket audio dan 2 paket kosong agar ACK dapat mencadangkan bandwidth untuk transmisi ulang. Perhatikan bahwa paket audio mungkin terfragmentasi oleh pengontrol Bluetooth pusat. Periferal harus dapat menerima lebih dari 2 paket audio terfragmentasi per peristiwa koneksi.

Untuk memberikan fleksibilitas pada pusat, panjang paket G.722 tidak ditentukan. Panjang paket G.722 dapat berubah berdasarkan interval koneksi yang ditetapkan oleh pusat.

Format oktet keluaran G.722 merujuk pada Rec. ITU-T G.722 (09/2012) bagian 1.4.4 "Multiplexer"

Untuk semua codec yang didukung periferal, periferal tersebut harus mendukung parameter koneksi di bawah ini. Ini adalah daftar konfigurasi yang tidak lengkap yang dapat diterapkan oleh pemerintah pusat.

Kodek Kecepatan bit Interval koneksi Panjang CE (1M/2M PHY) Ukuran muatan audio
G.722 @ 16kHz 64 kbit/dtk 20 ms 5000/3750 kita 160 byte

Memulai dan menghentikan aliran audio

Sebelum memulai streaming audio, pusat menanyakan periferal dan menetapkan codec penyebut yang umum. Pengaturan aliran kemudian dilanjutkan melalui urutan berikut:

  1. PSM, dan secara opsional, RenderDelay dibaca. Nilai-nilai ini mungkin disimpan dalam cache oleh pusat.
  2. Saluran CoC L2CAP dibuka – periferal akan memberikan 8 kredit pada awalnya.
  3. Pembaruan koneksi dikeluarkan untuk mengalihkan tautan ke parameter yang diperlukan untuk codec yang dipilih. Pusat dapat melakukan pembaruan koneksi ini sebelum koneksi CoC pada langkah sebelumnya.
  4. Baik host pusat maupun periferal menunggu hingga acara pembaruan selesai.
  5. Nyalakan ulang encoder audio, dan setel ulang jumlah urutan paket ke 0. Perintah «Start» dengan parameter yang relevan dikeluarkan pada AudioControlPoint. Pusat menunggu pemberitahuan status sukses dari perintah «Start» sebelumnya dari periferal sebelum streaming. Penantian ini memberikan waktu bagi periferal untuk mempersiapkan alur pemutaran audionya. Selama streaming audio, replika harus tersedia di setiap peristiwa koneksi meskipun latensi replika saat ini mungkin bukan nol.
  6. Periferal mengambil paket audio pertama dari antrian internalnya (nomor urut 0) dan memutarnya.

Pusat mengeluarkan perintah «Stop» untuk menutup aliran audio. Setelah perintah ini, periferal tidak perlu tersedia pada setiap peristiwa koneksi. Untuk memulai kembali streaming audio, lakukan urutan di atas, dimulai dari langkah 5. Jika pusat tidak melakukan streaming audio, maka pusat harus tetap mempertahankan koneksi LE untuk layanan GATT.

Periferal tidak boleh mengeluarkan pembaruan koneksi ke pusat. Untuk menghemat daya, pusat dapat mengeluarkan pembaruan koneksi ke periferal saat tidak melakukan streaming audio.