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
|
0bLLLLLLTTT
|
İsteğe bağlı |
s + 2, s + 3, s + 4 | uint8 |
Pil değerleri 0bSVVVVVVV
|
0bSVVVVVV
|
İ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:
- Bir V değeri üretin. Burada:
- İlk 16 bayt K'dir.
- Sonraki baytlar Salt olur.
- 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.