Seleção de áudio
À medida que os usuários usam cada vez mais vários dispositivos de origem de áudio para realizar as tarefas diárias, há uma demanda crescente por uma solução mais simples para gerenciar o uso de fones de ouvido em vários dispositivos. A chave de áudio faz a transição perfeita das conexões do fone de ouvido entre dispositivos com base na atividade do usuário (por exemplo, iniciar um filme) e eventos priorizados (por exemplo, uma chamada recebida).
Princípios da UX
- A troca de conexão precisa ser rápida e baseada na ação do usuário.
- A troca de conexão precisa ser transparente para os usuários, permitindo que eles controlem/revertam se a troca não for desejada.
- A troca precisa respeitar a privacidade do usuário.
Papéis
Procurador de seleção de áudio: o procurador é um dispositivo de fonte de áudio (por exemplo, um smartphone ou tablet) que procura um fone de ouvido por perto para se conectar, quando aplicável.
Provedor de alternância de áudio: normalmente, é um fone de ouvido que anuncia a presença e o status de conexão para que os buscadores tomem decisões de troca.
Visão geral dos requisitos
Para fazer a troca inteligente, os provedores precisam atender aos seguintes requisitos:
Nome | Descrição | Requisitos | Obrigatório? |
---|---|---|---|
Verificação de página | Aceitar uma nova solicitação de conexão de outro solicitante quando houver uma conexão existente. Para provedores de ponto único:
|
O modo de verificação de página de baixa latência (o intervalo de verificação não pode ser maior que 640 ms) é necessário para melhorar o desempenho. Para fazer um ajuste entre a duração da bateria e o desempenho da troca, o provedor pode ter um modo de verificação de página padrão para a maioria dos casos (modo de baixo consumo de energia, o intervalo de verificação não pode ser maior que 1.280 ms). No entanto, o modo de baixa latência precisa ser usado nas seguintes situações:
|
Obrigatório |
Histórico de conexão | Para voltar à conexão anterior e retomar a reprodução, se aplicável. A reversão será acionada por comunicações pelas APIs de fluxo de mensagens. O evento de pausa do áudio precisa ser incluído no registro para retomar a reprodução, se aplicável. |
Mantenha o histórico de conexão e implemente as APIs Message Stream. | Obrigatório |
Status da conexão | Para que os buscadores façam o julgamento de troca de conexão.O status da conexão inclui:
|
Incluir o status de conexão na publicidade e no stream de mensagens de BLE. | Obrigatório |
Mudança nos recursos de execução | A chave de áudio pode ser ativada atualizando o firmware no provedor. Portanto, os recursos precisam ser sincronizados entre o solicitante e o provedor no momento da execução. | Implemente APIs do Message Stream para acessar os recursos do ambiente de execução. | Obrigatório |
Regras de comutação configuráveis | Permitir que o Seeker configure a prioridade entre o streaming de áudio ativo atual e as novas solicitações de streaming de áudio usando as configurações de preferência do usuário. Por exemplo, o Seeker de alternância de áudio pode fornecer configurações de IU para permitir/desativar a alternância automática entre o streaming de mídia e as chamadas. O buscador de seleção de áudio vai definir e receber a regra de seleção por stream de mensagens. |
Somente provedores multiponto. Implemente APIs de fluxo de mensagens para tornar as regras de alternância entre dispositivos conectados configuráveis. |
Opcional |
Troca de dispositivo ativo | Permitir que o Audio switch Seeker simule a troca de áudio entre dispositivos conectados. No lado do Audio switch Seeker, pode haver uma interface para que os usuários troquem facilmente entre dispositivos conectados. |
Somente provedores multiponto. Implemente as APIs de fluxo de mensagens para que o seletor de áudio determine a fonte de áudio ativa entre os dispositivos conectados. |
Obrigatório |
Notificação de troca de multiponto | Permitir que o Seeker de seleção de áudio mostre a notificação de seleção. | Somente provedores multiponto. Implemente APIs de stream de mensagens para notificar os Seekers de alternância de áudio conectados quando uma alternância multiponto estiver ocorrendo. |
Obrigatório |
Payload de publicidade
O provedor precisa incluir o status de conexão atual no anúncio, baseado nos dados da conta do Fast Pair descritos em Publicidade: quando não detectável.
A versão da tabela 4.2 é 0x1.
Campo "Status da conexão"
Octeto | Tipo de dado | Descrição | Valor | Obrigatório? |
---|---|---|---|---|
0 | uint8 |
Comprimento e tipo do campo 0bLLLLTTTT
|
0bLLLL0101
|
Obrigatório |
1 | uint8 |
Estado da conexão 0bHAFRSSSS
|
0bHAFRSSSS
|
Obrigatório |
2 | uint8 |
Dados personalizados Atualmente, contém apenas o tipo de conteúdo usado para descrever o uso do streaming de áudio atual. O solicitante vai enviar para o provedor. |
O valor é enviado do Seeker do streaming ativo atual para o provedor por stream de mensagens. 0 se o streaming ativo atual não for do Seeker. | Obrigatório |
3 - var | Bitmap de dispositivos conectados : um bitmap para mostrar quais dispositivos estão conectados ao provedor. Todos os dispositivos vinculados são organizados em ordem, um bit para cada dispositivo vinculado. A duração vai depender de quantos dispositivos vinculados do provedor existem. |
O bit mapeado é definido como 1 se o dispositivo estiver conectado ao provedor. Caso contrário, ele será 0. Consulte Bitmap do dispositivo conectado para mais detalhes. |
Opcional |
Tabela 4.1: dados brutos do campo "Status da conexão"
Flags de conexão
0bH = detecção na cabeça
- 1, na cabeça agora
- 0, caso contrário, não está na cabeça ou não há um sensor de OHD
0bA = disponibilidade de conexão
- 1, há uma conexão disponível
- 0, caso contrário
0bF = modo de foco
- 1.No modo de foco, agora a troca de conexão não é permitida para uso de mídia, ou seja, não há troca de A2DP para A2DP.
- 0, caso contrário
0bR = reconexão automática
- 1, se a conexão atual for reconectada automaticamente pelo provedor, ou seja, não for conectada pelos usuários. Para multiponto, se uma das conexões existentes for reconectada automaticamente, ela será definida como 1.
- 0, caso contrário
Estado da conexão
- 0x0: nenhuma conexão
- 0x1: paginação
- 0x2: conectado, mas sem transferência de dados
- 0x3: transferência de dados não relacionados a áudio (somente quando comutável, caso contrário, use 0xF)
- 0x4: streaming A2DP, AVRCP não aplicável
- 0x5: streaming A2DP e reprodução AVRCP
- 0x6: streaming de HFP (chamada de telefone/VoIP), incluindo toque na banda e fora dela
- 0x7: Áudio LE: streaming de mídia sem controle
- 0x8: áudio LE: streaming de mídia com controle
- 0x9: LE Audio: streaming de chamadas
- 0xA: Áudio LE: transmissão
- 0xF: desativa temporariamente a troca de conexão (por exemplo, atualização de firmware)
Estado da conexão e tipo de contexto de áudio LE
Recomendar que o provedor de áudio LE processe todos os tipos de contexto especificados em Números atribuídos 6.12.3, a menos que o provedor explicitamente não ofereça suporte a um determinado tipo de contexto, e mapeie o tipo de contexto para o estado de conexão, conforme abaixo.
- Conversacional: 0x9
- Mídia: 0x8
- Jogo: 0x7
- Instrutivo: 0x7
- Assistentes por voz: 0x9
- Ao vivo: 0x9
- Efeitos sonoros: 0x2
- Notificações: 0x2
- Toque: 0x9
- Alertas: 0x7
- Alarme de emergência: 0x9
Para o cenário de tipo de contexto de áudio LE misto, como a reprodução de mídia durante a chamada, o provedor deve usar o estado de conexão com a maior prioridade, ou seja, usar 0x9 (chamada) para o cenário acima em vez de 0x8 (mídia).
Bitmap do dispositivo conectado
Para evitar a troca de conexão indesejada, o Seeker pode precisar saber a quais dispositivos o fone de ouvido está conectado. Por exemplo, quando o fone de ouvido está conectado ao smartphone, o usuário não quer ser interrompido pela mudança de conexão quando um dos membros da família inicia o YouTube no tablet.
Esse bitmap é anônimo, e o Seeker não consegue saber quais outros dispositivos estão vinculados ao provedor. Por exemplo, considere cinco dispositivos vinculados:
- 0: laptop (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: tablet (0b000x0000)
- 4: TV (0b0000x000)
Se os dispositivos conectados forem um laptop e um tablet, o valor do bitmap será 0b10010000. A mudança de ordem é aceitável se for inevitável, por exemplo, quando os usuários redefinirem o fone de ouvido para a configuração original ou quando a contagem de dispositivos vinculados atingir o limite máximo.
Anúncio solucionável aleatório
Para evitar o rastreamento e respeitar a privacidade do usuário, o provedor precisa alternar e criptografar o campo pela chave da conta usando AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
onde
A chave é derivada da chave da conta em uso, que é definida na próxima seção.
A chave é gerada pela função HKDF, IETF RFC 5869, usando a função hash SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
O provedor precisa usar a chave de conta original aqui, ou seja, o primeiro byte da chave é 0x04, não incluído no padrão de uso.
O IV (vetor inicial) é o sal de 2 bytes dos dados da chave da conta com zero padding, ou seja, IV é concat(sal, 14-byte ZEROs).
Os dados brutos do status de conexão são definidos na tabela 4.1. Se o status de conexão mudar, o sal e a RPA vão precisar ser regenerados no mesmo período de publicidade.
Isso faz com que o campo de status da conexão criptografada gire ao mesmo tempo que os dados da chave da conta.
O anúncio BLE será estruturado da seguinte maneira:
Octeto | Tipo de dado | Descrição | Valor | Obrigatório? |
---|---|---|---|---|
0 | uint8 |
Versão e sinalizações | 0x10 | Obrigatório |
1 - t | Dados da chave da conta | varia | Obrigatório | |
t+1 - s | Dados da bateria | varia | Opcional | |
s+1 - var | Dados solucionáveis aleatórios | varia | Obrigatório se a lista de chaves da conta não estiver vazia, caso contrário, excluído. |
Tabela 4.2:anúncio BLE com dados solucionáveis aleatórios
Os dados solucionáveis aleatórios contêm:
Octeto | Tipo de dado | Descrição | Valor | Obrigatório? |
---|---|---|---|---|
0 | uint8 |
Comprimento e tipo do campo 0bLLLLTTTT
|
0bLLLL0110
|
Obrigatório |
1 - var | Dados criptografados | varia | Obrigatório |
Tabela 4.2.1:dados solucionáveis aleatórios
Por exemplo, se os dados solucionáveis aleatórios contiverem um campo de status de conexão cifrado, o resultado descriptografado será o campo de status de conexão.
Para evitar adulterações, os dados da chave da conta acima precisam ser ligeiramente modificados quando os dados solucionáveis aleatórios forem incluídos no anúncio. Normalmente, ao criar o filtro de chave de conta, um valor V é produzido combinando o filtro de chave de conta com um sal. Em vez disso, quando os dados solucionáveis aleatórios também estão sendo anunciados, o valor V precisa ser criado como:
V = concat(account_key, salt, random_resolvable_data)
Se os dados de bateria e os dados solucionáveis aleatórios estiverem sendo anunciados, V precisará ser criado da seguinte forma:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Chave da conta em uso
A troca de conexão é baseada na conta. Portanto, o provedor precisa incluir as informações da conta da conexão atual no anúncio de BLE. Se o dispositivo conectado atual for um Seeker de chaveamento de áudio, o provedor poderá receber a chave de conta associada a esse Seeker e usá-la para cifrar o campo de status de conexão. Se a fonte de áudio conectada não for um switch de áudio, o provedor vai precisar usar a chave de conta mais recente.
Antes de calcular o filtro de chave de conta, o provedor precisa modificar o primeiro byte das chaves de conta para incluir um dos seguintes padrões de uso:
- 0b00000100
Esta chave de conta não está em uso.
Esse é o padrão (consulte Chave da conta). - 0b00000101
Essa chave é a mais recente.
O campo de status de conexão é criptografado por essa chave de conta. Não há informações de chave de conta do estado de conexão atual. Isso pode significar que não há dispositivos conectados ou que o dispositivo conectado não é um Seeker de alternância de áudio. - 0b00000110
Essa chave de conta é a chave em uso.
O campo de status de conexão é criptografado por essa chave de conta, e o dispositivo conectado atual está associado a essa chave.
Esquema para payload de alternância de áudio
A figura abaixo mostra o esquema do payload do interruptor de áudio.

Mensagens
Quando conectados, o Seeker e o provedor podem usar o fluxo de mensagens para sincronizar o recurso de comutação de áudio, acionar uma mudança de conexão, definir e receber a preferência de comutação, notificar o status da conexão e assim por diante. Criamos um grupo de mensagens e códigos de mensagens específicos para o interruptor de áudio, conforme abaixo.
Nome do grupo de mensagens | Valor |
---|---|
Troca de áudio | 0x07 |
Mais detalhes sobre cada código de mensagem estão incluídos nas seções a seguir.
Nome do código da mensagem | Valor | Somente multiponto | Remetente | Responder | Encrypt | MAC | CONF |
---|---|---|---|---|---|---|---|
Receber o recurso de seleção de áudio | 0x10 | N | Ambos | Ambos, pelo código 0x11 | N | N | N |
Notificar o recurso de seleção de áudio | 0x11 | N | Ambos | Ambos | N | S | S |
Definir o estado do multiponto | 0x12 | S | Seeker | Provedor | N | S | S |
Definir a preferência de troca | 0x20 | S | Seeker | Provedor | N | S | S |
Receber preferência de troca | 0x21 | S | Seeker | Provedor, pelo código 0x22 | N | N | N |
Notificar sobre a mudança de preferência | 0x22 | S | Provedor | Seeker | N | N | N |
Mudar a fonte de áudio ativa(para o dispositivo conectado) | 0x30 | S | Seeker | Provedor | N | S | S |
Voltar | 0x31 | N | Seeker | Provedor | N | S | S |
Notificar evento de comutação multiponto | 0x32 | S | Provedor | Seeker | N | N | N |
Receber o status da conexão | 0x33 | S | Seeker | Provedor, pelo código 0x34 | N | N | N |
Notificar o status da conexão | 0x34 | S | Provedor | Seeker | S | N | N |
Notificar a conexão iniciada pelo interruptor de áudio | 0x40 | N | Seeker | Provedor | N | S | S |
Indicar a chave da conta em uso | 0x41 | N | Seeker | Provedor | N | S | S |
Enviar dados personalizados | 0x42 | N | Seeker | Provedor | N | S | S |
Definir o destino da conexão de queda | 0x43 | S | Seeker | Provedor | N | S | S |
Tabela 4.3:mensagens de seleção de áudio
MAC das mensagens de seleção de áudio
Para fornecer autenticação de mensagens, todas as mensagens de chave de áudio com dados adicionais enviados do solicitante para o provedor exigem um código de autenticação de mensagem. Quando uma mensagem com MAC é recebida, ela precisa ser confirmada para que o solicitante saiba se o provedor reagiu à mensagem ou não.
Se a autenticação da mensagem for bem-sucedida, o provedor vai enviar o ACK para a mensagem:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Confirmação | 0xFF |
1 | uint8 | CONF | 0x01 |
2 a 3 | uint16 | Duração dos dados adicionais | varia |
4 | uint8 | Troca de áudio | 0x07 |
5 | uint8 | Código da mensagem de seleção de áudio | varia |
6 - s | Outros dados | varia |
Se falhar, o provedor vai enviar a NAK para a mensagem:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Confirmação | 0xFF |
1 | uint8 | NAK | 0x02 |
2 a 3 | uint16 | Duração dos dados adicionais | 0x0003 |
4 | uint8 | Motivo do erro | varia |
5 | uint8 | Troca de áudio | 0x07 |
6 | uint8 | Código da mensagem de seleção de áudio | varia |
Se o provedor for o remetente, o MAC não será necessário.
Receber o recurso de seleção de áudio
O provedor e o buscador do comutador de áudio podem verificar se o buscador/provedor do Fast Pair conectado oferece suporte ao comutador de áudio usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Receber o recurso de seleção de áudio | 0x10 |
2 a 3 | uint16 | Duração dos dados adicionais | 0 |
Tabela 4.3.1.0:conferir o recurso de seleção de áudio
Notificar o recurso de seleção de áudio
Ao receber o código da mensagem get capability of Audio switch, o Seeker/provedor do Audio switch vai responder com uma das seguintes flags:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Notificar o recurso de seleção de áudio | 0x11 |
2 a 3 | uint16 | Duração dos dados adicionais | 20 se for enviado pelo candidato 4 se for enviado pelo provedor |
4 - 5 | uint16 | Código da versão da seleção de áudio | Um valor diferente de zero significa que ele oferece suporte à troca de áudio. O código da versão atual (com a melhoria de segurança) é 0x0102. 0x0000 ou nenhuma resposta em 1 segundo significa que o dispositivo não oferece suporte à troca de áudio |
6 - 7 | flags | Flags de recursos de alternância de áudio do provedor Se for enviado pelo Seeker, esses dois bytes serão ignorados. |
varia Consulte Flags de recursos de seleção de áudio. |
8 a 15 | Valor de uso único da mensagem Somente obrigatório quando enviado pelo Seeker |
varia | |
16 a 23 | Código de autenticação de mensagem Somente obrigatório quando enviado pelo Seeker |
varia |
Tabela 4.3.1.1:recurso de notificação da seleção de áudio
Flags de recursos de seleção de áudio
Bit 0 (octeto 6, MSB): estado da seleção de áudio
- 1, se o estado da seleção de áudio estiver ativado
- 0, caso contrário
Bit 1: capacidade de configuração multiponto
- 1, se o dispositivo oferece suporte a multiponto e pode ser ativado e desativado
- 0, caso contrário (não oferece suporte a multiponto ou multiponto está sempre ativado)
Bit 2: estado atual multiponto
- 1, se a conectividade multiponto estiver ativada
- 0, caso contrário
Bit 3: detecção no fone de ouvido
- 1, se o dispositivo oferece suporte à detecção de uso (mesmo que ela esteja desativada no momento)
- 0, caso contrário
Bit 4: estado atual da detecção no dispositivo
- 1, se a detecção no fone estiver ativada
- 0, caso contrário (não oferece suporte à detecção auricular ou ela está desativada)
Todos os outros bits são reservados, padrão 0.
Definir o estado multiponto
Em buscadores de chaves de áudio, podemos fornecer a configuração para que os usuários ativem/desativem a funcionalidade multiponto. O Seeker vai definir o estado multiponto para o provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Definir o estado multiponto | 0x12 |
2 a 3 | uint16 | Duração dos dados adicionais | 17 |
4 | uint8 | Estado multiponto | 0: desativa a conexão multiponto 1: ativa a conexão multiponto |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.1.2:definir o estado de multiponto
Definir a preferência de troca
Os comutadores de áudio podem modificar a preferência de comutação de multiponto e defini-la para o provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Definir a preferência de troca | 0x20 |
2 a 3 | uint16 | Duração dos dados adicionais | 18 |
4 | flags | Alterar a preferência | varia Consulte a flag de preferência de troca de multiponto. |
5 | Configurações avançadas de alternância Este byte está reservado, o valor padrão é 0 |
varia | |
6 a 13 | Valor de uso único da mensagem | varia | |
14 a 21 anos | Código de autenticação de mensagem | varia |
Tabela 4.3.2.0:definir a preferência de troca de janelas
Flag de preferência de alternância multiponto
- Bit 0 (MSB): A2DP x A2DP (padrão 0)
- Bit 1: HFP x HFP (padrão 0)
- Bit 2: A2DP x HFP (padrão 0)
- Bit 3: HFP x A2DP (padrão 1)
- Bits 4 a 7: reservados
- A imagem acima representa "nova solicitação de perfil" e "perfil ativo atual"
- 0 para não trocar
- 1 para alternar
Receber a preferência de alternância
Os buscadores de comutação de áudio podem consultar a preferência de comutação de multiponto do provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Acessar configuração de troca | 0x21 |
2 a 3 | uint16 | Duração dos dados adicionais | 0 |
Tabela 4.3.2.1:conferir a preferência de troca.
Notificar preferência de troca
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Notificar preferência de troca | 0x22 |
2 a 3 | uint16 | Duração dos dados adicionais | 2 |
4 | flags | Alternar flags de preferência | varia Consulte a flag de preferência de troca de multiponto. |
5 | Configurações avançadas de alternância Este byte está reservado. O valor padrão deve ser 0 |
varia |
Tabela 4.3.2.2:notificar a preferência de troca
Trocar a fonte de áudio ativa (para o dispositivo conectado)
Os buscadores de seleção de áudio podem solicitar que o provedor multiponto mude a fonte de áudio ativa entre os dispositivos conectados usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Trocar a fonte de áudio ativa (para o dispositivo conectado) | 0x30 |
2 a 3 | uint16 | Duração dos dados adicionais | 17 |
4 | flags | Alternar flags de evento de origem de áudio ativa | varia Consulte Como alternar o evento de fonte de áudio ativo |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.3.0:alternar a fonte de áudio ativa (para o dispositivo conectado)
Evento de troca da fonte de áudio ativa
- Bit 0 (MSB): 1 alterna para este dispositivo, 0 alterna para o segundo dispositivo conectado
- Bit 1: 1 retoma a reprodução ao mudar para o dispositivo após a troca. Caso contrário, será 0. A retomada da reprodução significa que o provedor envia uma notificação PLAY ao Seeker pelo perfil AVRCP. Se o estado anterior (antes da mudança) não for PLAY, o provedor vai ignorar essa flag.
- Bit 2: 1 rejeita a SCO no dispositivo desconectado, 0, caso contrário
- Bit 3: 1 desconecta o Bluetooth ao mudar de dispositivo, 0, caso contrário.
- Bits 4 a 7: reservados.
Os buscadores de troca de áudio nem sempre sabem o estado corretamente. Por isso, é possível que o provedor receba uma mensagem "Mudar para este dispositivo" quando o buscador já é o dispositivo ativo. Nesse caso, para mostrar a interface correta no Seeker, o provedor pode enviar um NAK com o motivo do erro, 0x4: ação redundante do dispositivo.
Para um provedor de áudio LE com mais de um membro definido, o provedor precisa desconectar todos os membros do buscador. Caso contrário, a pilha Bluetooth do buscador será reconectada ao provedor.
Voltar (para o dispositivo desconectado)
Se a troca de conexão não for desejada, os usuários poderão reverter a troca. Em alguns casos, faz sentido restaurar a conexão de áudio para minimizar a interrupção. O solicitante vai usar a mensagem abaixo para acionar a reversão:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Voltar (para o dispositivo desconectado) | 0x31 |
2 a 3 | uint16 | Duração dos dados adicionais | 17 |
4 | uint8 | Voltar ao evento anterior | varia 0x01: voltar 0x02: voltar e retomar a reprodução |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.3.1:mudar de volta (para o dispositivo desconectado)
Para fazer uma troca de conexão, um provedor de ponto múltiplo pode encerrar a conexão com um dispositivo de origem de áudio e pausar a sessão de áudio na outra origem de áudio. Por exemplo, suponha que o fone de ouvido multiponto esteja conectado a um tablet e a um dispositivo de seleção de áudio de terceiros. O usuário está assistindo um vídeo no tablet quando recebe uma ligação no smartphone. O smartphone vai acionar uma troca de conexão no fone de ouvido, que precisa interromper a conexão do terceiro dispositivo para se conectar ao smartphone, além de pausar a sessão de mídia no tablet para receber o toque do smartphone. Se o usuário recusar a chamada, o smartphone poderá pedir que o fone de ouvido "volte e continue a reprodução". Ao receber essa solicitação, o fone de ouvido precisa se reconectar ao terceiro dispositivo e continuar a reprodução do vídeo pausado no tablet.
Notificar evento de mudança de multiponto
Para informar aos usuários sobre um evento de chaveamento multiponto, o Seeker de chaveamento de áudio pode mostrar uma notificação. O provedor precisa notificar os buscadores de chave de áudio conectados sobre o evento de troca.
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | O evento de notificação de do provedor de comutação multiponto precisa ser enviado em cada comutação, incluindo a seleção de áudio para a seleção de áudio, a seleção de áudio para a seleção de áudio e a seleção de áudio para a seleção de áudio. |
0x32 |
2 a 3 | uint16 | Duração dos dados adicionais | varia |
4 | uint8 | Motivo da troca Esse valor precisa ser determinado com base no Estado da conexão. Para casos de uso de áudio LE, pode ser útil analisar o mapeamento entre o tipo de contexto de áudio LE e o estado da conexão. Por exemplo, o estado de conexão correspondente aos assistentes de voz é 0x9(áudio LE: streaming de chamadas). Portanto, o motivo da troca iniciada pelos assistentes de voz precisa ser 0x02. |
varia 0x00: não especificado 0x01: mídia (por exemplo, streaming A2DP, streaming de mídia LEA) 0x02: chamada (por exemplo, streaming HFP, streaming de chamada LEA) |
5 | uint8 | Dispositivo de destino | varia 0x01: este dispositivo 0x02: outro dispositivo conectado |
6 - n | utf8 | Nome do dispositivo de destino se o dispositivo de destino for o Seeker de alternância de áudio, usando o nome para o qual o Seeker foi enviado. Caso contrário, use o nome do BT, se não for relevante, usando os dois últimos bytes do endereço. |
varia |
Tabela 4.3.3.2:notificar evento de comutação multiponto
Conferir o status da conexão
O solicitante pode receber o status atual da conexão do provedor:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Conferir o status da conexão | 0x33 |
2 a 3 | uint16 | Duração dos dados adicionais | 0 |
Tabela 4.3.3.3:conferir o status da conexão
Ao receber essa mensagem, o provedor deve responder com o código de mensagem 0x34, notificar o status da conexão.
Notificar o status da conexão
Conforme definido no payload de publicidade do BLE, para provedores multiponto, se o status da conexão mudar, exceto para mudar o pacote de publicidade, o provedor também precisará notificar os buscadores conectados que estão usando a mesma chave de conta sobre a mudança. Se o provedor estiver conectado a um Seeker de chaveamento de áudio e a um Seeker de chaveamento que não seja de áudio, se o Seeker de chaveamento que não seja de áudio estiver ativo, o provedor também precisará notificar o Seeker de chaveamento de áudio conectado sobre o status da conexão (usando a chave de conta do Seeker).
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Notificar o status da conexão | 0x34 |
2 a 3 | uint16 | Duração dos dados adicionais | varia |
4 | uint8 | Flag de dispositivo ativo | varia 0x00: o Seeker é passivo, e o dispositivo ativo está usando a mesma chave de conta 0x01: o Seeker é o dispositivo ativo 0x02: o Seeker é passivo, e o dispositivo ativo não é um Seeker de alternância de áudio. |
5 - n | Status da conexão criptografada | varia | |
n+1 - n+8 | Valor de uso único da mensagem | varia |
Tabela 4.3.3.4:notificar o status da conexão
Mensagem de status da conexão criptografada
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
em que:
A chave é derivada da chave da conta em uso. Consulte Anúncios solucionáveis aleatórios.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
O IV é concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, connected_devices), que é definido no BLE advertising payload O byte para comprimento e tipo de campo não deve ser incluído, porque temos o código da mensagem e o comprimento dos dados aqui.
Notificar a conexão iniciada pela seleção de áudio
Os provedores de seleção de áudio podem precisar saber se a troca de conexão é acionada pelo recurso para ter reações diferentes, por exemplo, desativar os ícones de áudio para eventos de seleção de áudio. O buscador envia uma mensagem para notificar o provedor de que essa conexão foi iniciada por um interruptor de áudio.
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Notificar a conexão iniciada pela seleção de áudio | 0x40 |
2 a 3 | uint16 | Duração dos dados adicionais | 17 |
4 | uint8 | Indicação de conexão iniciada pela seleção de áudio | varia 0: essa conexão não foi acionada pelo interruptor de áudio 1: essa foi uma conexão iniciada pelo interruptor de áudio |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.0:notificar a conexão iniciada pela seleção de áudio
Indicar a chave da conta em uso
Se várias chaves de conta no Buscador (por exemplo, vários usuários) estiverem associadas ao provedor, o Buscador vai usar a mensagem abaixo para indicar qual chave de conta está em uso.
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Indicar a chave da conta em uso | 0x41 |
2 a 3 | uint16 | Duração dos dados adicionais | 22 |
4 a 9 | utf8 | String em uso | UTF8 ("em uso") |
10 a 17 | Valor de uso único da mensagem | varia | |
18 a 25 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.1:chave da conta em uso indicada
Ao receber essa mensagem, o provedor pode saber qual chave de conta está em uso verificando o código de autenticação de mensagem.
Enviar dados personalizados
O Seeker de alternância de áudio ativo pode encapsular as informações (por exemplo, o uso de áudio) do fluxo de áudio em um byte de dados personalizado e enviá-las ao provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Enviar dados personalizados | 0x42 |
2 a 3 | uint16 | Duração dos dados adicionais | 17 |
4 | uint8 | Dados personalizados | varia |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.2:enviar dados personalizados
Ao receber os dados personalizados, o provedor vai atualizar o pacote de publicidade para incluir os dados personalizados. Para um provedor multiponto, ele também precisa notificar a mudança de status de conexão para outro Seeker conectado usando a mesma chave de conta.
Definir o destino da conexão de soltar
Em fones de ouvido multiponto, se a conexão preferida a ser descartada não for a menos usada recentemente, os buscadores de alternância de áudio poderão informar ao provedor qual dispositivo descartar usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | uint8 | Troca de áudio | 0x07 |
1 | uint8 | Definir o destino da conexão de soltar | 0x43 |
2 a 3 | uint16 | Duração dos dados adicionais | 17 |
4 | uint8 | Dispositivo conectado de destino a ser descartado | varia 1: este dispositivo |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.3:definir o destino da conexão de descarte