Akkubenachrichtigung
Wenn ein Provider mehrere Komponenten umfasst, kann es hilfreich sein, den Suche nach dem Akkuladestand der einzelnen Komponenten. Ein Beispiel: wenn ein Kopfhörer-Case geöffnet ist und der Seeker den Akkustand für und das Lade-Case selbst.
Zu diesem Zweck kann ein Dienstleister zusätzliche Informationen in die Werbung, die auf den Kontodaten über die Funktion „Schnelles Pairing“ aufbaut, die im Artikel Werbung: Wenn nicht sichtbar:
Zusätzlich zu den Kontodaten muss der Dienstleister ein zusätzliches Feld hinzufügen. und gibt die Akkuwerte an. Das Paket muss Folgendes enthalten:
Oktett | Datentyp | Beschreibung | Wert | Obligatorisch? |
---|---|---|---|---|
0 | uint8 |
Flags | 0 x 00 (alle Bits für eine zukünftige Verwendung reserviert) |
Obligatorisch |
1 – s | Kontoschlüsseldaten | Obligatorisch | ||
S + 1 | uint8 |
Länge und Typ des Akkus 0bLLLLTTTT
|
0bLLLLTTT
|
Optional |
s + 2, s + 3, s + 4 | uint8 |
Akkuwerte 0bSVVVVVVV
|
0bSVVVVVVV
|
Optional |
Um Manipulationen zu verhindern, müssen die obigen Kontoschlüsseldaten leicht geändert, um Akkuinformationen anzuzeigen, wenn die Akkuwerte enthalten sind in der Anzeige. Beim Erstellen des Kontoschlüssels Filter, wird der Wert V durch Kombinieren des Kontos mit einem Salt versehen. Wenn stattdessen auch Akkuinformationen beworben werden, muss der Wert V so konstruiert werden:
- Generieren Sie einen Wert V, wobei Folgendes gilt:
<ph type="x-smartling-placeholder">
- </ph>
- Die ersten 16 Byte sind K.
- Die nächsten Bytes sind Salt.
- Die verbleibenden Byte sind die Akkuinformationen (von s + 1 bis s + 4). einschließlich Länge und Typbyte aus der obigen Tabelle).
Wie im Feld für die Länge und den Akkutyp oben angemerkt, sind folgende Typen möglich:
0b0011
oder 0b0100
.
- 0b0011 – Zu verwenden, wenn der Anbieter möchte, dass der Seeker eine Angabe im Benutzeroberfläche der Akkuwerte
- 0b0100 – Verwenden Sie diese Option, wenn der Anbieter möchte, dass der Seeker die Angabe blendet, wenn sie wird bereits angezeigt.
Ein häufiger Anwendungsfall hierfür ist die Verwendung von 0b0011
, wenn der Fall geöffnet und
0b0100
, wenn die Kopfhörer aus dem Lade-Case entfernt wurden 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 eine Nachverfolgung zu verhindern, sollte der Anbieter keine Akku-Rohdaten in die Werbung schalten. Sie kann stattdessen über RFCOMM gesendet werden, wenn eine Verbindung zu Für Seeker siehe Nachrichtenstream: Geräteinformationen.