Akkubenachrichtigung
Wenn ein Anbieter mehrere Komponenten hat, kann es hilfreich sein, den Suchenden über den Akkustand für jede Komponente zu informieren. Ein Beispiel dafür ist, wenn ein Kopfhörer-Case geöffnet ist und der Nutzer den Akku für jeden einzelnen Kopfhörer und das Case selbst wissen muss.
Zu diesem Zweck kann ein Anbieter zusätzliche Informationen in das Advertising einbinden, die auf den Kontodaten für schnelles Pairing aufbaut, die unter Werbung: Wenn nicht sichtbar beschrieben wird.
Zusätzlich zu den Kontodaten sollte der Anbieter ein zusätzliches Feld mit den Akkuwerten hinzufügen. Das Paket muss Folgendes enthalten:
Oktett | Datentyp | Beschreibung | Wert | Obligatorisch? |
---|---|---|---|---|
0 | uint8 |
Flags | 0 x 00 (alle Bits für die zukünftige Verwendung reserviert) |
Erforderlich |
1–Sek. | Kontoschlüsseldaten | Erforderlich | ||
S + 1 | uint8 |
Länge und Typ des Akkuladestands 0bLLLLTTTT
|
0bLLLLTTT
|
Optional |
s + 2, s + 3, s + 4 | uint8 |
Akkuwerte 0bSVVVVVVV
|
0bSVVVVVVV
|
Optional |
Um Manipulationsversuche zu verhindern, sollten die oben stehenden Kontoschlüsseldaten leicht geändert werden, sodass sie auch Akkuinformationen enthalten, wenn die Akkuwerte in der Anzeige zu sehen sind. Beim Erstellen des Kontoschlüsselfilters wird normalerweise der Wert V durch Kombination des Kontoschlüssels mit einem Salt erzeugt. Wenn stattdessen auch Akkuinformationen beworben werden, sollte der Wert V so erstellt werden:
- Erzeugen Sie einen Wert V, wobei Folgendes gilt:
- Die ersten 16 Byte sind K.
- Die nächsten Byte sind Salt.
- Die verbleibenden Byte sind die Akkuinformationen (von s + 1 bis s + 4 einschließlich des Längen- und Typbyte aus der obigen Tabelle).
Wie oben im Feld „Akkulänge und -typ“ angegeben, kann der Typ entweder 0b0011
oder 0b0100
sein.
- 0b0011 – Verwenden, wenn der Anbieter möchte, dass der Suchende auf der Benutzeroberfläche einen Hinweis auf die Akkuwerte anzeigt;
- 0b0100 – Wird verwendet, wenn der Anbieter möchte, dass der Suchende den Hinweis ausblendet, wenn er bereits angezeigt wird.
Ein häufiger Anwendungsfall dafür ist 0b0011
, wenn das Case geöffnet wurde, und 0b0100
, wenn die Kopfhörer aus dem Case entfernt oder wieder geschlossen wurden.
//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];
}
Um das Tracking zu verhindern, sollte der Anbieter nicht ständig unbearbeitete Akkudaten in die Werbung aufnehmen. Sie kann stattdessen über RFCOMM gesendet werden, wenn eine Verbindung mit einem Seeker besteht. Siehe Message Stream: Geräteinformationen.