Pil bildirimi

Bir Sağlayıcı birden fazla bileşen içerdiğinde, Arayan'ı her bileşenin pil seviyesi hakkında bilgilendirmek yararlı olabilir. Buna bir örnek olarak, kulaklık kılıfı açıldığında ve Arayan'ın her bir kulaklığın ve kılıfın kendisinin pil durumunu bilmesi gerektiği durum verilebilir.

Bunu yapmak için Sağlayıcı, Reklam: Keşfedilemediğinde başlıklı makalede açıklanan Fast Pair Hesap Verileri'nin üzerine inşa edilmiş reklamda ek bilgiler sağlayabilir.

Sağlayıcı, Hesap Verileri'ne ek olarak pil değerlerini belirten ek bir alan da içermelidir. Pakette aşağıdakiler yer almalıdır:

Octet Veri türü Açıklama Değer Zorunlu mu?
0 uint8 Bayraklar 0x00
(tüm bitler gelecekte kullanılmak üzere ayrılmıştır)
Zorunlu
1 - sn Hesap Anahtarı Verileri Zorunlu
s + 1 uint8 Pil seviyesi uzunluğu ve türü
0bLLLLTTTT
  • L = Pil değerlerinin sayısı
  • T = type
0bLLLLTTTT
  • length = 0b0011 = 3 pil değeri
  • type = 0b0011 (kullanıcı arayüzü göstergesini göster) veya 0b0100 (kullanıcı arayüzü göstergesini gizle)
İsteğe bağlı
s + 2, s + 3, s + 4 uint8 Pil değerleri
0bSVVVVVVV
  • S = durum (şarj ediliyor veya şarj edilmiyor)
  • V = değer
  • Pil değerleri sol kulaklık (s + 2), sağ kulaklık (s + 3) ve kutu (s + 4) şeklinde sıralanmalıdır.
0bSVVVVVVV
  • status = 0b1 (şarj oluyor) veya 0b0 (şarj olmuyor)
  • değer = yüzde 0 ile 100 arasında değişen pil seviyesi, bilinmeyen için 0bS1111111.
İsteğe bağlı

Kurcalamayı önlemek için, pil değerleri reklama dahil edildiğinde yukarıdaki Hesap Anahtarı Verileri, pil bilgilerini içerecek şekilde biraz değiştirilir. Normalde, hesap anahtarı filtresi oluşturulurken hesap anahtarı ile tuzun birleştirilmesiyle V değeri üretilir. Bunun yerine, pil bilgileri de reklamı yapılıyorsa V değeri aşağıdaki gibi oluşturulmalıdır:

  1. Aşağıdaki koşulların geçerli olduğu bir V değeri oluşturun:
    1. İlk 16 bayt K'dir.
    2. Sonraki baytlar Salt'tır.
    3. Kalan baytlar, pil bilgileridir (yukarıdaki tablodaki uzunluk ve tür baytı dahil olmak üzere s + 1 ile s + 4 arasında).

Yukarıdaki pil uzunluğu ve türü alanında belirtildiği gibi, tür 0b0011 veya 0b0100 olabilir.

  • 0b0011: Sağlayıcı, Arayan'ın kullanıcı arayüzünde pil değerlerinin gösterilmesini istediğinde kullanılır.
  • 0b0100 - Sağlayıcı, Arayan'ın halihazırda gösteriliyorsa belirtiyi gizlemesini istediğinde kullanılır.

Bu işlevin yaygın kullanım alanlarından biri, kutu açıldığında 0b0011, kulaklıklar kutudan çıkarıldığında veya kutu tekrar kapatıldığında ise 0b0100 kullanmaktır.

  //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];
  }

Takibi önlemek için Sağlayıcı, ham pil verilerini her zaman reklama dahil etmemelidir. Bunun yerine, bir Seeker'a bağlandığında Message Stream üzerinden gönderilebilir. Message Stream: Device Information (Mesaj Akışı: Cihaz Bilgileri) başlıklı makaleyi inceleyin.