Pil Bildirimi

Bir Sağlayıcı birden fazla bileşen içerdiğinde, Arayan'a her bileşenin pil düzeyini bildirmek yararlı olabilir. Buna örnek olarak, bir kulaklık kutusu açıldığında ve Arayan'ın her kulaklık ve kılıfın pilinin şarjı hakkında bilgi sahibi olması gerekir.

Sağlayıcı bunu yapmak için Reklamcılık: Bulunabilir olmadığında bölümünde açıklanan Hızlı Eşleme Hesabı Verilerinin üzerine inşa edilen reklama ek bilgiler ekleyebilir.

Hesap Verileri'nin yanı sıra Sağlayıcı, pil değerlerini belirten ilave bir alan da dahil etmelidir. Paket, şunları içermelidir:

Sekizli Veri türü Açıklama Değer Zorunlu mu?
0 uint8 Bayraklar 0x00
(tüm bitler gelecekte kullanım için 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ğeri sayısı
  • T = tür
0bLLLLLLTTT
  • uzunluk = 0b0011 = 3 pil değeri
  • type = 0b0011 (kullanıcı arayüzü göstergesini göster) veya 0b0100 (kullanıcı arayüzü gösterimini gizle)
İsteğe bağlı
s + 2, s + 3, s + 4 uint8 Pil değerleri
0bSVVVVVVV
  • S = durum (şarj ediliyor veya şarj olmuyor)
  • V = değer
  • Pil değerleri sol kulaklık (s + 2), sağ kulaklık (s + 3) ve kılıf (s + 4) şeklinde sıralanmalıdır.
0bSVVVVVV
  • durum = 0b1 (şarj oluyor) veya 0b0 (şarj olmuyor)
  • değer = pil seviyesi yüzde 0 ile 100 arasında, bilinmiyor için 0bS1111111.
İsteğe bağlı

Yukarıda belirtilen Hesap Anahtar Verileri, izinsiz olarak değiştirilmesini önlemek amacıyla, pil değerleri reklama eklendiğinde pil bilgilerini içerecek şekilde biraz değiştirilmelidir. Normalde, hesap anahtarı filtresi oluşturulurken hesap anahtarı bir takviye ile birleştirilerek V değeri üretilir. Bunun yerine, pil bilgilerinin reklamı yapılırken V değeri aşağıdaki gibi yapılandırılmalıdır:

  1. Bir V değeri üretin. Burada:
    1. İlk 16 bayt K'dir.
    2. Sonraki baytlar Salt olur.
    3. Kalan baytlar pil bilgileridir (yukarıdaki tablodaki uzunluk ve tür baytı dahil olmak üzere s + 1 ile s + 4 aralığı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 pil değerlerinin kullanıcı arayüzünde bir gösterge göstermesini istediğinde kullanın;
  • 0b0100 - Sağlayıcı, zaten gösteriliyorsa Arayan'ın göstergeyi gizlemesini istediğinde kullanın.

Bunun yaygın kullanım alanlarından biri, kılıf açıldığında 0b0011 ve kulaklıklar kılıftan çıkarıldığında ya da tekrar kapatıldığında 0b0011 kullanmaktır.0b0100

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

İzlemeyi önlemek için Sağlayıcı, reklama her zaman ham pil verileri eklememelidir. Bunun yerine bir Seeker'a bağlandığında RFCOMM aracılığıyla gönderilebilir. Mesaj Akışı: Cihaz Bilgileri bölümüne bakın.