Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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:
- Génère une valeur V, où:
<ph type="x-smartling-placeholder">
</ph>
- Les 16 premiers octets correspondent à K.
- Les octets suivants sont le Salt.
- 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.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/08/13 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/08/13 (UTC)."],[[["\u003cp\u003eProviders can include battery information for multiple components (e.g., earbuds and case) in the advertisement data using a specific format.\u003c/p\u003e\n"],["\u003cp\u003eThe advertisement data includes battery levels for each component and flags to control UI indication on the Seeker device.\u003c/p\u003e\n"],["\u003cp\u003eTo prevent tampering, the Account Key Data is modified to include battery information, requiring a specific construction process.\u003c/p\u003e\n"],["\u003cp\u003eProviders can choose to show or hide battery information in the Seeker's UI based on user interaction (e.g., case opening/closing).\u003c/p\u003e\n"],["\u003cp\u003eTo prevent tracking, raw battery data should not be constantly advertised but can be sent securely via RFCOMM after connection.\u003c/p\u003e\n"]]],[],null,["### Battery Notification\n\n| **Note:** Google recommends implementing the [Cryptographic Test Cases](/nearby/fast-pair/specifications/appendix/cryptotestcases \"Link to the Cryptographic Test Cases.\") to ease verification of these requirements.\n\nWhen a Provider includes multiple components, it can be useful to notify the\nSeeker of the battery level for each component. One example of this would be\nwhen a earbuds case is opened and the Seeker needs to know the battery for\neach individual bud and the case itself.\n\nTo accomplish this, a Provider can include additional information in the\nadvertisement, built on top of the Fast Pair Account Data described in\n[Advertising: When not discoverable](/nearby/fast-pair/specifications/service/provider#AdvertisingWhenNotDiscoverable \"Advertizing when not Discoverable\").\n\nIn addition to the Account Data, the Provider should include an additional field\nspecifying the battery values. The packet shall contain the following:\n\n| Octet | Data type | Description | Value | Mandatory? |\n|-----------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|------------|\n| 0 | `uint8` | Flags | 0x00 (all bits reserved for future use) | Mandatory |\n| 1 - *s* | | Account Key Data | Mandatory | |\n| *s + 1* | `uint8` | Battery level length and type 0bLLLLTTTT - L = Number of battery values - T = type | 0bLLLLTTTT - length = 0b0011 = 3 battery values - type = 0b0011 (show UI indication) or 0b0100 (hide UI indication) | Optional |\n| *s + 2* , *s + 3* , *s + 4* | `uint8` | Battery values 0bSVVVVVVV - S = status (charging or not charging) - V = value - The battery values should be ordered as left bud (*s + 2* ), right bud (*s + 3* ) and case (*s + 4*). | 0bSVVVVVVV - status = 0b1 (charging) or 0b0 (not charging) - value = battery level ranging from 0 to 100 percent, 0bS1111111 for unknown. | Optional |\n\nTo prevent tampering, the Account Key Data above shall be slightly\nmodified to include battery information when the battery values are included\nin the advertisement. Normally, when building the [account key\nfilter](/nearby/fast-pair/specifications/service/provider#AccountKeyFilter \"Account Key Filter\"), a value *V* is produced by combining the account\nkey with a salt. Instead, when battery information is also being advertised, the\nvalue *V* should be constructed as follows:\n\n1. Produce a value *V* , where:\n 1. The first 16 bytes are *K*.\n 2. The next bytes are the [Salt](/nearby/fast-pair/specifications/service/provider#SaltField \"Salt Field\").\n 3. The remaining bytes are the battery information (from *s + 1* to *s + 4* including the length and type byte from the table above).\n\nAs noted in the battery length and type field above, the type can be either\n`0b0011` or `0b0100`.\n\n- 0b0011 - Use when the Provider wants the Seeker to show an indication in the UI of the battery values;\n- 0b0100 - Use when the Provider wants the Seeker to hide the indication if it is already showing.\n\nOne common use case for this is to use `0b0011` when the case has opened and\n`0b0100` when buds have been removed from the case or it has been closed again. \n\n //The sample code demonstrates that the headset only reports the battery level.\n\n #define FASTPAIR_ACCOUNT_KEY_SIZE 16\n\n // In the sample code, the size of salt is 2 bytes.\n #define SALT_SIZE 2\n\n // 1st byte - Battery level length and type\n // 2nd~4th bytes - Battery values\n #define BAT_LEVEL_SIZE 3\n\n uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE + BAT_LEVEL_SIZE + 1] = {0};\n int v_index = 0;\n\n // The first 16 bytes are K.\n uint8_t K[FASTPAIR_ACCOUNT_KEY_SIZE] = {0};\n fastpair_get_account_key_by_index(keyIndex, K);\n memcpy(V, K, FASTPAIR_ACCOUNT_KEY_SIZE);\n v_index = v_index + FASTPAIR_ACCOUNT_KEY_SIZE;\n\n // The next byte is the Salt.\n uint8_t randomSalt = (uint8_t)rand();\n V[v_index] = randomSalt;\n v_index = v_index + SALT_SIZE;\n\n // The remaining bytes are the battery information (from s + 1 to s + 4 including the length and type bytes).\n\n uint8_t battery_level_len = 0;\n uint8_t battery_level[BAT_LEVEL_SIZE] = {0};\n\n fastpair_get_bat_level(&battery_level_len, battery_level);\n\n // type = 0b0011 (show UI indication) or 0b0100 (hide UI indication)\n V[v_index] = (battery_level_len \u003c\u003c 4 | (is_show_ui ? 0x3 : 0x4));\n v_index = v_index + 1;\n\n for (int idx = 0; idx \u003c battery_level_len; idx++) {\n V[v_index++] = battery_level[idx];\n }\n\nTo prevent tracking, the Provider should not include raw battery data in the\nadvertisement all the time. It can instead be sent via RFCOMM when connected to\na Seeker, see [Message Stream: Device Information](/nearby/fast-pair/specifications/extensions/deviceinformation \"Message Stream: Device Information\")."]]