Notification relative à la batterie

Lorsqu'un fournisseur inclut plusieurs composants, il peut être utile d'informer le Cherche le niveau de batterie de chaque composant. Par exemple, Lorsque l'étui des écouteurs est ouvert et que le Seeker doit connaître le niveau de batterie pour pour chaque écouteur et le boîtier lui-même.

Pour ce faire, un fournisseur peut inclure des informations supplémentaires dans le champ basée sur les Données de compte Association express décrites dans la section Publicité : lorsqu'elle n'est pas visible :

En plus des Données du compte, le Fournisseur doit inclure un champ supplémentaire spécifiant les valeurs de la batterie. Le paquet doit contenir les éléments suivants:

Octet Type de données Description Valeur Obligatoire ?
0 uint8 Options 0x00
(tous les bits réservés pour une utilisation ultérieure)
Obligatoire
1 - s Données de la clé du compte Obligatoire
s + 1 uint8 Type et longueur du niveau de batterie
0bLLLLTTTT
  • L = Nombre de valeurs de la batterie
  • T = type
0bLLLLTTTT
  • longueur = 0b0011 = 3 valeurs de la batterie
  • type = 0b0011 (afficher l'indication de l'interface utilisateur) ou 0b0100 (masquer l'indication de l'interface utilisateur)
Facultatif
s + 2, s + 3, s + 4 uint8 Valeurs de la batterie
0bSVVVVVVV
  • S = état (en charge ou non)
  • V = valeur
  • Les valeurs de la batterie doivent être classées comme suit : écouteur gauche (s+2), écouteur droit (s+3) et étui (s+4).
0bSVVVVVVV
  • état = 0b1 (chargement en cours) ou 0b0 (pas en charge)
  • value = niveau de la batterie compris entre 0 et 100 %, 0bS1111111 pour un niveau inconnu.
Facultatif

Pour éviter toute falsification, les données de la clé de compte ci-dessus doivent être légèrement modifié de façon à inclure les informations sur la batterie lorsque les valeurs des piles sont incluses dans la publicité. Normalement, lorsque vous créez la clé de compte filtre, une valeur V est générée en combinant les valeurs avec une valeur salt. Au lieu de cela, lorsque des informations sur la batterie sont également annoncées, la valeur V doit être construite comme suit:

  1. Génère une valeur V, où: <ph type="x-smartling-placeholder">
      </ph>
    1. Les 16 premiers octets correspondent à K.
    2. Les octets suivants sont le Salt.
    3. Les octets restants correspondent aux informations sur la batterie (de s + 1 à s + 4). y compris la longueur et l'octet de type indiqués dans le tableau ci-dessus).

Comme indiqué dans les champs relatifs à la longueur et au type de la batterie ci-dessus, il peut s'agir de l'un des types suivants : 0b0011 ou 0b0100.

  • 0b0011 : à utiliser lorsque le fournisseur souhaite que le demandeur affiche une indication dans le UI des valeurs de la batterie
  • 0b0100 : à utiliser lorsque le fournisseur souhaite que le demandeur masque l'indication s'il s'affiche déjà.

Un cas d'utilisation courant consiste à utiliser 0b0011 lorsque le cas est ouvert et 0b0100 lorsque les écouteurs ont été retirés de l'étui ou rabattus.

  //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];
  }

Pour empêcher le suivi, le Fournisseur ne doit pas inclure de données brutes sur la batterie dans le en permanence. Il peut être envoyé via RFCOMM lorsqu'il est connecté à Si vous êtes en quête d'informations sur l'appareil, consultez la page Flux de messages: informations sur les appareils.