Sağlayıcı Reklam sinyali
Reklam: Bulunabilir olduğunda
Sağlayıcı cihazı BR/EDR bulunabilir olduğunda (yani eşleme modunda), BDE üzerinden Hızlı Eşleme Model Kimlik Verileri'ni gösterir ve BDE adresi döndürülmez.
Reklam aralığı: Bulunabilir olduğunda
Reklamlar arasındaki aralık 100 ms'den (10 Hz) fazla olmamalıdır. Yüksek hız, düşük güç modunda tarama yaparken bile Seeker'ın Sağlayıcı'yı hızlı bir şekilde bulmasına olanak tanır.
Reklam yükü: Hızlı Eşleme Modeli Kimlik Verileri
Reklam, Hizmet Verileri veri türünü (aynı kaynak, Böl. 1.11. UUID, 0xFE2C
ürününün Hızlı Eşleme Hizmeti UUID'si olur. Hizmet verileri şunları içermelidir:
Sekizli | Veri türü | Açıklama | Değer |
---|---|---|---|
0-2 | uint24 |
24 bit model kimliği | değişiklik gösterir |
Reklam: Bulunabilir olmadığında
Sağlayıcı cihaz, bulunabilir olmadığında (yani, eşleme modunda olmadığında) aşağıdaki yönergeleri kullanarak Hızlı Eşleme Hesap Verileri'ni yayınlayacaktır.
Hesap verilerinin reklamını yapmak, yakındaki Arayanların bir sağlayıcının ne zaman kendi hesaplarına ait olduğunu anlamalarını ve önce sağlayıcıyı tekrar eşleme moduna zorlanmadan eşlemeyi başlatmalarını sağlar. Bu, kullanıcı şikayetinin yaygın nedenlerinden biridir. Arama yapanlar, sağlayıcıyla eşlemek için beklemedikleri veya yayının alakalı olmadığı (örneğin, zaten eşlenmişlerse) durumlarda bu yayını yoksayma fırsatı sunarlar. Ayrıca arama yapanlar, hesap verilerinin yanlış yapılandırılmış olması gibi açıkça kötü yayınları otomatik olarak filtreler.
Reklam aralığı: Bulunabilir olmadığında
Reklamlar arasındaki aralık en fazla 250 ms (4 Hz) olmalıdır.
Reklam yükü: Hızlı Eşleme Hesap Verileri
Reklam, Hizmet Verileri veri türünü (Ibid, vb.) Böl. 1.11. UUID, 0xFE2C
ürününün Hızlı Eşleme Hizmeti UUID'si olur. Hizmet verileri şunları içermelidir:
Sekizli | Veri türü | Açıklama | Değer |
---|---|---|---|
0 | uint8 |
Sürüm ve işaretler 0bVVVVFFFF
|
0x00 (gelecekte kullanılmak üzere ayrılmıştır) |
1 - değişiklik gösterir | Hesap Anahtar Verileri | Hesap Anahtarı Listesi boşsa veya 0x00 değişiklik gösterir |
Hesap Anahtar Verileri şunları içerir:
Sekizli | Veri türü | Açıklama | Değer |
---|---|---|---|
0 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0bLLLL0000
|
1 - sn | Hesap Anahtarı Filtresi | değişiklik gösterir | |
s + 1 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0b00100001
|
s + 2 - s + 3 | uint16 |
Salt | değişiklik gösterir |
Hesap Anahtarı Filtresi
Reklamı yapılan Hesap Anahtarı Filtresi, arayan bir kişinin bir Sağlayıcı'nın belirli bir hesap anahtarına sahip olup olmadığını (yanlış pozitif olasılığı düşük, ortalama %0,5'ten çok daha az) diğer etkileşimlerden önce hızlı bir şekilde kontrol etmesini sağlar. Arayan, otomatik olarak bağlanıp 0 türünde yayınlanan bir filtre gördüğünde (ör. kullanıcı arayüzü göstergesine sahip olduğunu ve bu filtrenin hesap anahtarlarından birini içerdiğini göstererek), yanlış pozitif sonuç oranını daha da azaltmak için işlemi başlatmaya çalışabilir. Bazı durumlarda, Sağlayıcı eşleme için hazır değilken Arayan tarafından tanınmak isteyebilir. Örneğin, kulaklıklar kılıfa tekrar konulduğunda, eşleme başlık tarafından reddedilebileceği için sonraki eşleme bildirimini göstermeyi durdurmak isteriz.
Hesap Anahtarı Filtresi, aşağıdaki şekilde oluşturulan değişken uzunlukta bir Çiçek filtresidir:
- Kalıcı Hesap Anahtarı listesinde n hesap anahtarı sayısı (n >= 1) olsun.
- Filtrenin bayt cinsinden boyutu olan s'nin (1,2*n + 3) kısaltılmasına izin verin. Örneğin, 1 anahtar kalıcıysa s = 4 bayttır.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
- F filtresini, her biri 0'a ayarlanmış s baytlık bir dizi olarak başlatın.
uint8_t F[s] = {0};
Kalıcı Hesap Anahtarı listesindeki her hesap anahtarı K için:
a. V harfinin concat(K, Salt) olmasına izin verin.// In the sample code, the size of salt is 2 bytes. #define SALT_SIZE 2 uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE]; for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++) { // concat (K, Salt) fastpair_get_account_key_by_index(keyIndex, V); uint8_t randomSalt = (uint8_t)rand(); V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt; ... }
b. SHA256 kullanarak V'ye karma oluşturma işlemi uygulayarak 32 baytlık bir değer elde edin: H = {H0, ..., H31}.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);
c. H değerini büyük uçlu (X = {X0, ..., X7}) sekiz 4 baytlık imzalanmamış tam sayıya bölün. Burada X0 = 0xH0H1H2H3.
uint32_t X[8]; for (index = 0; index < 8; index++) { X[index] = (((uint32_t)(H[index * 4])) << 24) | (((uint32_t)(H[index * 4 + 1])) << 16) | (((uint32_t)(H[index * 4 + 2])) << 8) | (((uint32_t)(H[index * 4 + 3])) << 0); }
d. Her Xi için:
i. Filtredeki bit sayısını M olarak Xi modifiye edin (s * 8).
ii. F dizinindeki (M / 8) baytı aşağı yuvarlayın.
iii. Bayt içinde, dizindeki biti (%M 8) 1 olarak ayarlayın.
iv. Diğer bir deyişle:// M = Xi % (s * 8) // F[M/8] = F[M/8] | (1 << (M % 8)) for (index = 0; index < 8; index++) { uint32_t M = X[index] % (s * 8); F[M / 8] = F[M / 8] | (1 << (M % 8)); }
Reklamcılık verilerine Hesap Anahtarı Filtresi alanı olarak F filtresini ekleyin. Daha fazla veya daha az anlamlı bayt olmadığından bu değerde bir "endianness" olmadığına dikkat edin. Bayt sırasını değiştirmeyin.
Tuz sahası
Takviye, çiçek filtresi oluşturulurken hesap anahtarlarına eklenen rastgele bir değerdir. Adres rotasyonu arasında izleme olmasını önlemek amacıyla, Sağlayıcı için RPA her güncellendiğinde bu takviye değer yeniden oluşturulmalıdır.
Salt kullanarak Hesap Anahtarı Filtresi oluşturmak için:
- Rastgele 2 baytlık bir S oluşturun. Daha fazla veya daha az anlamlı bayt olmadığı için bu değerde bir "endianness" olmadığına dikkat edin. Bayt sırasını değiştirmeyin.
- Takviye olarak 2 baytlık S'yi kullanın.
- Tanıtılan Hızlı Eşleme Hesap Verilerinde, oluşturulan filtreyi Hesap Anahtarı Filtresi alanına ve Tuz alanına S'yi ekleyin.