Perangkat alat bantu dengar (HA) dapat memiliki aksesibilitas yang lebih baik di perangkat seluler yang didukung Android dengan menggunakan saluran L2CAP berorientasi koneksi (CoC) melalui Bluetooth Hemat Energi (BLE). CoC menggunakan buffer elastis dari beberapa paket audio untuk mempertahankan aliran audio yang stabil, bahkan jika ada paket yang hilang. Buffer ini memberikan kualitas audio untuk perangkat alat bantu dengar dengan mengorbankan latensi.
Desain CoC mereferensikan Spesifikasi Inti Bluetooth Versi 5 (BT). Agar tetap selaras dengan spesifikasi inti, semua nilai multi-byte di halaman ini akan dibaca sebagai little-endian.
Terminologi
- Central - perangkat Android yang memindai iklan melalui Bluetooth.
- Periferal - alat bantu dengar yang mengirim 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 dalam Gambar 1. Sistem audio Bluetooth melihat periferal kiri dan kanan sebagai satu sink audio. Jika periferal hilang, karena kecocokan monaural atau hilangnya koneksi, maka pusat akan memadukan saluran audio kiri dan kanan serta mengirimkan audio ke periferal yang tersisa. Jika pusat kehilangan koneksi ke kedua periferal, pusat akan menganggap link ke sink audio hilang. Dalam kasus tersebut, pusat merutekan audio ke output lain.
Gambar 1. Topologi untuk menyambungkan alat bantu dengar dengan
perangkat seluler Android menggunakan CoC melalui BLE
Jika pusat tidak melakukan streaming data audio ke periferal dan dapat mempertahankan koneksi BLE, pusat tidak boleh terputus dari periferal. Mempertahankan koneksi memungkinkan komunikasi data ke server GATT yang berada di periferal.
Saat menyambungkan dan menghubungkan alat bantu dengar, pusat harus:
- Melacak periferal kiri dan kanan terbaru yang disambungkan.
- Asumsikan periferal sedang digunakan jika ada penyambungan yang valid. Unit pusat akan mencoba terhubung atau terhubung kembali dengan perangkat yang disambungkan saat koneksi terputus.
- Asumsikan periferal tidak lagi digunakan jika penyambungan dihapus.
Dalam kasus di atas, penyambungan mengacu pada tindakan mendaftarkan serangkaian alat bantu dengar dengan UUID tertentu dan penunjuk kiri/kanan di OS, bukan proses penyambungan Bluetooth.
Persyaratan sistem
Untuk menerapkan CoC dengan benar guna memberikan pengalaman pengguna yang baik, sistem Bluetooth di perangkat pusat dan periferal harus:
- menerapkan pengontrol BT 4.2 yang sesuai atau yang lebih tinggi. Koneksi Aman LE sangat direkomendasikan.
- memiliki dukungan pusat minimal 2 link LE serentak 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 alur berbasis kredit LE [BT Vol 3, Bagian A, Sec 10.1]. Perangkat harus mendukung ukuran MTU dan MPS minimal 167 byte di CoC dan dapat 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
danminimum_CE_Length
yang bukan nol. - minta pusat untuk mempertahankan throughput data untuk dua koneksi CoC LE ke dua periferal yang berbeda dengan interval koneksi dan ukuran payload dalam Format dan waktu paket audio.
-
meminta periferal menetapkan parameter
MaxRxOctets
danMaxRxTime
dalam frameLL_LENGTH_REQ
atauLL_LENGTH_RSP
menjadi nilai minimum yang diperlukan yang diperlukan untuk spesifikasi ini. Hal ini memungkinkan pusat mengoptimalkan penjadwal waktunya saat menghitung jumlah waktu yang diperlukan untuk menerima frame.
Sebaiknya bagian pusat dan periferal mendukung PHY 2 MB seperti yang ditentukan dalam spesifikasi BT 5.0. Pusat harus mendukung link 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 link dan frekuensi hopping.
Layanan GATT ASHA
Periferal harus menerapkan layanan server GATT Streaming Audio untuk Alat Bantu Pendengaran (ASHA) yang dijelaskan di bawah. Periferal harus mengiklankan layanan ini saat dalam mode yang dapat ditemukan secara umum untuk memungkinkan pusat mengenali sink audio. Setiap operasi streaming audio LE akan memerlukan enkripsi. Streaming audio BLE terdiri dari karakteristik berikut:
Karakteristik | Properti | Deskripsi |
---|---|---|
ReadOnlyProperties | Dibaca | Lihat ReadOnlyProperties. |
AudioControlPoint | Tulis dan Tulis tanpa Respons | Titik kontrol untuk streaming audio. Lihat AudioControlPoint. |
AudioStatusPoint | Baca/Beri tahu | Kolom laporan status untuk titik kontrol audio. Lihat AudioStatusPoint. |
Volume | Menulis tanpa Respons | Byte antara -128 dan 0 yang menunjukkan jumlah atenuasi yang akan diterapkan ke sinyal audio yang di-streaming, mulai dari -48 dB hingga 0 dB. Setelan -128 akan ditafsirkan sebagai dibisukan sepenuhnya, yaitu tingkat volume non-bisukan terendah adalah -127 yang setara dengan atenuasi -47,625 dB. Pada setelan 0, nada sinus rail-to-rail yang di-streaming akan mewakili input 100 dBSPL yang setara pada alat bantu dengar. Bagian tengah akan melakukan streaming dalam skala penuh nominal dan menggunakan variabel ini untuk menetapkan tingkat presentasi yang diinginkan di periferal. |
LE_PSM_OUT | Dibaca | PSM yang akan digunakan untuk menghubungkan saluran audio. Untuk dipilih dari rentang dinamis [BT Vol 3, Part A, Sec 4.22] |
UUID yang ditetapkan ke layanan dan karakteristik:
UUID Layanan: {0xFDF0}
Karakteristik | UUID |
---|---|
ReadOnlyProperties | {6333651e-c481-4a3e-9169-7c902aad37bb} |
AudioControlPoint | {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 GATT ASHA, periferal juga harus menerapkan Layanan Informasi Perangkat untuk memungkinkan pusat mendeteksi nama produsen dan nama perangkat periferal.
ReadOnlyProperties
ReadOnlyProperties memiliki nilai berikut:
Byte | Deskripsi |
---|---|
0 | Versi - harus 0x01 |
1 | Lihat DeviceCapabilities. |
2-9 | Lihat HiSyncId. |
10 | Lihat FeatureMap. |
11-12 | RenderDelay. Ini adalah waktu, dalam milidetik, sejak periferal menerima frame audio hingga periferal merender output. Byte ini dapat digunakan untuk menunda video agar disinkronkan dengan audio. |
13-14 | Disimpan untuk penggunaan di masa mendatang. Melakukan inisialisasi ke nol. |
15-16 | ID Codec yang didukung. Ini adalah bitmask ID codec yang didukung. 1 di lokasi bit sesuai dengan codec yang didukung. Misalnya, 0x0002 menunjukkan bahwa G.722 pada 16 kHz didukung. Semua bit lainnya akan ditetapkan ke 0. |
DeviceCapabilities
Bit | Deskripsi |
---|---|
0 | Sisi perangkat (0: kiri, 1: kanan) |
1 | Menunjukkan apakah perangkat bersifat mandiri dan menerima data mono, atau apakah perangkat merupakan bagian dari kumpulan (0: monaural, 1: binaural) |
2 | Perangkat mendukung CSIS (0: tidak didukung, 1: didukung) |
3-7 | Dicadangkan (ditetapkan ke 0) |
HiSyncID
Kolom ini harus unik untuk semua perangkat binaural, tetapi harus sama untuk set kiri dan kanan.
Byte | Deskripsi |
---|---|
0-1 | ID produsen. Ini adalah ID Perusahaan yang ditetapkan oleh BTSIG. |
2-7 | ID unik yang mengidentifikasi perangkat alat bantu dengar. ID ini harus ditetapkan ke yang sama di periferal kiri dan kanan. |
FeatureMap
Bit | Deskripsi |
---|---|
0 | Streaming output audio CoC LE didukung (Ya/Tidak). |
1-7 | Dicadangkan (ditetapkan ke 0). |
ID Codec
Jika bit ditetapkan, codec tertentu tersebut didukung.
ID / Nomor bit | Codec dan frekuensi sampel | Kecepatan bit yang diperlukan | Waktu render frame | Wajib di pusat (C) atau periferal (P) |
---|---|---|---|---|
0 | Sudah diperuntukkan | Sudah diperuntukkan | Sudah diperuntukkan | Sudah diperuntukkan |
1 | G.722 @ 16 kHz | 64 kbit/dtk | Variabel | C dan P |
2-15 dicadangkan. 0 juga dicadangkan. |
AudioControlPoint
Titik kontrol ini tidak dapat digunakan saat CoC LE ditutup. Lihat Memulai dan menghentikan streaming audio untuk mengetahui deskripsi prosedur.
Opcode | Argumen | Sub-prosedur GATT | Deskripsi |
---|---|---|---|
1 «Start» |
|
Tulis dengan respons, dan harapkan notifikasi status tambahan melalui karakteristik AudioStatusPoint. |
Memberi petunjuk ke periferal untuk mereset codec dan memulai
pemutaran frame 0. Kolom 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 dalam streaming:
Periferal tidak boleh meminta update koneksi sebelum opcode «Stop» diterima.
|
2 «Stop» |
Tidak ada | Tulis dengan respons, dan harapkan notifikasi status tambahan melalui karakteristik AudioStatusPoint. | Memberi petunjuk ke periferal untuk berhenti merender audio. Urutan penyiapan audio baru harus dimulai setelah penghentian ini agar dapat merender audio lagi. |
3 «Status» |
|
Menulis tanpa respons |
Memberi tahu periferal yang terhubung bahwa ada pembaruan status pada periferal lainnya. Kolom yang terhubung menunjukkan jenis pembaruan:
|
AudioStatusPoint
Kolom laporan status untuk titik kontrol audio
Opcode | Deskripsi |
---|---|
0 | Status Oke |
-1 | Perintah tidak diketahui |
-2 | Parameter ilegal |
Iklan untuk layanan GATT ASHA
UUID layanan harus ada dalam paket iklan. Dalam frame respons iklan atau pemindaian, periferal harus memiliki Data Layanan:
Offset byte | Nama | Deskripsi |
---|---|---|
0 | Durasi Iklan | >= 0x09 |
1 | Jenis 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 |
|
6-9 | HiSyncID yang terpotong | Empat byte yang paling signifikan dari HiSyncId. Byte ini harus menjadi bagian ID yang paling acak. |
Periferal harus memiliki jenis data Complete Local Name yang menunjukkan nama alat bantu dengar. Nama ini akan digunakan di antarmuka pengguna perangkat seluler sehingga pengguna dapat memilih perangkat yang tepat. Nama tidak boleh menunjukkan saluran kiri atau kanan karena informasi ini diberikan di DeviceCapabilities.
Jika periferal menempatkan nama dan jenis data layanan ASHA dalam jenis frame yang sama (ADV atau SCAN RESP), maka kedua jenis data ("Complete Local Name" dan "Service Data for ASHA service") akan muncul dalam frame yang sama. Hal ini memungkinkan pemindai perangkat seluler mendapatkan kedua data dalam hasil pemindaian yang sama.
Selama penyambungan awal, periferal harus beriklan dengan kecepatan yang cukup cepat agar perangkat seluler dapat menemukan periferal dengan cepat dan terhubung ke periferal tersebut.
Menyinkronkan perangkat periferal kiri dan kanan
Agar dapat berfungsi dengan Bluetooth di perangkat seluler Android, perangkat periferal bertanggung jawab untuk memastikan bahwa perangkat tersebut disinkronkan. Pemutaran di perangkat periferal kiri dan kanan harus disinkronkan secara bersamaan. Kedua perangkat periferal harus memutar sampel audio dari sumber secara bersamaan.
Perangkat periferal dapat menyinkronkan waktunya menggunakan nomor urutan yang ditambahkan ke setiap paket payload audio. Bagian tengah menjamin bahwa paket audio yang dimaksudkan untuk diputar secara bersamaan di setiap periferal memiliki nomor urutan yang sama. Nomor urutan bertambah satu setelah setiap paket audio. Setiap nomor urutan memiliki panjang 8-bit, sehingga nomor urutan akan berulang setelah 256 paket audio. Karena setiap ukuran paket audio dan frekuensi sampel ditetapkan untuk setiap koneksi, kedua periferal dapat menyimpulkan waktu pemutaran relatif. Untuk mengetahui informasi selengkapnya tentang paket audio, lihat Format dan pengaturan waktu paket audio.
Pusat membantu dengan memberikan pemicu ke perangkat binaural saat sinkronisasi mungkin perlu dilakukan. Pemicu ini memberi tahu setiap periferal tentang status perangkat periferal yang disambungkan 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 operasi koneksi, pemutusan koneksi, atau
pembaruan parameter koneksi di satu periferal,
perintah
«Status»
AudioControlPoint akan dikirim ke sisi lain perangkat binaural.
Format dan pengaturan waktu paket audio
Dengan memaketkan frame audio (blok sampel) ke dalam paket, alat pendengaran dapat memperoleh pengaturan waktu dari anchor pengaturan waktu lapisan link. Untuk menyederhanakan penerapan:
- Frame audio harus selalu cocok dengan interval koneksi dalam waktu. Misalnya, jika interval koneksi adalah 20 md dan frekuensi sampel adalah 16 kHz, frame audio akan berisi 320 sampel.
- Frekuensi sampel dalam sistem dibatasi hingga kelipatan 8 kHz agar selalu memiliki jumlah sampel bilangan bulat dalam frame, terlepas dari waktu frame atau interval koneksi.
- Byte urutan harus ditambahkan di awal frame audio. Byte urutan akan dihitung dengan penggabungan dan memungkinkan periferal mendeteksi ketidakcocokan buffer atau underflow.
-
Frame audio harus selalu sesuai dengan satu paket LE. Frame
audio akan dikirim sebagai paket L2CAP terpisah. Ukuran PDU LL LE harus:
ukuran payload 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 mencadangkan bandwidth untuk pengiriman ulang. Perhatikan bahwa paket audio dapat terfragmentasi oleh pengontrol Bluetooth pusat. Periferal harus dapat menerima lebih dari 2 paket audio yang 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 pusat.
Format octet output G.722 mereferensikan Rec. ITU-T G.722 (09/2012) bagian 1.4.4 "Multiplekser"
Untuk semua codec yang didukung periferal, periferal harus mendukung parameter koneksi di bawah. Ini adalah daftar tidak lengkap konfigurasi yang dapat diterapkan oleh pusat.
Codec | Bitrate | Interval koneksi | Panjang CE (PHY 1M/2M) | Ukuran payload audio |
---|---|---|---|---|
G.722 @ 16 kHz | 64 kbit/dtk | 20 md | 5.000/3.750 s | 160 byte |
Memulai dan menghentikan streaming audio
Sebelum memulai streaming audio, pusat akan mengkueri periferal dan membuat codec denominator umum. Penyiapan streaming kemudian dilanjutkan melalui urutan berikut:
- PSM, dan secara opsional, RenderDelay dibaca. Nilai ini dapat di-cache oleh pusat.
- Saluran L2CAP CoC dibuka – periferal akan memberikan 8 kredit pada awalnya.
- Pembaruan koneksi dikeluarkan untuk mengalihkan link ke parameter yang diperlukan untuk codec yang dipilih. Pusat dapat melakukan pembaruan koneksi ini sebelum koneksi CoC di langkah sebelumnya.
- Host pusat dan periferal menunggu peristiwa update selesai.
-
Mulai ulang encoder audio, dan reset jumlah urutan paket ke 0.
Perintah
«Start»
dengan parameter yang relevan dikeluarkan di AudioControlPoint. Pusat menunggu notifikasi status yang berhasil dari perintah«Start»
sebelumnya dari periferal sebelum melakukan streaming. Penantian ini memberi periferal waktu untuk menyiapkan pipeline pemutaran audionya. Selama streaming audio, replika harus tersedia di setiap peristiwa koneksi meskipun latensi replika saat ini mungkin bukan nol. - Periferal mengambil paket audio pertama dari antrean internalnya (nomor urutan 0) dan memutarnya.
Pusat mengeluarkan perintah «Stop» untuk menutup streaming 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 tidak melakukan streaming audio, pusat harus tetap mempertahankan koneksi LE untuk layanan GATT.
Periferal tidak boleh mengeluarkan pembaruan koneksi ke pusat. Untuk menghemat daya, pusat dapat mengeluarkan update koneksi ke periferal saat tidak melakukan streaming audio.