Cambio Audio
Poiché gli utenti utilizzano sempre più dispositivi di origine audio per svolgere le loro attività quotidiane, cresce la domanda di una soluzione più semplice per gestire l'utilizzo delle cuffie su tutti i dispositivi. La funzionalità Cambio Audio consente di trasferire senza problemi le connessioni delle cuffie tra i dispositivi in base all'attività utente (ad esempio l'avvio di un film) e alla priorità degli eventi (ad esempio una chiamata in arrivo).
Principi relativi all'esperienza utente
- Il cambio di connessione dovrebbe essere rapido e basato sull'azione dell'utente.
- Il passaggio di connessione deve essere trasparente per gli utenti, in modo da consentire loro di controllare/ripristinare le operazioni indesiderate.
- Il passaggio dovrebbe rispettare la privacy dell'utente.
Ruoli
Ricerca cambio audio: è un dispositivo per la sorgente audio (ad esempio, un telefono o un tablet) che cerca cuffie da connettere nelle vicinanze, ove applicabile.
Fornitore cambio audio: il Fornitore è in genere un paio di cuffie che pubblicizza la sua presenza e lo stato della connessione ai Ricercatori affinché possano prendere decisioni in merito al passaggio.
Panoramica dei requisiti
Per ottenere il passaggio intelligente, i fornitori devono rispettare i seguenti requisiti:
Nome | Descrizione | Requisiti | Obbligatorio? |
---|---|---|---|
Scansione pagina | Per accettare una nuova richiesta di connessione da un altro ricercatore quando è già presente una connessione. Per i provider single-point:
|
Per migliorare le prestazioni è necessaria la modalità di scansione delle pagine a bassa latenza (l'intervallo di scansione non deve essere superiore a 640 ms). Per trovare un compromesso tra la durata della batteria e le prestazioni di passaggio, il provider può avere una modalità di scansione delle pagine predefinita nella maggior parte dei casi (modalità a basso consumo, l'intervallo di scansione non deve essere superiore a 1280 ms). Tuttavia, è necessario utilizzare la modalità a bassa latenza nelle seguenti situazioni:
|
Obbligatorio |
Cronologia connessioni | Per tornare alla connessione precedente e riprendere la riproduzione, se applicabile. Il ripristino verrà attivato dalle comunicazioni tramite le API Message Stream. L'evento audio in pausa deve essere incluso nel record per riprendere la riproduzione, se applicabile. |
Mantieni la cronologia delle connessioni e implementa le API Message Stream. | Obbligatorio |
Stato della connessione | Per consentire ai ricercatori di valutare il cambio di connessione.Lo stato della connessione include:
|
Includi lo stato della connessione in Annunci BLE e Message Stream. | Obbligatorio |
Modifica delle funzionalità di runtime | La funzionalità Cambio Audio può essere attivata eseguendo l'upgrade del firmware sul provider, pertanto le funzionalità devono essere sincronizzate tra Seeker e il provider durante il runtime. | Implementa le API Message Stream per accedere alle funzionalità di runtime. | Obbligatorio |
Regole di passaggio configurabili | Consenti a Seeker di configurare la priorità tra lo streaming audio attivo esistente e le nuove richieste di streaming audio tramite le impostazioni delle preferenze dell'utente. Ad esempio, Seeker Cambio Audio potrebbe fornire impostazioni UI per consentire agli utenti di attivare/disattivare il passaggio automatico tra lo streaming di contenuti multimediali e le chiamate. La ricerca di Cambio Audio verrà impostata e riceverà la regola di passaggio tramite Message Stream. |
Solo provider multipunto. Implementa le API Message Stream per rendere configurabili le regole di passaggio tra dispositivi connessi. |
Facoltativo |
Cambio dispositivo attivo | Consenti a Ricercatore di Cambio Audio di simulare il cambio di dispositivo tra dispositivi connessi. Sul lato Ricercatore di Cambio Audio, potrebbe essere disponibile un'interfaccia utente che consente agli utenti di passare facilmente da un dispositivo connesso all'altro. |
Solo per provider multipunto. Implementa le API Message Stream per Audio switch Seeker per determinare la sorgente audio attiva tra i dispositivi connessi. |
Obbligatorio |
Notifica di passaggio multipunto | Consenti alla funzionalità Ricerca Cambio Audio di mostrare la notifica di passaggio. | Solo provider multipunto. Implementa le API Message Stream per notificare ai ricercatori di cambio audio connessi quando viene effettuato un passaggio multipunto. |
Obbligatorio |
Payload pubblicità
Il Fornitore deve includere nell'annuncio il proprio stato di connessione attuale, basato sui dati dell'account ad accoppiamento rapido descritti nella sezione Pubblicità: quando non rilevabile.
Tieni presente che la versione della tabella 4.2 è 0 x 1.
Campo Stato connessione
Ottetto | Tipo di dati | Descrizione | Valore | Obbligatorio? |
---|---|---|---|---|
0 | uint8 |
Lunghezza e tipo del campo 0bLLLLTTTT
|
0bLLLL0101
|
Obbligatorio |
1 | uint8 |
Stato della connessione 0bHAFRSSSS
|
0bHAFRSSSS
|
Obbligatorio |
2 | uint8 |
Dati personalizzati Al momento contiene solo tipi di contenuti utilizzati per descrivere l'utilizzo dello streaming audio corrente. Il Ricercatore invierà le informazioni al Fornitore. |
Il valore viene inviato dal Ricercatore del flusso di streaming attivo corrente al provider tramite il flusso di messaggi. 0 se lo streaming attivo corrente non proviene da Seeker. | Obbligatorio |
3 - var | Bitmap dei dispositivi connessi Una bitmap che mostra quali dispositivi sono attualmente connessi al provider. Tutti i dispositivi collegati sono disposti in ordine, un bit per un dispositivo collegato. La lunghezza dipenderà dal numero di dispositivi collegati del provider. |
Il bit mappato è impostato su 1 se il dispositivo è attualmente connesso al provider, 0 in caso contrario. Vedi Bitmap del dispositivo connesso per i dettagli |
Facoltativo |
Tabella 4.1: Dati non elaborati del campo Stato della connessione
Flag di connessione
0bH = rilevamento sulla testa
- 1, in testa ora
- 0, altrimenti non sulla testa o nessun sensore OHD
0bA = disponibilità della connessione
- 1, è disponibile una connessione
- 0, in caso contrario
0bF = modalità Niente distrazioni
- 1. In modalità Messa a fuoco non è consentito il passaggio da una connessione ad un'altra per l'utilizzo di contenuti multimediali, ad esempio da A2DP ad A2DP
- 0, in caso contrario
0bR = ricollegamento automatico
- 1: se la connessione corrente viene ricollegata automaticamente dal provider, ovvero non è connessa dagli utenti (per il multipunto, se una delle connessioni esistenti viene ricollegata automaticamente, deve essere impostata su 1)
- 0, in caso contrario
Stato connessione
- 0x0: nessuna connessione
- 0x1: paging
- 0x2: connesso, ma nessun trasferimento di dati
- 0x3: trasferimento di dati non audio (solo se commutabile, in caso contrario, utilizzando 0xF)
- 0x4: streaming A2DP, AVRCP non applicabile
- 0x5: streaming A2DP e riproduzione AVRCP
- 0x6: streaming HFP (chiamata telefonica/voip), inclusa la suoneria in-band e non in-band
- 0x7: LE audio - streaming multimediale senza controllo
- 0x8: LE audio - streaming multimediale con controllo
- 0x9: LE audio - streaming chiamate
- 0xA: LE audio - trasmissione
- 0xF: disattiva temporaneamente l'interruttore di connessione (ad esempio, aggiornamento firmware)
Bitmap del dispositivo connesso
Per evitare un cambio di connessione indesiderato, il Seeker potrebbe dover sapere a quali dispositivi sono attualmente connessi le cuffie. Ad esempio, quando le cuffie sono collegate allo smartphone, l'utente non vuole essere interrotto dal cambio di connessione quando un membro del gruppo Famiglia avvia YouTube sul tablet.
Tieni presente che questa bitmap è anonima, il Ricercatore non è in grado di sapere quali altri dispositivi sono collegati al provider. Ad esempio, prendiamo 5 dispositivi collegati:
- 0: laptop (0bx0000000)
- 1: telefonoA (0b0x000000)
- 2: telefonoB (0b00x00000)
- 3: tablet (0b000x0000)
- 4: TV (0b0000x000)
Se gli attuali dispositivi connessi sono un laptop e un tablet, il valore della bitmap sarà 0b10010000. La modifica dell'ordine è accettabile se inevitabile, ad esempio quando gli utenti ripristinano i dati di fabbrica delle cuffie o quando il numero di dispositivi collegati raggiunge il limite massimo.
Pubblicità casuale rimborsabile
Per evitare il monitoraggio e rispettare la privacy degli utenti, il Fornitore dovrebbe ruotare e criptare il campo in base alla chiave dell'account utilizzando l'algoritmo AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
dove
La chiave viene ricavata dalla chiave dell'account in uso, definita nella sezione successiva.
La chiave viene generata dalla funzione HKDF, IETF RFC 5869, utilizzando la funzione hash SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Il provider utilizzerà la chiave dell'account originale qui, ovvero il primo byte della chiave è 0x04, non incluso nel pattern di utilizzo.
IV (vettore iniziale) è il sale a 2 byte dei dati delle chiavi dell'account con padding zero, ad esempio IV è concat(salt, zeri di 14 byte).
I dati non elaborati relativi allo stato della connessione sono definiti nella tabella 4.1. Se lo stato della connessione cambia, il sale e l'RPA devono essere rigenerati nello stesso periodo di tempo pubblicitario.
In questo modo il campo dello stato della connessione criptata ruota contemporaneamente alla rotazione dei dati della chiave dell'account.
La pubblicità BLE sarà strutturata come segue:
Ottetto | Tipo di dati | Descrizione | Valore | Obbligatorio? |
---|---|---|---|---|
0 | uint8 |
Versione e flag | 0x10 | Obbligatorio |
1 - t | Dati chiave dell'account | varia | Obbligatorio | |
T+1 - S | Dati batteria | varia | Facoltativo | |
s+1 - var | Dati risolvibili casuali | varia | Obbligatorio se l'elenco delle chiavi dell'account non è vuoto, altrimenti sono escluse. |
Tabella 4.2: annuncio BLE con dati risolvibili casuali
I dati risolvibili casuali contengono:
Ottetto | Tipo di dati | Descrizione | Valore | Obbligatorio? |
---|---|---|---|---|
0 | uint8 |
Lunghezza e tipo del campo 0bLLLLTTTT
|
0bLLLL0110
|
Obbligatorio |
1 - var | Dati criptati | varia | Obbligatorio |
Tabella 4.2.1: Dati risolvibili casuali
Ad esempio, se i dati risolvibili casuali contengono un campo di stato della connessione criptata, il risultato decriptato sarà il campo dello stato della connessione.
Per evitare manomissioni, i dati chiave dell'account riportati sopra devono essere leggermente modificati quando i dati risolvibili casuali sono inclusi nell'annuncio. Normalmente, durante la creazione del filtro della chiave dell'account, viene generato un valore V combinando il filtro della chiave dell'account con un sale. Al contrario, quando vengono pubblicizzati anche dati risolvibili casuali, il valore V deve essere costruito come:
V = concat(account_key, salt, random_resolvable_data)
Se vengono pubblicizzati sia i dati sulla batteria sia i dati risolvibili casuali, V deve essere costruito come:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Chiave account in uso
Il passaggio della connessione si basa sull'account, pertanto il fornitore deve includere i dati dell'account della connessione corrente nell'annuncio BLE. Se il dispositivo connesso corrente è un Cercatore Cambio Audio, il provider dovrebbe essere in grado di ottenere la chiave dell'account associata a questo ricercatore e utilizzare questa chiave dell'account per criptare il campo dello stato della connessione. Se la sorgente audio collegata non è un Cerca cambio audio, il provider deve usare la chiave dell'account utilizzata più di recente.
Prima di calcolare il filtro della chiave dell'account, il provider deve modificare il primo byte delle chiavi degli account in modo da includere uno dei seguenti pattern in uso:
- 0b00000100
Questa chiave dell'account non è in uso.
Questa è quella predefinita (vedi Chiave account). - 0b00000101
Questa chiave dell'account è la chiave dell'account utilizzata più di recente.
Il campo dello stato della connessione è criptato da questa chiave dell'account. Nessuna informazione sulla chiave dell'account per lo stato attuale della connessione. È possibile che non ci siano dispositivi connessi o che il dispositivo connesso non sia un Ricerca Cambio Audio. - 0b00000110
Questa chiave dell'account è la chiave dell'account in uso.
Il campo dello stato della connessione è criptato da questa chiave dell'account e il dispositivo connesso corrente è associato a questa chiave dell'account.
Schema del payload di Cambio Audio
La figura seguente mostra lo schema per il payload di Cambio Audio.
Messaggi
Una volta connessi, Seeker e il provider possono utilizzare lo stream di messaggi per sincronizzare la funzionalità di commutazione audio, attivare un commutatore di connessione, impostare e ottenere la preferenza di cambio, notificare lo stato della connessione e così via. Creiamo un gruppo di messaggi e codici messaggio specifici per Cambio Audio, come indicato di seguito.
Nome del gruppo di messaggi | Valore |
---|---|
Cambio Audio | 0x07 |
Ulteriori dettagli per ogni codice messaggio sono inclusi nelle sezioni seguenti.
Nome codice messaggio | Valore | Solo multipunto | Mittente | Chi risponde | Cripta | MAC | ACK |
---|---|---|---|---|---|---|---|
Funzionalità Cambio Audio | 0x10 | No | Entrambi | Entrambe, tramite codice 0x11 | No | No | No |
Funzionalità di notifica per Cambio Audio | 0x11 | No | Entrambi | Entrambi | No | Sì | Sì |
Imposta stato multipunto | 0x12 | Sì | Ricercatore | Fornitore | No | Sì | Sì |
Imposta la preferenza di passaggio | 0x20 | Sì | Ricercatore | Fornitore | No | Sì | Sì |
Ottieni la preferenza per il passaggio | 0x21 | Sì | Ricercatore | Fornitore, tramite codice 0x22 | No | No | No |
Notifica il cambio di preferenza | 0x22 | Sì | Fornitore | Ricercatore | No | No | No |
Cambiare la sorgente audio attiva(al dispositivo connesso) | 0x30 | Sì | Ricercatore | Fornitore | No | Sì | Sì |
Tornare a un dispositivo disconnesso | 0x31 | No | Ricercatore | Fornitore | No | Sì | Sì |
Notifica evento di passaggio multipunto | 0x32 | Sì | Fornitore | Ricercatore | No | No | No |
Conoscere lo stato della connessione | 0x33 | Sì | Ricercatore | Fornitore, tramite codice 0x34 | No | No | No |
Invia una notifica sullo stato della connessione | 0x34 | Sì | Fornitore | Ricercatore | Sì | No | No |
Notifica connessione avviata Cambio Audio | 0x40 | No | Ricercatore | Fornitore | No | Sì | Sì |
Indica la chiave dell'account in uso | 0x41 | No | Ricercatore | Fornitore | No | Sì | Sì |
Inviare dati personalizzati | 0x42 | No | Ricercatore | Fornitore | No | Sì | Sì |
Impostare la destinazione della connessione di caduta | 0x43 | Sì | Ricercatore | Fornitore | No | Sì | Sì |
Tabella 4.3: Messaggi di Cambio Audio
MAC dei messaggi Cambio Audio
Per fornire l'autenticazione dei messaggi, tutti i messaggi Cambio Audio con dati aggiuntivi inviati dal mittente al provider richiedono un codice di autenticazione dei messaggi. Alla ricezione di un messaggio con MAC, questo deve essere accreditato in modo che il richiedente sappia se il provider ha reagito o meno al messaggio.
Se l'autenticazione del messaggio ha esito positivo, il provider invierà l'ACK per il messaggio:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Accettazione | 0xFF |
1 | Uint8 | ACK | 0x01 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | varia |
4 | Uint8 | Cambio Audio | 0x07 |
5 | Uint8 | Codice messaggio Cambio Audio | varia |
6-sec | Dati aggiuntivi | varia |
In caso di esito negativo, il Fornitore dovrà inviare il NAK per il messaggio:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Accettazione | 0xFF |
1 | Uint8 | ND | 0x02 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 0x0003 |
4 | Uint8 | Motivo errore | varia |
5 | Uint8 | Cambio Audio | 0x07 |
6 | Uint8 | Codice messaggio Cambio Audio | varia |
Tieni presente che, se il provider è il mittente, l'indirizzo MAC non è obbligatorio.
Ottieni la funzionalità Cambio Audio
Sia il provider Cambio Audio sia il cercatore possono verificare se il provider/Ricerca ad accoppiamento rapido connesso supporta o meno la funzionalità Cambio Audio utilizzando il messaggio seguente:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Ottieni la funzionalità Cambio Audio | 0x10 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 0 |
Tabella 4.3.1.0: Possibilità di utilizzare Cambio Audio
Funzionalità di notifica per Cambio Audio
Dopo aver ricevuto il codice del messaggio per la funzionalità di cambio audio, il cercatore/fornitore di Audio Switch risponderà con uno dei seguenti flag:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Funzionalità di notifica per Cambio Audio | 0x11 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 20 se inviato dal richiedente 4 se inviato dal provider |
4 - 5 | Uint16 | Codice versione Cambio Audio | Un valore diverso da zero indica che supporta Cambio Audio. Il codice della versione corrente (con il miglioramento della sicurezza) è 0x0102. 0x0000 o nessuna risposta entro 1 secondo significa che Cambio Audio non è supportato su questo dispositivo |
6 - 7 | flags | Flag di funzionalità Cambio Audio del provider Se l'invio viene inviato da Seeker, questi due byte devono essere ignorati. |
varies Consulta Flag per la funzionalità di cambio audio |
8 - 15 | Nonce messaggio Obbligatorio solo se inviato da Seeker |
varia | |
16 - 23 | Codice di autenticazione del messaggio Obbligatorio solo se inviato da Seeker |
varia |
Tabella 4.3.1.1: Funzionalità di notifica per Cambio Audio
Flag per funzionalità Cambio audio
Bit 0 (ottetto 6, MSB): stato Cambio Audio
- 1, se lo stato Cambio Audio è attivo
- 0, in caso contrario
Bit 1: configurabilità multipunto
- 1: se il dispositivo supporta il multipunto e può essere attivato e disattivato
- 0, altrimenti (non supporta il multipunto o il multipunto è sempre attivo)
Bit 2: stato attuale multipunto
- 1, se il multipunto è attivo
- 0, in caso contrario
Bit 3: rilevamento in testa
- 1, se il dispositivo supporta il rilevamento on-head (anche se il rilevamento on-head è ora disattivato)
- 0, in caso contrario
Bit 4: stato attuale del rilevamento on-head
- 1, se il rilevamento on-head è attivo
- 0, altrimenti (non supporta il rilevamento on-head o il rilevamento on-head è disabilitato)
Tutti gli altri bit sono riservati, il valore predefinito è 0.
Imposta stato multipunto
In Ricercatori di Cambio Audio potremmo fornire agli utenti l'impostazione per attivare/disattivare la funzionalità multipunto. Il Seeker imposterà lo stato multipunto sul provider utilizzando il messaggio seguente:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Imposta stato multipunto | 0x12 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 17 |
4 | Uint8 | Stato multipunto | 0: disattiva il multipunto 1: attiva il multipunto |
5 - 12 | Nonce messaggio | varia | |
13 - 20 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.1.2: Impostazione dello stato multipunto
Imposta preferenza di passaggio
Chi cerca Cambio Audio può modificare la preferenza di commutazione del multipunto e impostarla sul provider utilizzando il messaggio seguente:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Imposta preferenza di passaggio | 0x20 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 18 |
4 | flags | Preferenza di cambio | varia Consulta il flag di preferenza per il passaggio da più punti |
5 | Impostazioni di commutazione avanzate Questo byte è riservato, il valore predefinito è 0 |
varia | |
6 - 13 | Nonce messaggio | varia | |
14 - 21 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.2.0: Impostazione delle preferenze di commutazione
Flag per preferenza cambio multipunto
- Bit 0 (MSB): A2DP rispetto a A2DP (predefinito 0)
- Bit 1: HFP rispetto a HFP (valore predefinito 0)
- Bit 2: A2DP vs HFP (predefinito 0)
- Bit 3: HFP vs A2DP (predefinito 1)
- Bit 4-7: riservato
- Sopra è rappresentato come "nuova richiesta di profilo" e come "profilo attivo corrente"
- 0 per il mancato passaggio
- 1 per il passaggio
Ottieni la preferenza di passaggio
Chi cerca Cambio Audio può eseguire query sulla preferenza di commutazione del multipunto dal provider utilizzando il messaggio seguente:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Ottieni il passaggio alla configurazione | 0x21 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 0 |
Tabella 4.3.2.1: Ottenere la preferenza di passaggio
Notifica cambio preferenza
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Notifica cambio preferenza | 0x22 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 2 |
4 | flags | Cambiare i flag delle preferenze | varia Consulta il flag di preferenza per il passaggio da più punti |
5 | Impostazioni di commutazione avanzate Questo byte è riservato, il valore predefinito deve essere 0 |
varia |
Tabella 4.3.2.2: Notifica preferenza di cambio
Cambia la sorgente audio attiva (al dispositivo connesso)
Chi cerca Cambio Audio può richiedere al provider multipunto di cambiare la sorgente audio attiva tra i dispositivi connessi utilizzando il seguente messaggio:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Cambia la sorgente audio attiva (al dispositivo connesso) | 0x30 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 17 |
4 | flags | Cambiare i flag dell'evento di origine audio attivo | varia Consulta Cambio di un evento di sorgente audio attiva |
5 - 12 | Nonce messaggio | varia | |
13 - 20 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.3.0: Cambia la sorgente audio attiva (al dispositivo connesso)
Cambio dell'evento di origine audio attiva
- Bit 0 (MSB): 1 passaggio a questo dispositivo, 0 passaggio al secondo dispositivo connesso
- Bit 1: 1 riprendi la riproduzione sull'interruttore sul dispositivo dopo lo switch, 0 altrimenti. Se riprendi la riproduzione, il Fornitore invia una notifica PLAY al Cercatore tramite il profilo AVRCP. Se lo stato precedente (prima della disattivazione) non era PLAY, il provider deve ignorare questo flag.
- Bit 2: 1 rifiuto SCO su dispositivo spento, 0 altrimenti
- Bit 3: 1 disconnette il Bluetooth in caso di spegnimento dispositivo, 0 altrimenti.
- Bit 4-7: riservati.
Chi cerca Cambio Audio potrebbe non conoscere sempre correttamente il proprio stato, quindi il provider può ricevere un messaggio di passaggio a questo dispositivo quando il richiedente è già il dispositivo attivo. In questo caso, per mostrare l'interfaccia utente corretta su Seeker, il provider può inviare una richiesta NAK con il motivo dell'errore, ovvero 0x4 - Azione ridondante del dispositivo.
Torna all'impostazione (a dispositivo disconnesso)
Se il cambio di connessione è indesiderato, gli utenti possono annullarlo e, in determinati scenari, ha senso ripristinare la connessione audio per ridurre al minimo le interruzioni. Il Cercatore utilizzerà il messaggio seguente per attivare il passaggio alla modalità precedente:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Torna all'impostazione (a dispositivo disconnesso) | 0x31 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 17 |
4 | Uint8 | Evento "Torna indietro" | varia 0x01: torna indietro 0x02: torna indietro e riprendi la riproduzione |
5 - 12 | Nonce messaggio | varia | |
13 - 20 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.3.1: Ripristino del dispositivo disconnesso
Per i provider multipunto, per effettuare un cambio di connessione, un provider può interrompere la connessione a un dispositivo di origine audio e mettere in pausa la sessione audio sull'altra sorgente audio. Ad esempio, supponiamo che le cuffie multipunto siano collegate a un tablet e a un terzo dispositivo Cambio Audio supportato. L'utente sta guardando il video sul tablet quando c'è una chiamata in arrivo sul suo telefono. Il telefono attiverà un interruttore di connessione sulle cuffie, che deve interrompere la connessione del terzo dispositivo per connettersi al telefono, mettendo anche in pausa la sessione multimediale sul tablet per scaricare la suoneria dal telefono. Se l'utente rifiuta la chiamata, il telefono potrebbe chiedere alle cuffie di "tornare indietro e riprendere la riproduzione". Alla ricezione di questa richiesta, le cuffie devono riconnettersi al terzo dispositivo e riprendere la riproduzione del video in pausa sul tablet.
Notifica evento di passaggio multipunto
Per informare gli utenti che si verifica un evento di passaggio multipunto, lo strumento Ricerca Cambio Audio potrebbe mostrare una notifica agli utenti. Il provider deve avvisare i cercatori di cambio audio connessi del passaggio.
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Notifica evento di commutazione multipunto Il provider deve inviarlo a ogni interruttore, incluso Cambio Audio in cerca di Cambio Audio, Cambio non audio Cercatore Cambio Audio e Cambio Audio Cercatore Cambio Audio Ricercatore in caso di Cambio Audio |
0x32 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | varia |
4 | Uint8 | Motivo del cambio | varia 0x00: non specificato 0x01: streaming A2DP 0x02: HFP |
5 | Uint8 | Dispositivo di destinazione | varia 0x01: questo dispositivo 0x02: un altro dispositivo connesso |
6 - n | utf8 | Nome del dispositivo di destinazione se il dispositivo di destinazione è Audio Switch Seeker, che utilizza il nome a cui è stato inviato il Seeker e, in caso contrario, il nome BT, se non applicabile, utilizzando gli ultimi 2 byte dell'indirizzo |
varia |
Tabella 4.3.3.2: Notifica evento di commutazione multipunto
Ottieni lo stato della connessione
Il Ricercatore può ottenere lo stato della connessione attuale dal provider:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Ottieni lo stato della connessione | 0x33 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 0 |
Tabella 4.3.3.3: Recuperare lo stato della connessione
Dopo aver ricevuto questo messaggio, il Fornitore risponderà con il codice messaggio 0x34 informando lo stato della connessione.
Notifica stato connessione
Come definito nel payload pubblicitario BLE, per i fornitori multipunto, se lo stato della connessione cambia, tranne per la modifica del pacchetto pubblicitario, il Fornitore deve anche informare della modifica i Ricercatori connessi che utilizzano la stessa chiave dell'account. Se il Provider è connesso con un Cercatore Cambio Audio e con un Ricercatore non in Ricerca audio, se quest'ultimo non è attivo, il Provider deve anche informare lo stato della connessione al Cercatore di Cambio Audio connesso (utilizzando il tasto dell'account di Ricerca).
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Notifica stato connessione | 0x34 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | varia |
4 | Uint8 | Flag del dispositivo attivo | varia 0x00: questo Cercatore è passivo e il dispositivo attivo utilizza la stessa chiave account 0x01: questo Cercatore è il dispositivo attivo 0x02: questo Cercatore è passivo, mentre il dispositivo attivo non è un Cercatore audio. |
5 - n | Stato della connessione criptata | varia | |
n+1 - n+8 | Nonce messaggio | varia |
Tabella 4.3.3.4: Notifica stato connessione
Messaggio sullo stato della connessione criptata
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
dove:
La chiave viene ricavata dalla chiave dell'account in uso. Consulta la pagina Annuncio con risoluzione casuale.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV è concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, Connected_devices) definito nel payload pubblicitario BLE. Tieni presente che il byte per la lunghezza e il tipo di campo non deve essere incluso, poiché qui abbiamo il codice messaggio e la lunghezza dei dati.
Invia notifica per connessione avviata con Cambio Audio
I fornitori di Cambio Audio potrebbero dover sapere se il cambio di connessione viene attivato da Cambio Audio per avere reazioni diverse, ad esempio disattivare le earcon per gli eventi Cambio Audio. Il Cercatore invia un messaggio per notificare al provider che si tratta di una connessione avviata da Cambio Audio.
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Invia notifica per connessione avviata con Cambio Audio | 0x40 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 17 |
4 | Uint8 | Indicazione di connessione avviata dal cambio audio | varia 0: questa connessione non è stata attivata da Cambio Audio 1: si trattava di una connessione avviata con Cambio Audio |
5 - 12 | Nonce messaggio | varia | |
13 - 20 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.4.0: Notifica connessione avviata con cambio audio
Indica la chiave dell'account in uso
Se più chiavi dell'account nel ricercatore (ad esempio multiutente) sono associate al provider, quest'ultimo utilizzerà il messaggio seguente per indicare la chiave dell'account in uso.
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Indica la chiave dell'account in uso | 0x41 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 22 |
4 - 9 | utf8 | Stringa in uso | UTF8 ("in uso") |
10 - 17 | Nonce messaggio | varia | |
18 - 25 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.4.1: Indicazione della chiave dell'account in uso
Alla ricezione di questo messaggio, il provider può sapere quale chiave dell'account è in uso verificando il codice di autenticazione del messaggio.
Invia dati personalizzati
Il Ricercatore Cambio Audio attivo può incapsulare le informazioni (ad esempio l'utilizzo di audio) dello stream audio in un byte di dati personalizzato e inviarle al provider utilizzando il messaggio seguente:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Invia dati personalizzati | 0x42 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 17 |
4 | Uint8 | Dati personalizzati | varia |
5 - 12 | Nonce messaggio | varia | |
13 - 20 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.4.2: Inviare dati personalizzati
Dopo aver ricevuto i dati personalizzati, il provider aggiorna il pacchetto pubblicitario in modo da includere i dati personalizzati. Per un provider multipunto, deve anche notificare la modifica dello stato della connessione a un altro ricercatore connesso utilizzando la stessa chiave dell'account.
Imposta destinazione della connessione
Sulle cuffie multipunto, se la connessione preferita da interrompere non è quella meno recente utilizzata, chi cerca Cambio Audio può indicare al provider quale dispositivo interrompere utilizzando il messaggio seguente:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | Uint8 | Cambio Audio | 0x07 |
1 | Uint8 | Imposta destinazione della connessione | 0x43 |
2 - 3 | Uint16 | Lunghezza dei dati aggiuntivi | 17 |
4 | Uint8 | Dispositivo connesso di destinazione da eliminare | varia 1: questo dispositivo |
5 - 12 | Nonce messaggio | varia | |
13 - 20 | Codice di autenticazione del messaggio | varia |
Tabella 4.3.4.3: Impostare la destinazione della connessione di interruzione
Implementazione dei riferimenti
Per l'implementazione di riferimento, consulta Libreria SDK incorporata nelle vicinanze