Pil Bildirimi
Bir Sağlayıcı birden fazla bileşen içerdiğinde, Sağlayıcı'ya bu durumu bildirmek için Her bileşen için pil seviyesini araştırır. Buna örnek olarak kulaklığının şarjı açıldığında ve arayan kişinin cihazın pilini bilmesi gerektiğinde ve kılıfın kendisidir.
Bunu yapabilmek için Sağlayıcı, üzerine inşa edilen Hızlı Eşleme Hesap Verileri'ni temel alır. Reklamcılık: Bulunabilir olmadığında.
Hesap verilerine ek olarak, sağlayıcı ek bir alan içermelidir. pil değerlerini belirtmem gerekir. Paket şunları içermelidir:
Sekiz | 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 Önemli Verileri | Zorunlu | ||
s + 1 | uint8 |
Pil seviyesi uzunluğu ve türü 0bLLTTTT
|
0bLLTTTT
|
İsteğe bağlı |
s + 2, s + 3, s + 4 | uint8 |
Pil değerleri 0bSVVVVVVV
|
0bSVVVVVVV
|
İsteğe bağlı |
İzinsiz değişikliği önlemek için yukarıdaki Hesap Anahtarı Verileri biraz pil değerleri eklendiğinde pil bilgilerini içerecek şekilde değiştirilmiştir bahsedeceğim. Normalde, hesap anahtarını oluştururken filtresini uyguladığınızda V değeri, takviye değer bulur. Bunun yerine, pil bilgilerinin reklamı da yapılırken V değeri aşağıdaki gibi oluşturulmalıdır:
- V değerini oluşturun. Bu değer:
- İlk 16 bayt K'dır.
- Sonraki baytlar Salt'tır.
- Kalan baytlar pil bilgisidir (s + 1 - s + 4 arası) (aşağıdaki tabloda belirtilen uzunluk ve bayt türü dahil) için de aynı değeri kullanın.
Yukarıdaki pil uzunluğu ve türü alanında belirtildiği gibi, tür
0b0011
veya 0b0100
.
- 0b0011 - Sağlayıcı, Arayan'ın Pil değerlerinin kullanıcı arayüzü;
- 0b0100 - Sağlayıcı, arayanın göstergeyi gizlemesini istediğinde kullanın. zaten gösteriliyor.
Bunun yaygın bir kullanım alanı, destek kaydı açıldığında 0b0011
kullanmaktır.
Kulaklıklar destek kaydından çıkarıldığında veya tekrar kapatıldığında 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];
}
Takip edilmesini önlemek için, Sağlayıcı, ham pil verilerini her zaman daha iyidir. Bunun yerine, Arayan kişi, Message Stream: Device Information (Mesaj Akışı: Cihaz Bilgileri) bölümüne göz atın.