Notification de batterie
Lorsqu'un fournisseur inclut plusieurs composants, il peut être utile d'informer le demandeur du niveau de batterie de chaque composant. Par exemple, lorsque l'étui pour écouteurs est ouvert et que le demandeur doit connaître le niveau de batterie de chaque écouteur et de l'étui lui-même.
Pour ce faire, un fournisseur peut inclure des informations supplémentaires dans l' annonce, en plus des données de compte Association express décrites dans Publicité : lorsque l'appareil n'est pas détectable.
En plus des données de compte, le fournisseur doit inclure un champ supplémentaire spécifiant les valeurs de batterie. Le paquet doit contenir les éléments suivants :
| Octet | Type de données | Description | Valeur | Obligatoire ? |
|---|---|---|---|---|
| 0 | uint8 |
Drapeaux | 0x00 (tous les bits sont réservés pour une utilisation ultérieure) |
Obligatoire |
| 1 - s | Données de clé de compte | Obligatoire | ||
| s + 1 | uint8 |
Longueur et type du niveau de batterie 0bLLLLTTTT
|
0bLLLLTTTT
|
Facultatif |
| s + 2, s + 3, s + 4 | uint8 |
Valeurs de batterie 0bSVVVVVVV
|
0bSVVVVVVV
|
Facultatif |
Pour éviter toute falsification, les données de clé de compte ci-dessus doivent être légèrement modifiées afin d'inclure des informations sur la batterie lorsque les valeurs de batterie sont incluses dans l'annonce. Normalement, lors de la création du filtre de clé de compte, une valeur V est générée en combinant la clé de compte avec un sel. En revanche, lorsque des informations sur la batterie sont également diffusées, la valeur V doit être construite comme suit :
- Générez une valeur V, où :
- Les 16 premiers octets sont K.
- Les octets suivants sont le sel.
- Les octets restants sont les informations sur la batterie (de s + 1 à s + 4, y compris l'octet de longueur et de type du tableau ci-dessus).
Comme indiqué dans le champ de longueur et de type de batterie ci-dessus, le type peut être 0b0011 ou 0b0100.
- 0b0011 : à utiliser lorsque le fournisseur souhaite que le demandeur affiche une indication des valeurs de batterie dans l'UI ;
- 0b0100 : à utiliser lorsque le fournisseur souhaite que le demandeur masque l'indication si elle est déjà affichée.
Un cas d'utilisation courant consiste à utiliser 0b0011 lorsque le boîtier est ouvert et 0b0100 lorsque les écouteurs ont été retirés du boîtier ou que celui-ci a été refermé.
//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 éviter le suivi, le fournisseur ne doit pas inclure de données de batterie brutes dans l'annonce en permanence. Elles peuvent être envoyées via un flux de messages lorsqu' un demandeur est connecté. Pour en savoir plus, consultez Flux de messages : informations sur l'appareil.