Notificación de batería

Cuando un proveedor incluye varios componentes, puede ser útil notificar al Busca el nivel de batería de cada componente. Un ejemplo de esto sería cuando se abre la funda de los auriculares y el Seeker necesita conocer el nivel de batería del cada auricular y la funda en sí.

Para lograr esto, un Proveedor puede incluir información adicional en la basada en los datos de cuenta de Vinculación rápida que se describen en Publicidad: Cuando no es detectable.

Además de los Datos de la Cuenta, el Proveedor debe incluir un campo adicional especificando los valores de la batería. El paquete debe contener lo siguiente:

Octeto Tipo de datos Descripción Valor ¿Obligatorio?
0 uint8 Marcas 0x00
(todos los bits reservados para uso futuro)
Obligatorio
1: s Datos clave de la cuenta Obligatorio
s + 1 uint8 Tipo y longitud de la batería
0bLLTTTT
  • L = Cantidad de valores de batería
  • T = tipo
0bLLTTTT
  • longitud = 0b0011 = 3 valores de batería
  • tipo = 0b0011 (mostrar indicación de IU) o 0b0100 (ocultar indicación de IU)
Opcional
s + 2, s + 3, s + 4 uint8 Valores de la batería
0bSVVVVVVV
  • S = estado (cargando o no se está cargando)
  • V = valor
  • Los valores de la batería deben ordenarse como auricular izquierdo (s + 2), auricular derecho (s + 3) y funda (s + 4).
0bSVVVVVVV
  • estado = 0b1 (cargando) o 0b0 (no se está cargando)
  • value = nivel de batería de 0 a 100 por ciento, 0bS1111111 para desconocido.
Opcional

Para evitar la manipulación, los Datos clave de la cuenta anteriores deben ser ligeramente se modificarán para incluir información sobre la batería cuando se incluyan sus valores en el anuncio. Normalmente, al crear la clave de la cuenta filtro, se produce un valor V combinando la cuenta con una sal. Cuando también se anuncia información sobre la batería, el el valor V debe construirse de la siguiente manera:

  1. Genera un valor V, en el que:
    1. Los primeros 16 bytes son K.
    2. Los siguientes bytes son la sal.
    3. Los bytes restantes son la información de la batería (de s + 1 a s + 4). incluida la longitud y el tipo de byte de la tabla anterior).

Como se indica en el campo de tipo y longitud de la batería anterior, el tipo puede ser de 0b0011 o 0b0100.

  • 0b0011: Úsalo cuando el proveedor quiere que el buscador muestre una indicación en la IU de los valores de batería
  • 0b0100: Úsalo cuando el proveedor quiere que el buscador oculte la indicación si corresponde. ya se muestra.

Un caso de uso común es usar 0b0011 cuando el caso se abrió y 0b0100 cuando se hayan quitado los auriculares de la funda o se vuelvan a cerrar.

  //The sample code demonstrates that the headset only reports the battery level.

  #define FASTPAIR_ACCOUNT_KEY_SIZE 16

  // In the sample code, the size of salt is 2 bytes.
  #define SALT_SIZE 2

  // 1st byte - Battery level length and type
  // 2nd~4th bytes - Battery values
  #define BAT_LEVEL_SIZE 3

  uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE + BAT_LEVEL_SIZE + 1] = {0};
  int v_index = 0;

  // The first 16 bytes are K.
  uint8_t K[FASTPAIR_ACCOUNT_KEY_SIZE] = {0};
  fastpair_get_account_key_by_index(keyIndex, K);
  memcpy(V, K, FASTPAIR_ACCOUNT_KEY_SIZE);
  v_index = v_index + FASTPAIR_ACCOUNT_KEY_SIZE;

  // The next byte is the Salt.
  uint8_t randomSalt = (uint8_t)rand();
  V[v_index] = randomSalt;
  v_index = v_index + SALT_SIZE;

  // The remaining bytes are the battery information (from s + 1 to s + 4 including the length and type bytes).

  uint8_t battery_level_len = 0;
  uint8_t battery_level[BAT_LEVEL_SIZE] = {0};

  fastpair_get_bat_level(&battery_level_len, battery_level);

  // type = 0b0011 (show UI indication) or 0b0100 (hide UI indication)
  V[v_index] = (battery_level_len << 4 | (is_show_ui ? 0x3 : 0x4));
  v_index = v_index + 1;

  for (int idx = 0; idx < battery_level_len; idx++) {
          V[v_index++] = battery_level[idx];
  }

Para evitar seguimientos, el Proveedor no debe incluir datos sin procesar sobre la batería en el todo el tiempo. En su lugar, se puede enviar a través de RFCOMM cuando está conectado a un buscador, consulta Flujo de mensajes: Información del dispositivo.