Perangkat alat bantu dengar (HA) dapat memiliki aksesibilitas yang lebih baik di perangkat seluler berteknologi Android dengan menggunakan saluran L2CAP berorientasi koneksi (CoC) melalui Bluetooth Hemat Energi (BLE). CoC menggunakan buffer elastis beberapa paket audio untuk mempertahankan aliran audio yang stabil, bahkan jika terjadi kehilangan paket. Buffer ini memberikan kualitas audio untuk perangkat alat bantu dengar dengan mengorbankan latensi.
Desain CoC mengacu pada Bluetooth Core Specification Version 5 (BT). Agar tetap selaras dengan spesifikasi inti, semua nilai multi-byte di halaman ini harus dibaca sebagai little-endian.
Terminologi
- pusat
- 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 perangkat periferal, satu kiri dan satu kanan, seperti yang terlihat di Gambar 1. Sistem audio Bluetooth melihat periferal kiri dan kanan sebagai satu sink audio. Jika periferal tidak ada, karena kecocokan monaural atau hilangnya koneksi, maka pusat mencampur saluran audio kiri dan kanan serta mengirimkan audio ke periferal yang tersisa. Jika pusat kehilangan koneksi ke kedua perangkat periferal, pusat akan menganggap link ke sink audio terputus. Dalam kasus tersebut, rute pusat mengarahkan 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. Dengan mempertahankan koneksi, komunikasi data ke server GATT yang berada di perangkat periferal dapat dilakukan.
Saat menyambungkan dan menghubungkan alat bantu dengar, pusat harus:
- Melacak periferal kiri dan kanan yang dipasangkan baru-baru ini.
- Asumsikan periferal sedang digunakan jika sambungan yang valid ada. Pusat harus mencoba menghubungkan atau menghubungkan kembali dengan perangkat yang disambungkan saat koneksi terputus.
- Asumsikan periferal tidak lagi digunakan jika sambungan dihapus.
Dalam kasus di atas, penyambungan mengacu pada tindakan mendaftarkan serangkaian alat bantu dengar dengan UUID tertentu dan penentu kiri/kanan di OS, bukan proses penyambungan 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 yang lebih tinggi yang sesuai. Koneksi Aman LE sangat direkomendasikan.
- memiliki dukungan pusat setidaknya 2 link LE simultan dengan parameter seperti yang dijelaskan dalam Format dan waktu paket audio.
- memiliki dukungan periferal untuk minimal 1 link LE dengan parameter yang dijelaskan dalam format dan waktu paket audio.
- memiliki kontrol alur berbasis kredit LE [BT Vol 3, Part 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.
-
memiliki perangkat pusat yang mendukung Perintah Pembaruan Koneksi LE HCI
dan mematuhi parameter
maximum_CE_Length
danminimum_CE_Length
yang bukan nol. - membuat pusat mempertahankan throughput data untuk dua koneksi LE CoC ke dua periferal yang berbeda dengan interval koneksi dan ukuran payload dalam format dan waktu paket Audio.
-
membuat periferal menetapkan parameter
MaxRxOctets
danMaxRxTime
dalam frameLL_LENGTH_REQ
atauLL_LENGTH_RSP
menjadi nilai terkecil yang diperlukan untuk spesifikasi ini. Hal ini memungkinkan mengoptimalkan penjadwal waktunya saat menghitung jumlah waktu yang diperlukan untuk menerima frame.
Sangat direkomendasikan agar perangkat 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 jangkauan jauh BLE tidak boleh digunakan.
CoC menggunakan mekanisme Bluetooth standar untuk enkripsi lapisan link dan frekuensi hopping.
Layanan GATT ASHA
Perangkat periferal harus menerapkan layanan server GATT Streaming Audio untuk Alat Bantu Dengar (ASHA) yang dijelaskan di bawah. Perangkat periferal harus mengiklankan layanan ini saat dalam mode dapat ditemukan secara umum agar perangkat pusat dapat mengenali sink audio. Semua operasi streaming audio LE harus memerlukan enkripsi. Streaming audio BLE terdiri dari karakteristik berikut:
Karakteristik | Properti | Deskripsi |
---|---|---|
ReadOnlyProperties | Baca | 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 | Tulis tanpa Respons | Byte antara -128 dan 0 yang menunjukkan jumlah atenuasi yang akan diterapkan pada sinyal audio yang di-streaming, mulai dari -48 dB hingga 0 dB. Setelan -128 harus ditafsirkan sebagai sepenuhnya diredam, yaitu, tingkat volume non-redam terendah adalah -127 yang setara dengan atenuasi -47,625 dB. Pada setelan 0, nada sinus rail-to-rail yang di-streaming harus merepresentasikan input 100 dBSPL yang setara pada alat bantu dengar. Pusat harus melakukan streaming dalam skala penuh nominal dan menggunakan variabel ini untuk menetapkan tingkat presentasi yang diinginkan di perangkat periferal. |
LE_PSM_OUT | Baca | 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 agar sentral dapat 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, dari saat perangkat periferal menerima frame audio hingga perangkat periferal merender output. Byte ini dapat digunakan untuk menunda video agar disinkronkan dengan audio. |
13-14 | Dipesan untuk penggunaan di masa mendatang. Lakukan inisialisasi ke nol. |
15-16 | ID Codec yang didukung. Ini adalah bitmask ID codec yang didukung. Angka 1 di lokasi bit sesuai dengan codec yang didukung. Misalnya, 0x0002 menunjukkan bahwa G.722 pada 16 kHz didukung. Semua bit lainnya harus disetel ke 0. |
DeviceCapabilities
Bit | Deskripsi |
---|---|
0 | Sisi perangkat (0: kiri, 1: kanan) |
1 | Menunjukkan apakah perangkat berdiri sendiri dan menerima data mono, atau apakah perangkat adalah bagian dari set (0: monaural, 1: binaural) |
2 | Perangkat mendukung CSIS (0: tidak didukung, 1: didukung) |
3-7 | Dicadangkan (disetel 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. ID ini adalah ID Perusahaan yang ditetapkan oleh BTSIG. |
2-7 | ID unik yang mengidentifikasi set alat bantu dengar. ID ini harus disetel ke nilai yang sama di periferal kiri dan kanan. |
FeatureMap
Bit | Deskripsi |
---|---|
0 | Streaming output audio LE CoC didukung (Ya/Tidak). |
1-7 | Dicadangkan (ditetapkan ke 0). |
ID Codec
Jika bit disetel, codec tertentu tersebut didukung.
ID / Nomor bit | Codec dan kecepatan sampel | Kecepatan bit yang diperlukan | Waktu render frame | Wajib di tengah (C) atau di samping (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 LE CoC ditutup. Lihat Memulai dan menghentikan streaming audio untuk mengetahui deskripsi prosedurnya.
Kode operasi | Argumen | Sub-prosedur GATT | Deskripsi |
---|---|---|---|
1 «Start» |
|
Tulis dengan respons, dan harapkan notifikasi status tambahan melalui karakteristik AudioStatusPoint. |
Menginstruksikan perangkat 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. Kolom bit jenis audio menunjukkan jenis audio yang ada dalam streaming:
Perangkat periferal tidak boleh meminta pembaruan koneksi sebelum opcode «Stop» diterima.
|
2 «Stop» |
Tidak ada | Tulis dengan respons, dan harapkan notifikasi status tambahan melalui karakteristik AudioStatusPoint. | Menginstruksikan periferal untuk berhenti merender audio. Urutan penyiapan audio baru harus dimulai setelah penghentian ini untuk 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
Kode operasi | Deskripsi |
---|---|
0 | Status Oke |
-1 | Perintah tidak diketahui |
-2 | Parameter ilegal |
Iklan untuk layanan GATT ASHA
UUID layanan harus ada dalam paket iklan. Di frame respons pemindaian atau iklan, periferal harus memiliki Data Layanan:
Offset byte | Nama | Deskripsi |
---|---|---|
0 | Panjang 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 paling signifikan dari HiSyncId. Byte ini harus menjadi bagian ID yang paling acak. |
Perangkat periferal harus memiliki jenis data Nama Lokal Lengkap 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 channel kiri atau kanan karena informasi ini diberikan di DeviceCapabilities.
Jika periferal menempatkan jenis data nama dan layanan ASHA dalam jenis frame yang sama (ADV atau SCAN RESP), maka kedua jenis data ("Complete Local Name" dan "Service Data for ASHA service") harus muncul dalam frame yang sama. Hal ini memungkinkan pemindai perangkat seluler mendapatkan kedua data dalam hasil pemindaian yang sama.
Selama penyambungan awal, periferal harus diiklankan dengan kecepatan yang cukup tinggi agar perangkat seluler dapat menemukan dan menyambungkan periferal dengan cepat.
Menyinkronkan perangkat periferal kiri dan kanan
Untuk menggunakan Bluetooth di perangkat seluler Android, perangkat periferal bertanggung jawab untuk memastikan bahwa perangkat tersebut disinkronkan. Pemutaran di perangkat periferal kiri dan kanan harus disinkronkan dalam waktu. Kedua perangkat periferal harus memutar kembali sampel audio dari sumber secara bersamaan.
Perangkat periferal dapat menyinkronkan waktunya dengan menggunakan nomor urut yang ditambahkan ke setiap paket payload audio. Pusat menjamin bahwa paket audio yang dimaksudkan untuk diputar pada waktu yang sama di setiap perangkat periferal memiliki nomor urut yang sama. Nomor urut bertambah satu setelah setiap paket audio. Setiap nomor urutan memiliki panjang 8-bit, sehingga nomor urutan akan berulang setelah 256 paket audio. Karena ukuran paket audio dan frekuensi sampel setiap koneksi sudah ditetapkan, kedua perangkat periferal dapat menyimpulkan waktu pemutaran relatif. Untuk mengetahui informasi selengkapnya tentang paket audio, lihat Format dan waktu paket audio.
Pusat membantu dengan memberikan pemicu ke perangkat binaural saat sinkronisasi mungkin perlu terjadi. 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 di sisi lain perangkat binaural diberikan. -
Setiap kali ada operasi koneksi, pemutusan koneksi, atau
pembaruan parameter koneksi pada satu perangkat periferal,
perintah
«Status»
AudioControlPoint dikirim ke sisi lain perangkat binaural.
Format dan pengaturan waktu paket audio
Mengemas frame audio (blok sampel) ke dalam paket memungkinkan alat bantu dengar mendapatkan waktu dari anchor 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, maka frame audio harus berisi 320 sampel.
- Frekuensi sampel dalam sistem dibatasi ke kelipatan 8 kHz agar selalu memiliki jumlah sampel bilangan bulat dalam frame, terlepas dari waktu frame atau interval koneksi.
- Byte urutan harus mendahului frame audio. Byte urutan harus dihitung dengan pengulangan dan memungkinkan periferal mendeteksi ketidakcocokan atau kekurangan buffer.
-
Frame audio harus selalu sesuai dengan satu paket LE. Frame audio harus dikirim sebagai paket L2CAP terpisah. Ukuran PDU LE
LL 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 transmisi ulang. Perhatikan bahwa paket audio dapat difragmentasi oleh pengontrol Bluetooth sentral. Periferal harus dapat menerima lebih dari 2 paket audio terfragmentasi per peristiwa koneksi.
Untuk memberikan fleksibilitas pada sentral, panjang paket G.722 tidak ditentukan. Panjang paket G.722 dapat berubah berdasarkan interval koneksi yang ditetapkan oleh pusat.
Format oktet output G.722 merujuk pada Rec. ITU-T G.722 (09/2012) section 1.4.4 "Multiplexer"
Untuk semua codec yang didukung periferal, periferal harus mendukung parameter koneksi di bawah. Berikut 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 | 5000/3750 AS | 160 byte |
Memulai dan menghentikan streaming audio
Sebelum memulai streaming audio, pusat akan mengkueri periferal dan membuat codec penyebut umum. Penyiapan streaming kemudian dilanjutkan melalui urutan berikut:
- PSM, dan secara opsional, RenderDelay dibaca. Nilai ini dapat di-cache oleh pusat.
- Saluran CoC L2CAP dibuka – perangkat periferal harus 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 selesai update.
-
Mulai ulang encoder audio, dan reset jumlah urutan paket ke 0.
Perintah
«Start»
dengan parameter yang relevan dikeluarkan di AudioControlPoint. Pusat menunggu notifikasi status berhasil dari perintah«Start»
sebelumnya dari perangkat periferal sebelum melakukan streaming. Penundaan 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. - Perangkat periferal mengambil paket audio pertama dari antrean internalnya (nomor urut 0) dan memutarnya.
Masalah utama adalah perintah «Stop» untuk menutup streaming audio. Setelah perintah ini, periferal tidak perlu tersedia di setiap peristiwa koneksi. Untuk memulai ulang streaming audio, ikuti urutan di atas, mulai dari langkah 5. Saat tidak menstreamingkan audio, sentral harus tetap mempertahankan koneksi LE untuk layanan GATT.
Perangkat periferal tidak boleh mengeluarkan update koneksi ke perangkat pusat. Untuk menghemat daya, pusat dapat mengeluarkan update koneksi ke perangkat periferal saat tidak melakukan streaming audio.