Tombol Audio
Seiring makin banyaknya pengguna yang menggunakan beberapa perangkat sumber audio untuk melakukan tugas sehari-hari, semakin banyak permintaan untuk solusi yang lebih sederhana guna mengelola penggunaan headset di seluruh perangkat. Tombol audio dengan lancar mentransisikan koneksi headset antar-perangkat berdasarkan aktivitas pengguna (misalnya, memulai film) dan peristiwa yang diprioritaskan (misalnya, panggilan masuk).
Prinsip UX
- Peralihan koneksi harus cepat dan didasarkan pada tindakan pengguna.
- Pengalihan koneksi harus bersifat transparan bagi pengguna, sehingga pengguna dapat mengontrol/mengembalikan jika pengalihan tidak diinginkan.
- Pengalihan harus menghormati privasi pengguna.
Peran
Audio Switch Seeker: Seeker adalah perangkat sumber audio (misalnya, ponsel atau tablet), yang mencari headset di sekitar untuk dihubungkan jika berlaku.
Penyedia Tombol Audio: Penyedia biasanya adalah headset yang mengiklankan kehadiran dan status koneksinya agar Pencari dapat membuat keputusan untuk beralih.
Ringkasan Persyaratan
Untuk mencapai pengalihan yang cerdas, Penyedia harus mematuhi persyaratan berikut:
Nama | Deskripsi | Persyaratan | Wajib? |
---|---|---|---|
Pemindaian Halaman | Untuk menerima permintaan koneksi baru dari Pencari lain saat ada koneksi yang sudah ada. Untuk Penyedia titik tunggal:
|
Mode pemindaian halaman latensi rendah (interval pemindaian tidak boleh lebih besar dari 640 md) diperlukan untuk meningkatkan performa. Untuk melakukan trade-off antara masa pakai baterai dan performa pengalihan, Penyedia dapat memiliki mode pemindaian halaman default untuk sebagian besar kasus (mode daya rendah, interval pemindaian tidak boleh lebih besar dari 1280 md). Namun, mode latensi rendah harus digunakan dalam situasi berikut:
|
Wajib |
Histori koneksi | Untuk beralih kembali ke koneksi sebelumnya dan melanjutkan pemutaran jika berlaku. Beralih kembali akan dipicu oleh komunikasi melalui Message Stream API. Peristiwa audio yang dijeda harus disertakan dalam rekaman untuk melanjutkan pemutaran jika berlaku. |
Mengelola histori koneksi dan menerapkan Message Stream API. | Wajib |
Status koneksi | Agar Pencari dapat melakukan penilaian pengalihan koneksi.Status koneksi mencakup:
|
Sertakan status koneksi di Streaming Pesan dan Iklan BLE. | Wajib |
Perubahan kemampuan runtime | Tombol audio dapat diaktifkan dengan mengupgrade firmware di Penyedia, sehingga kemampuan perlu disinkronkan antara Pencari dan Penyedia saat runtime. | Mengimplementasikan Message Stream API untuk mengakses kemampuan runtime. | Wajib |
Aturan pengalihan yang dapat dikonfigurasi | Izinkan Pencari mengonfigurasi prioritas antara streaming audio aktif yang ada dan permintaan streaming audio baru melalui setelan preferensi pengguna. Misalnya, Pencari tombol audio dapat menyediakan setelan UI untuk memungkinkan pengguna mengaktifkan/menonaktifkan pengalihan otomatis antara streaming media dan panggilan. Pencari tombol audio akan menetapkan dan mendapatkan aturan pengalihan melalui Message Stream. |
Khusus Penyedia Multipoint. Terapkan Message Stream API untuk membuat aturan pengalihan antarperangkat terhubung dapat dikonfigurasi. |
Opsional |
Beralih perangkat aktif | Izinkan Pencari tombol Audio menyimulasikan pengalihan Audio di antara perangkat yang terhubung. Di sisi Pencari tombol Audio, mungkin ada UI bagi pengguna untuk beralih dengan mudah di antara perangkat yang terhubung. |
Khusus Penyedia Multipoint. Terapkan Message Stream API untuk Pencari tombol Audio guna menentukan sumber audio aktif di antara perangkat yang terhubung. |
Wajib |
Notifikasi pengalihan multipoint | Izinkan Pencari tombol Audio menampilkan notifikasi pengalihan. | Khusus Penyedia Multipoint. Terapkan Message Stream API untuk memberi tahu Pencari tombol Audio yang terhubung saat pengalihan multipoint terjadi. |
Wajib |
Payload iklan
Penyedia harus menyertakan status koneksinya saat ini dalam iklan, yang dibuat berdasarkan data Akun Sambungan Cepat yang dijelaskan dalam Iklan: Jika tidak dapat ditemukan.
Perhatikan bahwa versi tabel 4.2 adalah 0x1.
Kolom Status Koneksi
Oktet | Jenis data | Deskripsi | Nilai | Wajib? |
---|---|---|---|---|
0 | uint8 |
Panjang dan jenis kolom 0bLLLLTTTT
|
0bLLLL0101
|
Wajib |
1 | uint8 |
Status koneksi 0bHAFRSSSS
|
0bHAFRSSSS
|
Wajib |
2 | uint8 |
Data kustom Saat ini, data ini hanya berisi jenis konten yang digunakan untuk mendeskripsikan penggunaan streaming audio saat ini. Pencari akan mengirimkannya ke Penyedia. |
Nilai dikirim dari Pencari streaming aktif saat ini ke Penyedia melalui aliran pesan. 0 jika streaming aktif saat ini bukan dari Pencari. | Wajib |
3 - var | Bitmap perangkat terhubung Bitmap untuk menampilkan perangkat yang saat ini terhubung ke Penyedia. Semua perangkat yang terikat diatur secara berurutan, satu bit untuk satu perangkat yang terikat. Durasinya akan bergantung pada jumlah perangkat yang terikat dari Penyedia. |
Bit yang dipetakan ditetapkan ke 1 jika perangkat saat ini terhubung ke Penyedia, atau 0 jika tidak. Lihat Bitmap Perangkat Terhubung untuk mengetahui detailnya |
Opsional |
Tabel 4.1: Data mentah kolom status koneksi
Flag Koneksi
0bH = deteksi pada kepala
- 1, on head now
- 0, jika tidak, tidak ada di kepala atau tidak ada sensor OHD
0bA = ketersediaan koneksi
- 1, ada koneksi yang tersedia
- 0, jika tidak
0bF = mode fokus
- 1, dalam mode fokus sekarang, pengalihan koneksi tidak diizinkan untuk penggunaan media, yaitu tidak ada pengalihan A2DP ke A2DP
- 0, jika tidak
0bR = terhubung kembali secara otomatis
- 1, jika koneksi saat ini terhubung kembali secara otomatis oleh Penyedia, yang berarti koneksi tidak terhubung oleh pengguna (untuk multipoint, jika salah satu koneksi yang ada terhubung kembali secara otomatis, koneksi tersebut harus disetel ke 1)
- 0, jika tidak
Status koneksi
- 0x0: tidak ada koneksi
- 0x1: paging
- 0x2: terhubung, tetapi tidak ada transfer data
- 0x3: Transfer data non-audio (hanya jika dapat dialihkan, jika tidak, gunakan 0xF)
- 0x4: Streaming A2DP, AVRCP tidak berlaku
- 0x5: Streaming A2DP dan pemutaran AVRCP
- 0x6: Streaming HFP (panggilan telepon/voip), termasuk nada dering inband dan non-inband
- 0x7: Audio LE - streaming media tanpa kontrol
- 0x8: Audio LE - streaming media dengan kontrol
- 0x9: LE audio - streaming panggilan
- 0xA: LE audio - broadcast
- 0xF: Menonaktifkan tombol koneksi untuk sementara (misalnya, update firmware)
Jenis Konteks Audio LE dan Status koneksi
Menyarankan bahwa Penyedia Audio LE harus menangani semua jenis konteks yang ditentukan dalam Assigned Numbers 6.12.3 (kecuali jika Penyedia secara eksplisit tidak mendukung jenis konteks tertentu) dan memetakan jenis konteks ke status koneksi seperti di bawah.
- Percakapan: 0x9
- Media: 0x8
- Game: 0x7
- Instruksional: 0x7
- Asisten Suara: 0x9
- Live: 0x9
- Efek Suara: 0x2
- Notifikasi: 0x2
- Nada dering: 0x9
- Notifikasi: 0x7
- Alarm Darurat: 0x9
Untuk skenario jenis konteks Audio LE campuran seperti memutar media selama panggilan, Penyedia harus menggunakan status koneksi dengan prioritas tertinggi, yaitu menggunakan 0x9 (panggilan) untuk skenario di atas, bukan 0x8 (media).
Bitmap Perangkat Terhubung
Untuk menghindari pengalihan koneksi yang tidak diinginkan, Pencari mungkin perlu mengetahui perangkat yang saat ini terhubung ke headset. Misalnya, saat headset terhubung ke ponsel, pengguna tidak ingin terganggu oleh perpindahan koneksi saat salah satu anggota keluarganya memulai YouTube di tablet.
Perhatikan bahwa bitmap ini bersifat anonim, Pencari tidak dapat mengetahui perangkat lain yang terikat dengan Penyedia. Misalnya, ambil 5 perangkat yang terikat:
- 0: laptop (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: tablet (0b000x0000)
- 4: TV (0b0000x000)
Jika perangkat yang terhubung saat ini adalah laptop dan tablet, nilai bitmap akan menjadi 0b10010000. Perubahan urutan dapat diterima jika tidak dapat dihindari, misalnya saat pengguna mereset headset ke setelan pabrik atau saat jumlah perangkat yang terikat mencapai batas atas.
Iklan yang Dapat Di-resolve secara Acak
Untuk menghindari pelacakan dan menghormati privasi pengguna, Penyedia harus memutar dan mengenkripsi kolom berdasarkan kunci akun menggunakan AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
di mana
Kunci berasal dari kunci akun yang sedang digunakan, yang ditentukan di bagian berikutnya.
Kunci dihasilkan oleh fungsi HKDF, IETF RFC 5869, menggunakan fungsi hash SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Penyedia harus menggunakan kunci akun asli di sini, yaitu byte pertama kunci adalah 0x04, tidak disertakan dalam pola penggunaan.
IV (vektor awal) adalah salt 2 byte dari Data Kunci Akun dengan padding nol, yaitu IV adalah concat(salt, 14-byte ZEROs).
Data mentah status koneksi ditentukan dalam tabel 4.1. Jika status koneksi berubah, salt dan RPA harus dibuat ulang pada jangka waktu iklan yang sama.
Hal ini membuat kolom status koneksi terenkripsi berputar secara bersamaan dengan Data Kunci Akun yang berputar.
Iklan BLE akan disusun sebagai berikut:
Oktet | Jenis data | Deskripsi | Nilai | Wajib? |
---|---|---|---|---|
0 | uint8 |
Versi dan flag | 0x10 | Wajib |
1 - t | Data Kunci Akun | bervariasi | Wajib | |
t+1 - s | Data Baterai | bervariasi | Opsional | |
s+1 - var | Data yang Dapat Di-resolve Acak | bervariasi | Wajib jika Daftar Kunci Akun tidak kosong, jika tidak, Dikecualikan. |
Tabel 4.2: Iklan BLE dengan Data yang Dapat Di-resolve Acak
Data yang Dapat Di-resolve Acak berisi:
Oktet | Jenis data | Deskripsi | Nilai | Wajib? |
---|---|---|---|---|
0 | uint8 |
Panjang dan jenis kolom 0bLLLLTTTT
|
0bLLLL0110
|
Wajib |
1 - var | Data terenkripsi | bervariasi | Wajib |
Tabel 4.2.1: Data yang Dapat Di-resolve secara Acak
Misalnya, jika Data yang Dapat Di-resolve Acak berisi kolom status koneksi ter-enkripsi, hasil yang didekripsi akan berupa kolom status koneksi.
Untuk mencegah modifikasi tidak sah, Data Kunci Akun di atas harus sedikit diubah saat Data yang Dapat Di-resolve Acak disertakan dalam iklan. Biasanya, saat mem-build filter kunci akun, nilai V dihasilkan dengan menggabungkan filter kunci akun dengan salt. Sebagai gantinya, saat Data yang Dapat Di-resolve Acak juga diiklankan, nilai V harus dibuat sebagai:
V = concat(account_key, salt, random_resolvable_data)
Jika Data Baterai dan Data yang Dapat Di-resolve Acak diiklankan, V harus dibuat sebagai:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Kunci Akun yang Sedang Digunakan
Pengalihan koneksi berbasis akun, sehingga Penyedia harus menyertakan informasi akun koneksi saat ini dalam iklan BLE. Jika perangkat yang terhubung saat ini adalah Pencari tombol Audio, Penyedia harus dapat mendapatkan kunci akun yang terkait dengan Pencari ini, dan menggunakan kunci akun ini untuk mengenkripsi kolom status koneksi. Jika sumber audio yang terhubung bukan Pencari tombol Audio, Penyedia harus menggunakan kunci akun yang paling baru digunakan.
Sebelum menghitung filter kunci akun, Penyedia harus mengubah byte pertama kunci akun untuk menyertakan salah satu pola penggunaan berikut:
- 0b00000100
Kunci akun ini tidak digunakan.
Ini adalah kunci default (lihat Kunci akun). - 0b00000101
Kunci akun ini adalah kunci akun yang paling baru digunakan.
Bidang status koneksi dienkripsi oleh kunci akun ini. Tidak ada informasi kunci akun dari status koneksi saat ini, yang dapat berarti tidak ada perangkat yang terhubung atau perangkat yang terhubung bukan Pencari tombol Audio. - 0b00000110
Kunci akun ini adalah kunci akun yang sedang digunakan.
Bidang status koneksi dienkripsi oleh kunci akun ini, dan perangkat yang terhubung saat ini dikaitkan dengan kunci akun ini.
Skema untuk payload tombol Audio
Gambar di bawah menunjukkan skema untuk payload tombol Audio.

Pesan
Saat terhubung, Pencari dan Penyedia dapat menggunakan Aliran pesan untuk menyinkronkan kemampuan tombol Audio, memicu tombol koneksi, menetapkan dan mendapatkan preferensi pengalihan, memberi tahu status koneksi, dan sebagainya. Kita membuat grup pesan dan kode pesan khusus untuk tombol Audio seperti di bawah.
Nama Grup Pesan | Nilai |
---|---|
Beralih audio | 0x07 |
Detail tambahan untuk setiap kode pesan disertakan di bagian berikut.
Nama Kode Pesan | Nilai | Khusus multipoint | Pengirim | Responder | Enkripsikan | MAC | ACK |
---|---|---|---|---|---|---|---|
Mendapatkan kemampuan Tombol audio | 0x10 | T | Keduanya | Keduanya, melalui kode 0x11 | T | T | T |
Kemampuan pemberitahuan tombol Audio | 0x11 | T | Keduanya | Keduanya | T | Y | Y |
Menetapkan status multipoint | 0x12 | Y | Pencari | Penyedia | T | Y | Y |
Menetapkan preferensi pengalihan | 0x20 | Y | Pencari | Penyedia | T | Y | Y |
Mendapatkan preferensi pengalihan | 0x21 | Y | Pencari | Penyedia, melalui kode 0x22 | T | T | T |
Preferensi beralih pemberitahuan | 0x22 | Y | Penyedia | Pencari | T | T | T |
Beralih sumber audio aktif(ke perangkat terhubung) | 0x30 | Y | Pencari | Penyedia | T | Y | Y |
Beralih kembali | 0x31 | T | Pencari | Penyedia | T | Y | Y |
Memberi tahu peristiwa peralihan multipoint | 0x32 | Y | Penyedia | Pencari | T | T | T |
Mendapatkan status koneksi | 0x33 | Y | Pencari | Penyedia, melalui kode 0x34 | T | T | T |
Memberi tahu status koneksi | 0x34 | Y | Penyedia | Pencari | Y | T | T |
Menginformasikan koneksi yang dimulai oleh tombol Audio | 0x40 | T | Pencari | Penyedia | T | Y | Y |
Menunjukkan kunci akun yang sedang digunakan | 0x41 | T | Pencari | Penyedia | T | Y | Y |
Mengirim data kustom | 0x42 | T | Pencari | Penyedia | T | Y | Y |
Menetapkan target koneksi drop | 0x43 | Y | Pencari | Penyedia | T | Y | Y |
Tabel 4.3: Pesan tombol audio
MAC Pesan Tombol Audio
Untuk memberikan autentikasi pesan, semua pesan tombol Audio dengan data tambahan yang dikirim dari Pencari ke Penyedia memerlukan Kode Autentikasi Pesan. Saat diterima, pesan dengan MAC harus dikonfirmasi agar Pencari mengetahui apakah Penyedia telah bereaksi terhadap pesan tersebut atau tidak.
Jika autentikasi pesan berhasil, Penyedia akan mengirimkan ACK untuk pesan:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Persetujuan | 0xFF |
1 | uint8 | ACK | 0x01 |
2 - 3 | uint16 | Panjang data tambahan | bervariasi |
4 | uint8 | Beralih audio | 0x07 |
5 | uint8 | Kode pesan tombol audio | bervariasi |
6 - s | Tambahan data | bervariasi |
Jika gagal, Penyedia harus mengirim NAK untuk pesan tersebut:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Persetujuan | 0xFF |
1 | uint8 | NAK | 0x02 |
2 - 3 | uint16 | Panjang data tambahan | 0x0003 |
4 | uint8 | Penyebab kesalahan | bervariasi |
5 | uint8 | Beralih audio | 0x07 |
6 | uint8 | Kode pesan tombol audio | bervariasi |
Perhatikan bahwa, jika Penyedia adalah pengirim, MAC tidak diperlukan.
Mendapatkan kemampuan Tombol audio
Penyedia dan Pencari tombol Audio dapat memeriksa apakah Pencari/Penyedia Sambungan Cepat yang terhubung mendukung tombol Audio atau tidak dengan menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mendapatkan kemampuan Tombol audio | 0x10 |
2 - 3 | uint16 | Panjang data tambahan | 0 |
Tabel 4.3.1.0: Mendapatkan kemampuan Tombol audio
Kemampuan pemberitahuan Pengalihan audio
Setelah menerima kode pesan get capability of Audio switch, Pencari/Penyedia tombol Audio akan merespons dengan salah satu flag berikut:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Kemampuan pemberitahuan Pengalihan audio | 0x11 |
2 - 3 | uint16 | Panjang data tambahan | 20 jika dikirim oleh Pencari 4 jika dikirim oleh Penyedia |
4 - 5 | uint16 | Kode versi tombol audio | Nilai yang bukan nol berarti mendukung tombol Audio. Kode versi saat ini (dengan peningkatan keamanan) adalah 0x0102. 0x0000 atau tidak ada respons dalam 1 detik berarti Tombol audio tidak didukung di perangkat ini |
6 - 7 | flags | Flag kemampuan tombol audio dari Penyedia Jika dikirim oleh Pencari, dua byte ini harus diabaikan. |
bervariasi Lihat Flag kemampuan tombol audio |
8 - 15 | Nonce pesan Hanya diperlukan jika dikirim oleh Pencari |
bervariasi | |
16 - 23 | Kode autentikasi pesan Hanya diperlukan jika dikirim oleh Pencari |
bervariasi |
Tabel 4.3.1.1: Kemampuan pemberitahuan Tombol audio
Flag kemampuan tombol audio
Bit 0 (octet 6, MSB): Status tombol audio
- 1, jika status Tombol audio aktif
- 0, jika tidak
Bit 1: kemampuan konfigurasi multipoint
- 1, jika perangkat mendukung multipoint dan dapat diaktifkan dan dinonaktifkan
- 0, jika tidak (tidak mendukung multipoint atau multipoint selalu aktif)
Bit 2: status multipoint saat ini
- 1, jika multipoint aktif
- 0, jika tidak
Bit 3: deteksi di kepala
- 1, jika perangkat ini mendukung deteksi kepala (meskipun deteksi kepala dimatikan sekarang)
- 0, jika tidak
Bit 4: status saat ini deteksi di kepala
- 1, jika deteksi kepala diaktifkan
- 0, jika tidak (tidak mendukung deteksi di kepala atau deteksi di kepala dinonaktifkan)
Semua bit lainnya dicadangkan, default 0.
Menetapkan status multipoint
Pada Pencari tombol Audio, kami dapat menyediakan setelan bagi pengguna untuk mengaktifkan/menonaktifkan fungsi multipoint. Pencari akan menetapkan status multipoint ke Penyedia menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Menetapkan status multipoint | 0x12 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Status multipoint | 0: menonaktifkan multipoint 1: mengaktifkan multipoint |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Message authentication code | bervariasi |
Tabel 4.3.1.2: Menetapkan status multipoint
Menetapkan preferensi pengalihan
Pencari tombol audio dapat mengubah preferensi pengalihan multipoint dan menetapkannya ke Penyedia menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Menetapkan preferensi pengalihan | 0x20 |
2 - 3 | uint16 | Panjang data tambahan | 18 |
4 | flags | Preferensi pengalihan | bervariasi Lihat flag preferensi pengalihan multipoint |
5 | Setelan pengalihan lanjutan Byte ini dicadangkan, nilai defaultnya adalah 0 |
bervariasi | |
6 - 13 | Nonce pesan | bervariasi | |
14 - 21 tahun | Message authentication code | bervariasi |
Tabel 4.3.2.0: Menetapkan preferensi pengalihan
Flag preferensi pengalihan multi-titik
- Bit 0 (MSB): A2DP vs A2DP (default 0)
- Bit 1: HFP vs HFP (default 0)
- Bit 2: A2DP vs HFP (default 0)
- Bit 3: HFP vs A2DP (default 1)
- Bit 4 - 7: dicadangkan
- Di atas menunjukkan "permintaan profil baru" vs "profil aktif saat ini"
- 0 untuk tidak beralih
- 1 untuk beralih
Mendapatkan preferensi pengalihan
Pencari tombol audio dapat mengkueri preferensi pengalihan multipoint dari Penyedia menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mendapatkan konfigurasi pengalihan | 0x21 |
2 - 3 | uint16 | Panjang data tambahan | 0 |
Tabel 4.3.2.1: Mendapatkan preferensi pengalihan
Preferensi notifikasi pengalihan
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Preferensi notifikasi pengalihan | 0x22 |
2 - 3 | uint16 | Panjang data tambahan | 2 |
4 | flags | Mengganti tanda preferensi | bervariasi Lihat flag preferensi pengalihan multipoint |
5 | Setelan pengalihan lanjutan Byte ini dicadangkan, nilai defaultnya harus 0 |
bervariasi |
Tabel 4.3.2.2: Memberi tahu preferensi pengalihan
Mengganti sumber audio aktif (ke perangkat yang terhubung)
Pencari tombol audio dapat meminta Penyedia multipoint untuk mengalihkan sumber audio aktif di antara perangkat yang terhubung menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mengganti sumber audio aktif (ke perangkat yang terhubung) | 0x30 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | flags | Mengubah flag peristiwa sumber audio aktif | bervariasi Lihat mengganti peristiwa sumber audio aktif |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Message authentication code | bervariasi |
Tabel 4.3.3.0: Mengalihkan sumber audio aktif (ke perangkat yang terhubung)
Mengalihkan peristiwa sumber audio aktif
- Bit 0 (MSB): 1 beralih ke perangkat ini, 0 beralih ke perangkat kedua yang terhubung
- Bit 1: 1 melanjutkan pemutaran saat beralih ke perangkat setelah beralih, 0 jika tidak. Melanjutkan pemutaran berarti Penyedia mengirimkan notifikasi PLAY ke Pencari melalui profil AVRCP. Jika status sebelumnya (sebelum beralih) bukan PLAY, Penyedia harus mengabaikan tanda ini.
- Bit 2: 1 menolak SCO di perangkat yang dimatikan, 0 jika tidak
- Bit 3: 1 memutuskan hubungan Bluetooth pada perangkat tombol jauh, 0 jika tidak.
- Bit 4 - 7: dicadangkan.
Pencari tombol audio mungkin tidak selalu mengetahui statusnya dengan benar, sehingga Penyedia dapat menerima pesan "beralih ke perangkat ini" saat Pencari sudah menjadi perangkat aktif. Dalam hal ini, untuk menampilkan UI yang benar di Pencari, Penyedia dapat mengirim NAK dengan alasan error, 0x4 - Tindakan perangkat redundan.
Untuk Penyedia Audio LE yang memiliki lebih dari satu anggota set, Penyedia harus memutuskan semua anggota dari Pencari. Jika tidak, stack Bluetooth Pencari akan terhubung kembali ke Penyedia.
Beralih kembali (ke perangkat yang terputus)
Jika pengalihan koneksi tidak diinginkan, pengguna dapat mengembalikan pengalihan, dan dalam skenario tertentu, sebaiknya pulihkan koneksi audio untuk meminimalkan gangguan. Pencari akan menggunakan pesan di bawah untuk memicu pengaktifan kembali:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Beralih kembali (ke perangkat yang terputus) | 0x31 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Peristiwa beralih kembali | bervariasi 0x01: beralih kembali 0x02: beralih kembali dan melanjutkan pemutaran |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Message authentication code | bervariasi |
Tabel 4.3.3.1: Beralih kembali (ke perangkat yang terputus)
Untuk Penyedia multipoint, untuk melakukan pengalihan koneksi, Penyedia dapat memutuskan koneksi dengan satu perangkat sumber audio dan menjeda sesi audio di sumber audio lainnya. Misalnya, asumsikan headset multipoint terhubung ke tablet dan perangkat Audio switch pihak ketiga yang didukung. Pengguna sedang menonton video di tablet saat ada panggilan masuk di ponselnya. Ponsel akan memicu tombol koneksi di headset, yang perlu memutuskan koneksi perangkat ke-3 agar dapat terhubung ke ponsel, sekaligus menjeda sesi media di tablet untuk mendapatkan nada dering dari ponsel. Jika pengguna menolak panggilan, ponsel dapat meminta headset untuk "beralih kembali dan melanjutkan pemutaran". Setelah menerima permintaan ini, headset harus terhubung kembali ke perangkat ke-3, dan melanjutkan pemutaran video yang dijeda di tablet.
Memberi tahu peristiwa multipoint-switch
Agar pengguna mengetahui peristiwa tombol akses multi-titik yang terjadi, Pencari tombol akses Audio dapat menampilkan notifikasi kepada pengguna. Penyedia harus memberi tahu Pencari tombol Audio yang terhubung tentang peristiwa pengalihan.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Memberi tahu peristiwa pengalihan multipoint Penyedia harus mengirimkannya di setiap pengalihan, termasuk Pencari pengalihan Audio ke Pencari pengalihan non-Audio, Pencari pengalihan non-Audio ke Pencari pengalihan Audio, dan Pencari pengalihan Audio ke Pencari pengalihan Audio |
0x32 |
2 - 3 | uint16 | Panjang data tambahan | bervariasi |
4 | uint8 | Alasan beralih Nilai ini harus ditentukan berdasarkan Status koneksi. Untuk kasus penggunaan Audio LE, melihat pemetaan antara Jenis Konteks Audio LE dan Status koneksi mungkin berguna. Misalnya, status koneksi yang sesuai dengan Asisten Suara adalah 0x9(audio LE - streaming panggilan). Jadi, alasan pengalihan untuk pengalihan yang dimulai oleh Asisten Suara harus 0x02. |
bervariasi 0x00: Tidak ditentukan 0x01: Media (misalnya, streaming A2DP, streaming media LEA) 0x02: Panggilan (misalnya, streaming HFP, streaming panggilan LEA) |
5 | uint8 | Perangkat target | bervariasi 0x01: perangkat ini 0x02: perangkat lain yang terhubung |
6 - n | utf8 | Nama perangkat target jika perangkat target adalah Pencari tombol Audio, menggunakan nama yang dikirim Pencari, jika tidak, menggunakan nama BT, jika tidak berlaku, menggunakan 2 byte terakhir alamatnya |
bervariasi |
Tabel 4.3.3.2: Memberi tahu peristiwa multipoint-switch
Mendapatkan status koneksi
Pencari dapat mendapatkan status koneksi saat ini dari Penyedia:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mendapatkan status koneksi | 0x33 |
2 - 3 | uint16 | Panjang data tambahan | 0 |
Tabel 4.3.3.3: Mendapatkan status koneksi
Setelah menerima pesan ini, Penyedia harus merespons dengan kode pesan 0x34, memberi tahu status koneksi.
Memberi tahu status koneksi
Seperti yang ditentukan dalam payload iklan BLE, untuk Penyedia multipoint, jika status koneksi berubah, kecuali untuk mengubah paket iklan, Penyedia juga harus memberi tahu Pencari yang terhubung yang menggunakan kunci akun yang sama tentang perubahan tersebut. Jika Penyedia terhubung dengan Pencari tombol Audio dan Pencari tombol non-Audio, jika Pencari tombol non-Audio aktif, Penyedia juga harus memberi tahu Pencari tombol Audio yang terhubung tentang status koneksi (menggunakan kunci akun Pencari).
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Memberi tahu status koneksi | 0x34 |
2 - 3 | uint16 | Panjang data tambahan | bervariasi |
4 | uint8 | Tanda perangkat aktif | bervariasi 0x00: Pencari ini pasif, dan perangkat aktif menggunakan kunci akun yang sama 0x01: Pencari ini adalah perangkat aktif 0x02: Pencari ini pasif, dan perangkat aktif adalah Pencari tombol non-Audio. |
5 - n | Status koneksi terenkripsi | bervariasi | |
n+1 - n+8 | Nonce pesan | bervariasi |
Tabel 4.3.3.4: Memberi tahu status koneksi
Pesan status koneksi terenkripsi
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
dalam hal ini:
Kunci berasal dari kunci akun yang sedang digunakan, lihat Iklan yang Dapat Di-resolve secara Acak.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV adalah concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, connected_devices) yang ditentukan dalam payload iklan BLE Perhatikan bahwa byte untuk panjang dan jenis kolom tidak boleh disertakan karena kita memiliki kode pesan dan panjang data di sini.
Notifikasi Koneksi yang dimulai oleh tombol Audio
Penyedia tombol audio mungkin perlu mengetahui apakah pengalihan koneksi dipicu oleh tombol audio agar memiliki reaksi yang berbeda, misalnya menonaktifkan earcon untuk peristiwa tombol audio. Pencari mengirim pesan untuk memberi tahu Penyedia bahwa koneksi ini adalah koneksi yang dimulai oleh tombol Audio.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Notifikasi Koneksi yang dimulai oleh tombol Audio | 0x40 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Indikasi koneksi yang dimulai oleh tombol audio | bervariasi 0: koneksi ini tidak dipicu oleh tombol Audio 1: koneksi ini dimulai oleh tombol Audio |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Message authentication code | bervariasi |
Tabel 4.3.4.0: Menginformasikan koneksi yang dimulai oleh Tombol audio
Menunjukkan kunci akun yang sedang digunakan
Jika beberapa kunci akun di Pencari (misalnya multi-pengguna) dikaitkan dengan Penyedia, Pencari akan menggunakan pesan di bawah untuk menunjukkan kunci akun mana yang sedang digunakan.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Menunjukkan kunci akun yang sedang digunakan | 0x41 |
2 - 3 | uint16 | Panjang data tambahan | 22 |
4 - 9 | utf8 | String sedang digunakan | UTF8 ("sedang digunakan") |
10 - 17 | Nonce pesan | bervariasi | |
18 - 25 | Message authentication code | bervariasi |
Tabel 4.3.4.1: Menunjukkan kunci akun yang sedang digunakan
Setelah menerima pesan ini, Penyedia dapat mengetahui kunci akun mana yang digunakan dengan memverifikasi kode autentikasi pesan.
Mengirim data kustom
Pencari tombol Audio aktif dapat mengenkapsulasi informasi (misalnya penggunaan audio) streaming audio dalam byte data kustom, dan mengirimkannya ke Penyedia menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mengirim data kustom | 0x42 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Data kustom | bervariasi |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Message authentication code | bervariasi |
Tabel 4.3.4.2: Mengirim data kustom
Setelah menerima data kustom, Penyedia akan memperbarui paket iklan untuk menyertakan data kustom. Untuk Penyedia multipoint, Penyedia juga harus memberi tahu perubahan status koneksi ke Pencari lain yang terhubung menggunakan kunci akun yang sama.
Menetapkan target koneksi drop
Pada headset multipoint, jika koneksi pilihan yang akan dihentikan bukan koneksi yang paling baru digunakan, Pencari tombol Audio dapat memberi tahu Penyedia perangkat mana yang akan dihentikan menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Menetapkan target koneksi drop | 0x43 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Target perangkat terhubung yang akan dihapus | bervariasi 1: perangkat ini |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Message authentication code | bervariasi |
Tabel 4.3.4.3: Menetapkan target koneksi drop