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 mempertahankan aliran audio yang stabil, bahkan saat paket 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 pada 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 yang terlihat pada Gambar 1 . Sistem audio Bluetooth melihat periferal kiri dan kanan sebagai audio sink tunggal. Jika periferal hilang, karena kecocokan monaural atau kehilangan koneksi, maka 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. Mempertahankan koneksi memungkinkan komunikasi data ke server GATT yang berada di periferal.

Saat memasangkan dan menghubungkan alat bantu dengar, pusat harus:

  • Melacak periferal kiri dan kanan yang lebih baru dipasangkan.
  • Asumsikan periferal sedang digunakan jika ada pasangan yang valid. Pusat harus mencoba menghubungkan atau menyambung kembali dengan perangkat yang dipasangkan saat sambungan terputus.
  • Asumsikan periferal tidak lagi digunakan jika pasangan dihapus.

Dalam kasus di atas, pemasangan mengacu pada tindakan mendaftarkan seperangkat 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 dianjurkan.
  • memiliki dukungan pusat setidaknya 2 tautan LE simultan dengan parameter seperti yang dijelaskan dalam format dan waktu paket Audio .
  • memiliki dukungan periferal setidaknya 1 tautan LE dengan parameter yang dijelaskan dalam format dan waktu paket Audio .
  • memiliki kontrol aliran berbasis kredit LE [BT Vol 3, Bagian A, Sec 10.1]. Perangkat harus mendukung ukuran MTU dan MPS minimal 167 byte pada CoC dan dapat menyangga hingga 8 paket.
  • memiliki ekstensi panjang data LE [BT Vol 6, Bagian B, Sec 5.1.9] dengan muatan minimal 167 byte.
  • minta perangkat pusat mendukung Perintah Pembaruan Koneksi HCI LE dan mematuhi parameter maximum_CE_Length dan minimum_CE_Length bukan nol.
  • minta pusat mempertahankan 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 yang diperlukan untuk spesifikasi ini. Ini memungkinkan pusat mengoptimalkan penjadwal waktunya saat menghitung jumlah waktu yang dibutuhkan untuk menerima bingkai.

Sangat disarankan agar pusat dan periferal mendukung 2MB PHY seperti yang ditentukan dalam spesifikasi BT 5.0. Pusat harus mendukung tautan audio setidaknya 64 kbit/dtk 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 mengimplementasikan layanan server GATT Streaming Audio untuk Alat Bantu Dengar (ASHA) yang dijelaskan di bawah ini. Periferal akan mengiklankan layanan ini ketika dalam mode umum yang dapat ditemukan untuk membiarkan pusat mengenali audio sink. Setiap operasi streaming audio LE memerlukan enkripsi. Streaming audio BLE terdiri dari karakteristik berikut:

Ciri Properti Keterangan
PropertiHanya Baca 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. Opcode adalah:
  • 0 - Status Oke
  • -1 - Perintah tidak diketahui
  • -2 - Parameter ilegal
Volume Tulis tanpa Respon Byte antara -128 dan 0 menunjukkan jumlah redaman untuk diterapkan pada sinyal audio yang dialirkan, mulai dari -48 dB hingga 0 dB. Pengaturan -128 harus ditafsirkan sebagai sepenuhnya teredam, yaitu level volume non-mute terendah adalah -127 yang setara dengan -47.625 dB redaman. Pada pengaturan 0, nada sinus rel-ke-rel yang dialirkan harus mewakili input yang setara dengan 100 dBSPL pada alat bantu dengar. Pusat harus mengalirkan dalam skala penuh nominal dan menggunakan variabel ini untuk mengatur tingkat presentasi yang diinginkan di periferal.
LE_PSM_OUT Membaca PSM digunakan untuk menghubungkan saluran audio. Untuk dipilih dari rentang dinamis [BT Vol 3, Bagian A, Sec 4.22]

UUID yang ditetapkan untuk layanan dan karakteristik:

UUID Layanan : {0xFDF0}

Ciri UUID
PropertiHanya Baca {6333651e-c481-4a3e-9169-7c902aad37bb}
Titik Kontrol Audio {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
AudioStatus {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.

PropertiHanya Baca

ReadOnlyProperties memiliki nilai berikut:

Byte Keterangan
0 Versi - harus 0x01
1 Lihat Kemampuan Perangkat .
2-9 Lihat HiSyncId .
10 Lihat Peta Fitur .
11-12 Render Penundaan. Ini adalah waktu, dalam milidetik, dari saat periferal menerima bingkai audio hingga periferal membuat output. Byte ini dapat digunakan untuk menunda video untuk 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 diset ke 0.

Kemampuan Perangkat

Sedikit Keterangan
0 Sisi perangkat (Kiri: 0, Kanan: 1).
1 Monaural (0) / Binaural (1). Menunjukkan apakah perangkat berdiri sendiri dan menerima data mono, atau apakah perangkat merupakan bagian dari satu set.
2-7 Dicadangkan (diatur ke 0).

HiSyncID

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

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

Peta Fitur

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

ID Codec

Jika bit disetel, maka codec tertentu itu adalah dukungan.

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

Titik Kontrol Audio

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

kode op Argumen Keterangan
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Menginstruksikan periferal untuk mereset codec dan memulai pemutaran frame 0. Bidang codec menunjukkan ID codec yang akan digunakan untuk pemutaran ini. Misalnya, bidang codec adalah "1" untuk G.722 pada 16k Hz.

Bidang bit jenis audio menunjukkan jenis audio yang ada dalam aliran:
  • 0 - Tidak diketahui
  • 1 - Nada Dering
  • 2 - Panggilan telepon
  • 3 - Media
Bidang otherstate menunjukkan apakah sisi lain dari perangkat binaural terhubung. Nilai bidang adalah 1 ketika perangkat periferal lain terhubung, jika tidak, nilainya adalah 0.

Periferal tidak akan meminta pembaruan koneksi sebelum opcode «Stop» diterima.
2 «Stop» Tidak ada Menginstruksikan periferal untuk menghentikan rendering audio. Urutan pengaturan audio baru harus dimulai setelah penghentian ini untuk merender audio lagi.
3 «Status»
  • uint8_t connected
Memberi tahu periferal yang terhubung bahwa ada pembaruan status pada periferal lain. Bidang yang terhubung menunjukkan jenis pembaruan:
  • 0 - Periferal lainnya terputus
  • 1 - Periferal lainnya terhubung
  • 2 - Pembaruan Parameter Koneksi LE terjadi di kedua koneksi

Iklan untuk Layanan ASHA GATT

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

Offset byte Nama Keterangan
0 Panjang IKLAN >= 0x09
1 Jenis IKLAN 0x16 (Data Layanan - UUID 16-bit)
2-3 Layanan UUID 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-7 - dipesan. 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 menempatkan nama dan tipe data layanan ASHA dalam tipe bingkai yang sama (ADV atau SCAN RESP), maka kedua tipe data tersebut ("Nama Lokal Lengkap" dan "Data Layanan untuk layanan ASHA") akan muncul dalam bingkai yang sama. Ini memungkinkan pemindai perangkat seluler mendapatkan kedua data dalam hasil pemindaian yang sama.

Selama pemasangan awal, penting bahwa periferal beriklan dengan kecepatan yang cukup cepat agar perangkat seluler dapat dengan cepat menemukan periferal dan mengikatnya.

Menyinkronkan perangkat periferal kiri dan kanan

Untuk bekerja dengan Bluetooth di perangkat seluler Android, perangkat periferal bertanggung jawab untuk memastikan bahwa mereka disinkronkan. Pemutaran di perangkat periferal kiri dan kanan perlu disinkronkan tepat waktu. Kedua perangkat periferal harus memutar ulang 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 pada setiap periferal memiliki nomor urut yang sama. Nomor urut bertambah satu setelah setiap paket audio. Setiap nomor urut panjangnya 8-bit, sehingga nomor urut akan berulang setelah 256 paket audio. Karena setiap ukuran paket audio dan laju sampel ditetapkan untuk setiap koneksi, 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 memengaruhi sinkronisasi. Pemicunya adalah:

  • Sebagai bagian dari perintah «Start» AudioControlPoint, status koneksi saat ini dari sisi lain perangkat binaural diberikan.
  • Setiap kali ada koneksi, pemutusan, atau operasi pembaruan parameter koneksi pada satu periferal, perintah «Status» 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 waktu lapisan tautan. Untuk menyederhanakan implementasi:

  • Bingkai audio harus selalu cocok dengan interval koneksi dalam waktu. Misalnya, jika interval koneksi adalah 20 ms dan laju sampel 16 kHz, maka bingkai audio harus berisi 320 sampel.
  • Kecepatan sampel dalam sistem dibatasi hingga kelipatan 8kHz untuk selalu memiliki jumlah sampel bilangan bulat dalam bingkai terlepas dari waktu bingkai atau interval koneksi.
  • Sebuah byte urutan harus menambahkan bingkai audio. Byte urutan harus dihitung dengan wrap-around dan memungkinkan periferal untuk mendeteksi ketidakcocokan buffer atau underflow.
  • Bingkai audio harus selalu masuk ke dalam satu paket LE. Bingkai audio akan dikirim sebagai paket L2CAP terpisah. Ukuran LE LL PDU harus:
    ukuran muatan audio + 1 (penghitung urutan) + 6 (4 untuk header L2CAP, 2 untuk SDU)
  • Peristiwa koneksi harus selalu cukup besar untuk memuat 2 paket audio dan 2 paket kosong untuk ACK guna cadangan 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 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 (9/2012) bagian 1.4.4 "Multiplexer"

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

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

Memulai dan menghentikan streaming audio

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

  1. PSM, dan secara opsional, RenderDelay dibaca. Nilai-nilai ini dapat di-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 dan periferal menunggu acara pembaruan lengkap.
  5. Mulai ulang encoder audio, dan setel ulang jumlah urutan paket ke 0. Perintah «Start» dengan parameter yang relevan dikeluarkan pada AudioControlPoint. Pusat menunggu pemberitahuan status yang berhasil dari perintah «Start» sebelumnya dari periferal sebelum streaming. Penantian ini memberikan waktu periferal untuk menyiapkan saluran 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 di setiap peristiwa koneksi. Untuk memulai ulang streaming audio, lakukan urutan di atas, mulai dari langkah 5. Saat pusat tidak melakukan streaming audio, pusat tersebut harus tetap mempertahankan koneksi LE untuk layanan GATT.

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