Notificação da bateria

Quando um provedor inclui vários componentes, pode ser útil notificar o Buscador do nível de bateria de cada componente. Um exemplo disso seria quando o estojo dos fones de ouvido é aberto e o usuário precisa saber qual é a bateria de cada fone de ouvido e o estojo.

Para isso, o Provedor pode incluir informações adicionais no criada com base nos Dados da Conta com Pareamento rápido descritos em Publicidade: quando não for detectável.

Além dos dados da conta, o provedor deve incluir um campo adicional especificando os valores da bateria. O pacote precisa conter o seguinte:

Octeto Tipo de dado Descrição Valor Obrigatório?
0 uint8 Sinalizações 0x00
(todos os bits reservados para uso futuro)
Obrigatório
1 – s Dados da chave da conta Obrigatório
s + 1 uint8 Duração e tipo da bateria
0bLLLLTTTT
  • L = número de valores da bateria
  • T = tipo
0bLLLLTTTT
  • comprimento = 0b0011 = 3 valores da bateria
  • type = 0b0011 (mostrar indicação da interface) ou 0b0100 (ocultar indicação de interface)
Opcional
s + 2, s + 3, s + 4 uint8 Valores da bateria
0bSVVVVVVV
  • S = status (carregando ou não carregando)
  • V = valor
  • Os valores da bateria devem ser organizados como fone esquerdo (s + 2), direito (s + 3) e estojo (s + 4).
0bSVVVVVV
  • status = 0b1 (carregando) ou 0b0 (não carregando)
  • valor = nível de bateria entre 0 e 100%, 0bS1111111 para desconhecido.
Opcional

Para evitar adulterações, os dados da chave da conta acima devem ser ligeiramente modificado para incluir informações da bateria quando os valores da bateria são incluídos no anúncio. Normalmente, ao criar a chave de conta filtro, um valor V é produzido combinando o valor da conta chave com um sal. Em vez disso, quando as informações sobre a bateria também são anunciadas, o o valor V deve ser criado da seguinte maneira:

  1. Produza um valor V, em que:
    1. Os primeiros 16 bytes são K.
    2. Os próximos bytes são Salt.
    3. Os bytes restantes são as informações da bateria (de s + 1 a s + 4) incluindo o comprimento e o tipo de byte da tabela acima).

Conforme observado no campo de comprimento da bateria e tipo acima, o tipo pode ser: 0b0011 ou 0b0100.

  • 0b0011 – Use quando o provedor quiser que o buscador mostre uma indicação no IU dos valores da bateria;
  • 0b0100: use quando o provedor quiser que o buscador oculte a indicação se ela já está em exibição.

Um caso de uso comum para isso é usar 0b0011 quando o caso for aberto e 0b0100 quando os fones de ouvido forem removidos do estojo ou fechado novamente.

  //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 o rastreamento, o Provedor não deve incluir dados brutos da bateria no publicidade o tempo todo. Em vez disso, ele pode ser enviado via RFCOMM quando conectado à Um usuário que está procurando, consulte Fluxo de mensagens: informações do dispositivo.