Benachrichtigung zum Akku

Wenn ein Anbieter mehrere Komponenten umfasst, kann es sinnvoll sein, den Suchenden über den Akkustand jeder Komponente zu informieren. Ein Beispiel hierfür ist das Öffnen eines Kopfhörer-Ladecase. Der Suchende muss dann den Akkustand jedes einzelnen Kopfhörers und des Case selbst kennen.

Dazu kann ein Anbieter zusätzliche Informationen in die Anzeige einfügen, die auf den in Werbung: Wenn nicht auffindbar beschriebenen Fast Pair-Kontodaten basieren.

Zusätzlich zu den Kontodaten sollte der Anbieter ein zusätzliches Feld mit den Akkuwerten angeben. Das Paket muss Folgendes enthalten:

Oktett Datentyp Beschreibung Wert Obligatorisch?
0 uint8 Flags 0x00
(alle Bits für zukünftige Verwendung reserviert)
Obligatorisch
1 – s Kontoschlüsseldaten Obligatorisch
s + 1 uint8 Länge und Typ des Akkustands
0bLLLLTTTT
  • L = Anzahl der Akkuwerte
  • T = Typ
0bLLLLTTTT
  • Länge = 0b0011 = 3 Akkustands-Werte
  • type = 0b0011 (UI-Hinweis anzeigen) oder 0b0100 (UI-Hinweis ausblenden)
Optional
s + 2, s + 3, s + 4 uint8 Akkustandswerte
0bSVVVVVVV
  • S = Status (wird geladen oder nicht)
  • V = Wert
  • Die Akkuwerte sollten in der Reihenfolge linker Kopfhörer (s + 2), rechter Kopfhörer (s + 3) und Case (s + 4) angegeben werden.
0bSVVVVVVV
  • status = 0b1 (wird geladen) oder 0b0 (wird nicht geladen)
  • value = Akkustand zwischen 0 und 100 Prozent, 0bS1111111 für unbekannt.
Optional

Um Manipulationen zu verhindern, werden die oben genannten Kontoschlüsseldaten leicht modifiziert, um Akkuinformationen einzuschließen, wenn die Akkuwerte in der Anzeige enthalten sind. Normalerweise wird beim Erstellen des Filters für den Kontoschlüssel ein Wert V durch Kombinieren des Kontoschlüssels mit einem Salt erzeugt. Wenn auch Akkuinformationen beworben werden, sollte der Wert V stattdessen so konstruiert werden:

  1. Erstelle einen Wert V, wobei:
    1. Die ersten 16 Bytes sind K.
    2. Die nächsten Bytes sind das Salt.
    3. Die verbleibenden Bytes sind die Akkuinformationen (von s + 1 bis s + 4, einschließlich des Längen- und Typ-Byte aus der Tabelle oben).

Wie oben im Feld „Akkulänge und -typ“ angegeben, kann der Typ entweder 0b0011 oder 0b0100 sein.

  • 0b0011: Wird verwendet, wenn der Anbieter möchte, dass der Suchende in der Benutzeroberfläche eine Anzeige der Akkuwerte einblendet.
  • 0b0100 – Wird verwendet, wenn der Anbieter möchte, dass der Suchende die Anzeige ausblendet, falls sie bereits angezeigt wird.

Ein häufiger Anwendungsfall ist die Verwendung von 0b0011, wenn das Case geöffnet wurde, und von 0b0100, wenn die Kopfhörer aus dem Case entfernt oder das Case wieder geschlossen wurde.

  //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 Tracking zu verhindern, sollte der Anbieter nicht ständig Rohdaten zur Batterie in die Werbung einfügen. Stattdessen können sie über den Message Stream gesendet werden, wenn eine Verbindung zu einem Seeker besteht. Weitere Informationen finden Sie unter Message Stream: Device Information.