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
|
0bLLLLTTTT
|
İsteğe bağlı |
| s + 2, s + 3, s + 4 | uint8 |
Pil değerleri 0bSVVVVVVV
|
0bSVVVVVVV
|
İ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:
- Aşağıdaki koşulların geçerli olduğu bir V değeri oluşturun:
- İlk 16 bayt K'dir.
- Sonraki baytlar Salt'tır.
- 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.