Interruptor de audio
A medida que los usuarios utilizan cada vez más dispositivos de fuente de audio para realizar sus tareas diarias, se incrementa la demanda de una solución más simple para administrar el uso de auriculares en todos los dispositivos. El cambio de audio cambia las conexiones de los auriculares sin problemas entre dispositivos según la actividad del usuario (p.ej., el inicio de una película) y los eventos priorizados (p.ej., una llamada entrante).
Principios de UX
- El cambio de conexión debe ser rápido y debe basarse en la acción del usuario.
- El cambio de conexión debe ser transparente para los usuarios, lo que debe permitir a los usuarios controlar o revertir si el cambio no es deseable.
- El cambio debe respetar la privacidad del usuario.
Roles
Buscador de interruptores de audio: El usuario es un dispositivo de fuente de audio (por ejemplo, un teléfono o una tablet) que busca auriculares cercanos para conectarse cuando corresponda.
Proveedor de Switch de Audio: Normalmente, el proveedor de auriculares es quien anuncia su presencia y conexión para que los usuarios puedan tomar decisiones de cambio.
Descripción general de los requisitos
Para lograr un cambio inteligente, los proveedores deben cumplir con los siguientes requisitos:
Nombre | Descripción | Requisitos | ¿Obligatorio? |
---|---|---|---|
Escaneo de página | Para aceptar una nueva solicitud de conexión de otro usuario que envía una solicitud, hay una conexión existente. Para proveedores de un solo punto:
|
El modo de escaneo de página de baja latencia (el intervalo de búsqueda no debe superar los 640 ms) para mejorar el rendimiento. Si quieres establecer una compensación entre la duración de la batería y el cambio de rendimiento, el proveedor puede tener un modo de análisis de página predeterminado para la mayoría de los casos (modo de bajo consumo, el de escaneo no debe superar los 1,280 ms). Sin embargo, el modo de latencia baja debe usarse en los siguientes casos:
|
Obligatorio |
Historial de conexiones | Si quieres volver a la conexión anterior y reanudar la reproducción (si corresponde), las comunicaciones a través de las API de flujo de mensajes activarán el cambio. Si corresponde, debes incluir el evento de pausa de audio para reanudar la reproducción. |
Mantener el historial de conexiones e implementar las API de Message Stream | Obligatorio |
Estado de conexión | Para que los usuarios realicen la evaluación de cambio de conexión, el estado de la conexión incluye lo siguiente:
|
Incluir el estado de conexión en los anuncios de BLE y en el flujo de mensajes | Obligatorio |
Cambio en las capacidades del entorno de ejecución | El cambio de audio se puede habilitar mediante la actualización del firmware en el proveedor, por lo que las capacidades deben sincronizarse entre Seeker y el proveedor durante el tiempo de ejecución. | Implementa las API de flujo de mensajes para acceder a las funciones del entorno de ejecución. | Obligatorio |
Reglas de cambio configurables | Permite que Seeker configure la prioridad entre la transmisión de audio activa existente y las nuevas solicitudes de transmisión de audio mediante la configuración de preferencia del usuario. Por ejemplo, es posible que el interruptor de audio proporcione a los usuarios una configuración de IU para habilitar o inhabilitar el cambio automático entre transmisión multimedia y llamadas. El buscador de cambios de audio establecerá y obtendrá la regla de cambio a través de la transmisión de mensajes. |
Solo para proveedores de varios puntos. Implementa las API de flujo de mensajes para que se pueda configurar el cambio de reglas entre dispositivos conectados. |
Opcional |
Cambio de dispositivo activo | Permite que el interruptor de Audio busque simuladors para el cambio de audio entre dispositivos conectados. En el lado del interruptor de audio, es posible que haya una IU para que los usuarios cambien fácilmente entre los dispositivos conectados. |
Solo para proveedores de varios puntos. Implementa las API de flujo de mensajes para el interruptor de audio. Usa esta opción para determinar la fuente de audio activa entre dispositivos conectados. |
Obligatorio |
Notificación de cambio de puntos múltiples | Permite que el buscador de audio muestre la notificación de cambio. | Solo para proveedores de varios puntos. Implementa las API de flujo de mensajes para notificar a quienes buscan el cambio de audio conectados cuando se produce un cambio de varios puntos. |
Obligatorio |
Carga útil publicitaria
El Proveedor deberá incluir su estado de conexión actual en el anuncio, compilado a partir de los datos de la Cuenta de Vinculación Rápida que se describen en Publicidad: Cuando no se pueda detectar.
Ten en cuenta que la versión de la tabla 4.2 es 0x1.
Campo de estado de conexión
Octeta | Tipo de dato | Descripción | Valor | ¿Obligatorio? |
---|---|---|---|---|
0 | uint8 |
Longitud y tipo del campo 0bLLLLTTT
|
0bLLLL0101
|
Obligatorio |
1 | uint8 |
Estado de conexión 0bHAFRSSSS
|
0bHAFRSSSS
|
Obligatorio |
2 | uint8 |
Datos personalizados Actualmente, solo contiene el tipo de contenido que se usa para describir el uso de la transmisión de audio actual. El buscador la enviará al proveedor. |
El valor se envía al buscador de la transmisión activa actual al proveedor a través del flujo de mensajes. 0 si la transmisión activa actual no es de Seeker. | Obligatorio |
3: var | Mapa de bits de dispositivos conectados Un mapa de bits para mostrar qué dispositivos están conectados actualmente al proveedor. Todos los dispositivos unidos se organizan en orden, uno para cada uno. La longitud dependerá de la cantidad de dispositivos unidos del Proveedor. |
El bit asignado a 1 si el dispositivo está conectado al proveedor actualmente es 0. Consulta Mapa de bits de dispositivo conectado para obtener más información. |
Opcional |
Tabla 4.1: Datos sin procesar del campo de estado de conexión
Marcas de conexión
0 bH = detección de cabeza
- 1, en la cabeza ahora
- 0; de lo contrario, no está en la cabeza o no hay sensor OHD
0bA = disponibilidad de conexión
- 1, hay una conexión disponible
- 0; de lo contrario,
0bF = Modo sin distracciones
- 1, en modo enfocado ahora, no se permite el cambio de conexión para el uso de medios; es decir, no hay cambio de A2DP a A2DP
- 0; de lo contrario,
0bR = conectado automáticamente
- 1, si el proveedor vuelve a conectar automáticamente la conexión actual, lo que significa que los usuarios no la conectan (para varios puntos, si una de las conexiones existentes se vuelve a conectar automáticamente, se debe configurar en 1)
- 0; de lo contrario,
Estado de conexión
- 0x0: Sin conexión
- 0x1: paginación
- 0 x 2: conectado, pero sin transferencia de datos
- 0x3: Transferencia de datos que no son de audio (solo cuando se puede cambiar, si no, con 0xF)
- 0x4: Transmisión A2DP, AVRCP no aplicable
- 0x5: Transmisión A2DP y reproducción AVRCP
- 0x6: transmisión HFP (llamada telefónica/voip), incluidos los tonos de banda integrados y los que no lo son
- 0x7: Audio de bajo consumo (transmisión multimedia sin control)
- 0x8: Audio de bajo consumo. Transmisión multimedia con control
- 0x9: Audio de bajo consumo
- 0xA: audio de bajo consumo
- 0xF: Inhabilitar temporalmente el interruptor de conexión (por ejemplo, actualización de firmware)
Mapa de bits de dispositivos conectados
Para evitar el cambio de conexión no deseado, es posible que el Seeker deba saber con qué dispositivos está conectado el visor. Por ejemplo, cuando los auriculares están conectados al teléfono, el usuario no desea que lo interrumpa la conexión que cambia cuando uno de sus miembros inicia YouTube en la tablet.
Ten en cuenta que este mapa de bits es anónimo, el buscador no puede saber qué otros dispositivos están vinculados con el proveedor. Por ejemplo, tomemos 5 dispositivos unidos:
- 0: laptop (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: teléfonoB (0b00x00000)
- 3: tablet (0b000x0000)
- 4: TV (0b0000x000)
Si los dispositivos conectados actuales son una laptop y una tablet, el valor del mapa de bits será 0b10010000. El cambio de orden es aceptable si es inevitable, p.ej., cuando los usuarios restablecen la configuración de fábrica de los auriculares o cuando la cantidad de dispositivos vinculados alcanza el límite superior.
Anuncio reutilizable aleatorio
Para evitar el seguimiento y respetar la privacidad del usuario, el proveedor debe rotar y encriptar el campo según la clave de la cuenta con AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
donde
La clave se deriva de la clave de la cuenta en uso, que se define en la siguiente sección.
La clave se genera mediante la función de HKDF, IETF RFC 5869, mediante la función de hash SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
El proveedor debe usar la clave de cuenta original aquí, es decir, el primer byte de la clave es 0x04, no se incluye en el patrón de uso.
IV (vector inicial) es la sal de 2 bytes de los datos de clave de cuenta con cero relleno, es decir, IV es concat(salt, 14 bytes ZERO).
Los datos sin procesar del estado de conexión se definen en la tabla 4.1; si cambia el estado de la conexión, la sal y el RPA se deben volver a generar en el mismo período de publicidad.
Esto hace que el campo de estado de la conexión encriptada rote al mismo tiempo que los datos de la clave de la cuenta.
La publicidad en BLE estará estructurada de la siguiente manera:
Octeta | Tipo de dato | Descripción | Valor | ¿Obligatorio? |
---|---|---|---|---|
0 | uint8 |
Versión y marcas | 0 × 10 | Obligatorio |
1: t | Datos clave de la cuenta | varía | Obligatorio | |
t+1: s | Datos de la batería | varía | Opcional | |
s+1: var | Datos resolubles aleatorios | varía | Obligatorio si la lista de claves de la cuenta no está vacía; de lo contrario, se excluye. |
Tabla 4.2: Anuncio BLE con datos que se pueden resolver aleatoriamente
Los datos aleatorios reutilizables contienen lo siguiente:
Octeta | Tipo de dato | Descripción | Valor | ¿Obligatorio? |
---|---|---|---|---|
0 | uint8 |
Longitud y tipo del campo 0bLLLLTTT
|
0bLLLL0110
|
Obligatorio |
1: var | Datos encriptados | varía | Obligatorio |
Tabla 4.2.1: Datos aleatorios resolubles
Como ejemplo, si los datos aleatorios aleatorios contienen un campo de estado de conexión encriptado, el resultado desencriptado será el campo de estado de conexión.
Para evitar la manipulación, los datos clave de la cuenta anteriores deben modificarse levemente cuando se incluyan los datos aleatorios aleatorios en el anuncio. Por lo general, cuando se crea el filtro de clave de cuenta, se produce un valor V si se combina el filtro de clave de cuenta con una sal. En cambio, cuando se anuncian datos aleatorios aleatorios, el valor V debe construirse de la siguiente manera:
V = concat(account_key, salt, random_resolvable_data)
Si se anuncian datos de la batería y datos aleatorios aleatorios, V debe construirse de la siguiente manera:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Clave de la cuenta en uso
El cambio de conexión se basa en la cuenta, por lo que el proveedor debe incluir la información de la cuenta de la conexión actual en el anuncio BLE. Si el dispositivo conectado actual es un Seeker de cambio de audio, el proveedor debe poder obtener la clave de la cuenta asociada con este usuario y usarla para encriptar el campo de estado de la conexión. Si la fuente de audio conectada no es un buscador de interruptores de audio, el proveedor debe usar la clave de cuenta que se usó por última vez.
Antes de calcular el filtro de clave de cuenta, el proveedor debe modificar el primer byte de las claves de cuenta para incluir uno de los siguientes patrones en uso:
- 0b00000100
Esta clave de cuenta no está en uso.
Esta es la opción predeterminada (consulta Clave de la cuenta). - 0b00000101
Esta clave de la cuenta es la más reciente que se usó.
El campo de estado de la conexión está encriptado por esta clave de cuenta. No hay información clave de la cuenta del estado de conexión actual. Podría significar que no hay dispositivos conectados o que el dispositivo conectado no es un buscador de interruptores de audio. - 0b00000110
Esta clave de la cuenta es la clave en uso.
El campo de estado de la conexión está encriptado por esta clave de cuenta, y el dispositivo conectado actual está asociado a ella.
Esquema para la carga útil del cambio de audio
En la siguiente figura, se muestra el esquema de la carga útil del cambio de audio.

Mensajes
Cuando se conecta, el buscador y el proveedor pueden usar el flujo de mensajes para sincronizar la capacidad del interruptor de audio, activar un interruptor de conexión, establecer y obtener la preferencia de cambio, notificar el estado de la conexión, etcétera. A continuación, creamos un grupo de mensajes y códigos de mensaje específicos para el cambio de audio.
Nombre del grupo de mensajes | Valor |
---|---|
Cambio de audio | 0 × 07 |
En las siguientes secciones se incluyen detalles adicionales para cada código de mensaje.
Nombre del código del mensaje | Valor | Solo multipunto | Remitente | Respondedor | Encriptar | MAC | Confirmación |
---|---|---|---|---|---|---|---|
Obtén la función de cambio de audio | 0 × 10 | N | Ambos | Ambos, mediante el código 0x11 | N | N | N |
Notificación de la función de cambio de audio | 0 × 11 | N | Ambos | Ambos | N | S | SÍ |
Configura el estado multipunto | 0 × 12 | SÍ | Buscador | Proveedor | N | S | SÍ |
Establece la preferencia de cambio | 0 × 20 | SÍ | Buscador | Proveedor | N | S | SÍ |
Obtener preferencia | 0 × 21 | SÍ | Buscador | Proveedor mediante código 0x22 | N | N | N |
Notificar la preferencia de cambio | 0 × 22 | SÍ | Proveedor | Buscador | N | N | N |
Cómo cambiar la fuente de audio activa(a un dispositivo conectado) | 0 × 30 | SÍ | Buscador | Proveedor | N | S | SÍ |
Volver al estado del dispositivo (desconectado) | 0 × 31 | N | Buscador | Proveedor | N | S | SÍ |
Notificar el evento de cambio de puntos múltiples | 0 × 32 | SÍ | Proveedor | Buscador | N | N | N |
Cómo obtener el estado de la conexión | 0 × 33 | SÍ | Buscador | Proveedor mediante código 0x34 | N | N | N |
Notificar el estado de la conexión | 0 × 34 | SÍ | Proveedor | Buscador | SÍ | N | N |
Notificar la conexión iniciada del interruptor de audio | 0 × 40 | N | Buscador | Proveedor | N | S | SÍ |
Cómo indicar en uso de la clave de cuenta | 0 × 41 | N | Buscador | Proveedor | N | S | SÍ |
Cómo enviar datos personalizados | 0 × 42 | N | Buscador | Proveedor | N | S | SÍ |
Establece un destino para la conexión de soltar | 0 × 43 | SÍ | Buscador | Proveedor | N | S | SÍ |
Tabla 4.3: Mensajes de cambio de audio
MAC de mensajes de cambio de audio
Para proporcionar la autenticación de mensajes, todos los mensajes de cambio de audio con datos adicionales que se envían desde Seeker al proveedor requieren un código de autenticación de mensajes. Cuando se recibe un mensaje con MAC, se debe confirmar para que el buscador sepa si el proveedor reaccionó o no al mensaje.
Si la autenticación de mensajes se realiza correctamente, el proveedor enviará el ACK al mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Declaración | 0xFF |
1 | uint8 | Confirmación | 0 × 01 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | varía |
4 | uint8 | Cambio de audio | 0 × 07 |
5 | uint8 | Código del mensaje de cambio de audio | varía |
6: s | Datos adicionales | varía |
Si falla, el proveedor enviará el NAK para el mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Declaración | 0xFF |
1 | uint8 | NAK | 0 × 02 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 0 x 0,003 |
4 | uint8 | Motivo del error | varía |
5 | uint8 | Cambio de audio | 0 × 07 |
6 | uint8 | Código del mensaje de cambio de audio | varía |
Ten en cuenta que, si el proveedor es el remitente, no se requiere MAC.
Obtener la función del interruptor de Audio
Tanto el proveedor del interruptor de audio como el buscador pueden verificar si el buscador de pares de conexión rápida conectado/el proveedor admite el cambio de audio o no mediante el siguiente mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Obtener la función del interruptor de Audio | 0 × 10 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 0 |
Tabla 4.3.1.0: Obtener capacidad del interruptor de Audio
Notificar la función de cambio de audio
Cuando reciba la capacidad de obtener capacidad del cambio de audio, el buscador de interruptores de audio o el proveedor responderán con una de las siguientes marcas:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Notificar la función de cambio de audio | 0 × 11 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 20 si el remitente lo envía 4 si el proveedor lo envía |
4 - 5 | uint16 | Código de la versión del cambio de audio | Un valor distinto de cero significa que admite el cambio de audio. El código de la versión actual (con mejora de seguridad) es 0x0102. 0x0000 o ninguna respuesta en 1 segundo significa que el interruptor de audio no es compatible con este dispositivo |
Entre 6 y 7 | flags | Indicadores de capacidad de cambio de audio del proveedor Si el mensaje lo envía Seeker, se deben ignorar estos dos bytes. |
varía Consulta Marcas de función de cambio de audio |
8 a 15 | Nonce de mensaje Solo se requiere cuando lo envía el usuario |
varía | |
16 a 23 | Código de autenticación de mensajes Solo se requiere cuando lo envía el usuario |
varía |
Tabla 4.3.1.1: Notificación de la función de cambio de audio
Marcas de capacidad de cambio de audio
Bit 0 (octet 6, MSB): Estado de cambio de audio
- 1, si el estado del cambio de audio está activado
- 0; de lo contrario,
Bit 1: configuración de varios puntos
- 1, si el dispositivo admite la multifunción y se puede alternar entre encender y apagar
- 0; de lo contrario (no admite multipunto o multipunto siempre está activado)
Bit 2: estado actual de varios puntos
- 1, si multipunto está activado
- 0; de lo contrario,
Bit 3: Detección de cabeza
- 1, si este dispositivo admite la detección de cabeza (incluso si la detección de cabeza está desactivada ahora).
- 0; de lo contrario,
Bit 4: estado actual de detección de cabeza
- 1, si la detección de cabeza está activada
- 0; de lo contrario (no es compatible con la detección de cabeza o la detección de cabeza está inhabilitada)
Todos los demás bits se reservan; el valor predeterminado es 0.
Establecer el estado de varios puntos
En buscadores de cambio de audio, podemos proporcionar la configuración para que los usuarios activen o desactiven la funcionalidad de varios puntos. El buscador establecerá el estado multipunto en el proveedor mediante el siguiente mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Establecer el estado de varios puntos | 0 × 12 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 17 |
4 | uint8 | Estado de varios puntos | 0: apagar varios puntos 1: encender varios puntos |
Entre 5 y 12 | Nonce de mensajes | varía | |
13 a 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.1.2: Configura el estado multipunto
Establecer preferencia de cambio
Los usuarios que buscan el cambio de audio pueden modificar la preferencia de cambio de multipunto y configurarla con el proveedor mediante el siguiente mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Establecer preferencia de cambio | 0 × 20 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 18 |
4 | flags | Cambiar preferencia | varía Consulta la marca de preferencia de cambio de puntos múltiples |
5 | Configuración avanzada de cambio Este byte está reservado, el valor predeterminado es 0 |
varía | |
Entre 6 y 13 | Nonce de mensajes | varía | |
14 a 21 | Código de autenticación de mensajes | varía |
Tabla 4.3.2.0: Cómo configurar la preferencia de cambio
Marca de preferencia de cambio multipunto
- Bit 0 (MSB): A2DP frente a A2DP (0 predeterminado)
- Bit 1: HFP frente a HFP (valor predeterminado 0)
- Bit 2: A2DP frente a HFP (valor predeterminado 0)
- Bit 3: HFP frente a A2DP (valor predeterminado 1)
- Bit 4 a 7: reservado
- Arriba se indica como "solicitud de perfil nuevo" en comparación con "perfil activo actual"
- 0 para no cambiar
- 1 para cambiar
Obtener preferencia de cambio
Los usuarios que buscan el audio pueden cambiar la preferencia de cambio de multipunto del proveedor mediante el siguiente mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Obtener la configuración del cambio | 0 × 21 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 0 |
Tabla 4.3.2.1: Obtener preferencia de cambio
Notificar preferencia de cambio
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Notificar preferencia de cambio | 0 × 22 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 2 |
4 | flags | Cambio de marcas de preferencia | varía Consulta la marca de preferencia de cambio de puntos múltiples |
5 | Configuración avanzada de cambio Este byte está reservado, el valor predeterminado debe ser 0 |
varía |
Tabla 4.3.2.2: Notificar la preferencia de cambio
Cambiar fuente de audio activa (a dispositivo conectado)
Los usuarios que buscan el audio pueden cambiar la fuente de audio activa entre los dispositivos conectados usando el siguiente mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Cambiar fuente de audio activa (a dispositivo conectado) | 0 × 30 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 17 |
4 | flags | Cambiar marcas de eventos de fuentes de audio activas | varía Consulta cómo cambiar el evento de fuente de audio activa |
Entre 5 y 12 | Nonce de mensajes | varía | |
13 a 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.3.0: Cambia la fuente de audio activa (a un dispositivo conectado)
Cambiando evento de fuente de audio activa
- Bit 0 (MSB): 1 interruptor a este dispositivo, 0 interruptor al segundo dispositivo conectado
- Bit 1: 1 reanuda la reproducción en el dispositivo después de cambiar; 0, de lo contrario. Si se reanuda la reproducción, el proveedor envía una notificación de PLAY al usuario a través del perfil de AVRCP. Si el estado anterior (antes de cambiar) no era PLAY, el proveedor debería ignorar esta marca.
- Bit 2: 1 rechaza el SCO en el dispositivo apagado; de lo contrario, 0
- Bit 3: 1 desconecta Bluetooth en el dispositivo de apagado. De lo contrario, 0.
- Bit 4 a 7: reservado.
Es posible que los usuarios que realizan búsquedas en cambio de audio no siempre conozcan su estado de forma correcta. Por lo tanto, es posible que el proveedor reciba un mensaje de "cambio en este dispositivo" cuando el usuario ya esté activo. En este caso, para mostrar la IU correcta en Seeker, el proveedor puede enviar un NAK con el motivo del error, 0x4: acción redundante del dispositivo.
Volver (al dispositivo desconectado)
Si el cambio de conexión no es deseado, los usuarios pueden revertir el cambio y, en ciertas situaciones, tiene sentido restablecer la conexión de audio para minimizar la interrupción. El buscador usará el siguiente mensaje para volver a activar el cambio:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Volver (al dispositivo desconectado) | 0 × 31 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 17 |
4 | uint8 | Volver al evento anterior | varía 0x01: volver atrás 0x02: volver atrás y reanudar la reproducción |
Entre 5 y 12 | Nonce de mensajes | varía | |
13 a 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.3.1: Volver (al dispositivo desconectado)
Para los proveedores de varios puntos, a fin de hacer un cambio de conexión, un proveedor puede desconectar la conexión con un dispositivo de fuente de audio y pausar la sesión de audio en la otra fuente. Por ejemplo, supongamos que los auriculares multipunto están conectados a una tablet y un tercer dispositivo conmutador de audio compatible. El usuario mira el video en la tablet cuando hay una llamada entrante en su teléfono. El teléfono activará un interruptor de conexión en los auriculares, que deberá desconectar la tercera conexión del dispositivo para conectarse al teléfono, y también pausar la sesión multimedia en la tablet para obtener el tono del teléfono. Si el usuario rechaza la llamada, es posible que el teléfono le solicite a "los auriculares" que vuelvan a jugar y que vuelvan a jugar. Después de recibir esta solicitud, el visor debe volver a conectarse al tercer dispositivo y reanudar la reproducción del video pausado en la tablet.
Notificar evento de cambio de puntos múltiples
Para informar a los usuarios de que se está llevando a cabo un evento de varios puntos, el Buscador de cambio de audio puede mostrarles una notificación a los usuarios. El proveedor debe notificar a los usuarios que buscan el cambio de audio conectados sobre el evento de cambio.
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Notificar el evento de varios puntos El proveedor debe enviarlo en todos los botones, incluidos el interruptor de Audio en buscador y el que no es de audio, el Buscador de cambio de audio en Buscador |
0 × 32 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | varía |
4 | uint8 | Motivo del cambio | varía 0 x 00: Sin especificar 0 x 01: Transmisión de A2DP 0 x 2: HFP |
5 | uint8 | Dispositivo de destino | varía 0x01: este dispositivo 0x02: otro dispositivo conectado |
6: n | Utf8 | Nombre del dispositivo de destino: Si el dispositivo de destino es Seeker, usa el nombre de Seeker en el que se envió el nombre. De lo contrario, usa el nombre de Bluetooth, si no corresponde. Usa los últimos 2 bytes de la dirección. |
varía |
Tabla 4.3.3.2: Notificar el evento de interruptor de varios puntos
Obtener estado de conexión
El usuario puede obtener el estado de conexión actual del proveedor:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Obtener estado de conexión | 0 × 33 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 0 |
Tabla 4.3.3.3: Obtener el estado de la conexión
Cuando reciba este mensaje, el proveedor responderá con el código de mensaje 0x34 y notificará el estado de la conexión.
Notificar el estado de conexión
Según se define en la carga útil publicitaria de BLE, para los proveedores de puntos múltiples, si el estado de la conexión cambia, excepto para el cambio del paquete publicitario, el proveedor también debe notificar a los usuarios conectados que usan la misma clave de cuenta sobre el cambio. Si el proveedor está conectado con un buscador de botones de audio y otro con audio
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Notificar el estado de conexión | 0 × 34 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | varía |
4 | uint8 | Marca de dispositivo activo | varía 0 x 00: Este usuario es pasivo, y el dispositivo activo usa la misma clave de cuenta 0 x 01: el usuario activo es el dispositivo activo 0 x 2: el usuario es pasivo, y el dispositivo activo no es el interruptor de audio |
5 a n | Estado de conexión encriptada | varía | |
n + 1: n + 8 | Nonce de mensajes | varía |
Tabla 4.3.3.4: Cómo notificar el estado de la conexión
Mensaje de estado de conexión encriptado
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
Donde:
La clave se deriva de la clave en la cuenta en uso, consulta Anuncio resolvable aleatorio.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV es concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, connected_devices) que se define en la carga útil de publicidad de BLE. Ten en cuenta que no se debe incluir el byte de la longitud y el tipo del campo, ya que aquí tenemos el código del mensaje y la longitud de los datos.
Notificar la conexión iniciada del interruptor de audio
Es posible que los proveedores de interruptores de audio necesiten saber si el cambio de conexión se activa por medio del cambio de audio para tener diferentes reacciones, p.ej., inhabilitar los íconos sonoros para eventos de cambio de audio. El usuario que envía el mensaje envía un mensaje para notificar al proveedor que esta conexión es una conexión iniciada por un interruptor de audio.
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Notificar la conexión iniciada del interruptor de audio | 0 × 40 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 17 |
4 | uint8 | Indicación de conexión iniciada por el cambio de audio | varía 0: esta conexión no se activó por medio del interruptor de Audio 1: esta fue una conexión iniciada por un interruptor de Audio |
Entre 5 y 12 | Nonce de mensajes | varía | |
13 a 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.0: Notificar la conexión iniciada del interruptor de audio
Indicar clave de la cuenta en uso
Si hay varias claves de cuenta en el buscador (p.ej., usuarios múltiples) asociadas con el proveedor, el buscador usará el siguiente mensaje para indicar qué clave de cuenta está en uso.
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Indicar clave de la cuenta en uso | 0 × 41 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 22 |
4 - 9 | Utf8 | String en uso | UTF8 ("en uso") |
10 a 17 | Nonce de mensajes | varía | |
18 a 25 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.1: Indica la clave en uso de la cuenta
Después de recibir este mensaje, el proveedor puede verificar qué clave de la cuenta está en uso mediante la verificación del código de autenticación del mensaje.
Enviar datos personalizados
El Buscador de cambio de audio activo puede encapsular la información (p.ej., uso de audio) de la transmisión de audio en un byte de datos personalizado y enviarla al proveedor usando el siguiente mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Enviar datos personalizados | 0 × 42 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 17 |
4 | uint8 | Datos personalizados | varía |
Entre 5 y 12 | Nonce de mensajes | varía | |
13 a 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.2: Enviar datos personalizados
Cuando reciba los datos personalizados, el proveedor actualizará el paquete de publicidad para incluir los datos personalizados. En el caso de un proveedor de varios puntos, también debe notificar el cambio de estado de la conexión a otro Seeker conectado mediante la misma clave de cuenta.
Establecer destino para la conexión de la acción de soltar
En el caso de los auriculares multipunto, si la conexión preferida que quieres desconectar no es la menos usada recientemente, los usuarios que buscan el cambio de audio pueden indicarle al proveedor qué dispositivo debe soltar con el siguiente mensaje:
Octeta | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Cambio de audio | 0 × 07 |
1 | uint8 | Establecer destino para la conexión de la acción de soltar | 0 × 43 |
Entre 2 y 3 | uint16 | Longitud de datos adicionales | 17 |
4 | uint8 | Dispositivo de destino desconectado | varía 1: este dispositivo |
Entre 5 y 12 | Nonce de mensajes | varía | |
13 a 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.3: Establecer destino para la conexión directa
Implementación de referencias
Consulta Biblioteca de SDK incorporada y cercana para ver la implementación de referencia.