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
danminimum_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
danMaxRxTime
dalam bingkaiLL_LENGTH_REQ
atauLL_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:
|
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» |
| 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:
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» |
| Memberi tahu periferal yang terhubung bahwa ada pembaruan status pada periferal lain. Bidang yang terhubung menunjukkan jenis pembaruan:
|
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 |
|
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:
- PSM, dan secara opsional, RenderDelay dibaca. Nilai-nilai ini dapat di-cache oleh pusat.
- Saluran CoC L2CAP dibuka – periferal akan memberikan 8 kredit pada awalnya.
- 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.
- Baik host pusat dan periferal menunggu acara pembaruan lengkap.
- 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. - 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.