Sağlayıcı bildirme sinyali
Reklam: Keşfedilebilir olduğunda
Sağlayıcı cihaz BR/EDR tarafından bulunabilir olduğunda (yani eşleme modundayken) Hızlı Eşleme Model Kimliği Verilerini BLE üzerinden bildirir ve BLE adresi değiştirilmez.
Reklam aralığı: Bulunabilir olduğunda
Reklamlar arasındaki aralık 100 ms'den (10 Hz) fazla olmamalıdır. Hızlı bir hız, Arayan'ın, düşük güç modunda tarama yaparken bile Sağlayıcı'yı hızlı bir şekilde bulmasını sağlar.
Reklam yükü: Hızlı Eşleme Model Kimliği Verileri
Reklam, Hizmet Verileri veri türünü içermelidir (aynı yerde). § 1.11. UUID, 0xFE2C'nin Hızlı Eşleme Hizmeti UUID'si olmalıdır. Hizmet verileri şunları içermelidir:
| Sekizli | Veri türü | Açıklama | Değer |
|---|---|---|---|
| 0-2 | uint24 |
24 bit model kimliği | değişir |
LE Audio Paylaşımı Reklam yükü: Hızlı Eşleme Model Kimliği Verileri ve FP Özellik Haritası
Hizmet verileri şunları içerir:
| Sekizli | Veri türü | Açıklama | Değer |
|---|---|---|---|
| 0 | uint8 |
Sürüm ve işaretler 0bVVVVFFFF
|
0x00 |
| 1 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0bLLLL0111
|
| 2 - s | Model Kimliği | değişir | |
| s + 1 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0bLLLL1000
|
| s + 2 | uint8 |
FP Capability Map | değişir |
FP Capability Map
FP Özellik Haritası, Sağlayıcı'nın hangi FP özelliklerini desteklediğini gösteren bir bit eşlemdir. Bit eşlemin ilk baytı aşağıdaki gibi tanımlanır:
| Bit eşlem | Açıklama |
|---|---|
| 0bRRRRRRSO | R - Ayrılmış bit, arayıcı tarafından şimdilik yoksayılır ve 0 olarak ayarlanır. S - FP LE Audio paylaşım desteği (etkinse 1, değilse 0 olarak ayarlanır). O - Kullanıma hazır (OOB) bit, cihaz yeni ise 1 olarak ayarlanır. |
Sağlayıcı, FP LE Audio Paylaşımı spesifikasyonunu destekliyorsa (yani Geçici Eşleme, LE Audio Paylaşımı Reklam Yükü ve İşitilebilir Cihaz Kontrolü Sürüm 2'yi destekliyorsa) FP LE Audio Paylaşımı destek bitini 1 olarak ayarlayın. Aksi takdirde 0 olarak ayarlayın.
Sağlayıcı herhangi bir FP Arayıcı ile eşlenmemişse ve fabrika çıkışlı yeniyse (yani sağlayıcıda FP hesap anahtarı yoksa) OOB bitini 1, aksi takdirde 0 olarak ayarlayın.
Koordineli Set Bilgisi Reklam yükü: Hızlı Eşleme Model Kimliği Verileri ve FP Koordineli Set Bilgisi
Hizmet verileri şunları içerir:
| Sekizli | Veri türü | Açıklama | Değer |
|---|---|---|---|
| 0 | uint8 |
Sürüm ve işaretler 0bVVVVFFFF
|
0x00 |
| 1 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0bLLLL0111
|
| 2 - s | Model Kimliği | değişir | |
| s + 1 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0b01101011
|
| s + 2 - s + 7 | uint48 |
FP Koordineli Set Verileri | 6 baytlık veri, FP Koordineli Set Bilgileri'ne bakın. |
FP Koordineli Set Bilgileri
FP Koordineli Grup Bilgileri, reklam cihazının aynı Koordineli Grup'ta olup olmadığını belirlemek için kullanılır.
| Sekizli | Veri türü | Açıklama | Değer |
|---|---|---|---|
| 0 | uint8 |
Takımdaki Ürün Adedi | değişir |
| 1 | uint8 |
Hızlı Eşleme Koordineli Set Üye Türü | Aşağıdakilerden biri olabilir:
|
| 2 - 5 | uint32 |
Kimlik Çözümleme Anahtarı Karması Ayarlama | değişir |
Kimlik Çözümleme Anahtarı Kümesi'nin karma değerini oluşturmak için kullanılan algoritma:
SIRK değerine karma oluşturma işlemi uygulamak için SHA256 kullanın.
SIRK = 0xe3b0c44298fc1c149afbf4c8996fb924SHA256(SIRK) = 0x2646036bb22781536be710245c8cbb04b92842c587f845996ce8ab542592a25eKarma değeri olarak ilk dört baytı ayıklayın.
Hash Value of Set Identity Resolving Key = 0x2646036b
Set Identity Resolving Key hakkında daha fazla bilgi için Coordinated Set Identification Service başlıklı makaleyi inceleyin.
Reklam: Bulunabilir olmadığında
Sağlayıcı cihaz, keşfedilebilir olmadığında (yani eşleme modunda değilken) aşağıdaki yönergeleri kullanarak Hızlı Eşleme hesap verilerini bildirir.
Hesap verilerinin bildirilmesi, yakındaki Arayıcıların bir sağlayıcının kendi hesaplarına ait olduğunu anlamasına ve sağlayıcıyı önce eşleme moduna zorlamak zorunda kalmadan eşlemeyi başlatmasına olanak tanır. Bu, kullanıcı şikayetlerinin yaygın bir nedenidir. Arayıcılar, sağlayıcıyla eşleme yapmak istemedikleri veya yayının alakalı olmadığı (örneğin, zaten eşleme yaptıkları) durumlarda kullanıcılara bu yayını yoksayma fırsatı sunar. Arayıcılar, hesap verilerinin yanlış yapılandırılması gibi açıkça hatalı olan yayınları da 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ü içermelidir, age., § 1.11. UUID, 0xFE2C'nin Hızlı Eşleme Hizmeti UUID'si olmalıdır. 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ım için ayrılmıştır) |
| 1 - değişir | Hesap Anahtarı Verileri | değişir |
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 - s | Hesap Anahtarı Filtresi | değişir | |
| s + 1 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0b00100001
|
| s + 2 - s + 3 | uint16 |
Salt | değişir |
Hesap Anahtarı Filtresi
Reklamı yapılan Hesap Anahtarı Filtresi, Arayıcı'nın daha fazla etkileşimden önce Sağlayıcı'nın belirli bir hesap anahtarına sahip olup olmadığını hızlıca kontrol etmesine olanak tanır (yanlış pozitif olasılığı düşüktür, ortalama %0,5'ten çok daha azdır). Arayıcı, 0 türünde (ör.kullanıcı arayüzü göstergesi gösteren) yayınlanan ve hesap anahtarlarından birini içerme olasılığı bulunan bir filtre gördüğünde otomatik olarak bağlanıp prosedürü başlatmayı deneyebilir. Böylece yanlış pozitiflerin oranı daha da azaltılabilir. Bazı durumlarda Sağlayıcı, eşlemeye hazır değilken Arayıcı tarafından tanınmak isteyebilir. Örneğin, kulaklıklar şarj kutusuna geri konduğunda, eşleme kulaklık tarafından reddedilebileceğinden sonraki eşleme bildirimini göstermeyi durdurmak istiyoruz.
Hesap anahtarı filtresi, aşağıdaki gibi oluşturulan değişken uzunluklu bir Bloom filtresidir:
- Kalıcı Hesap Anahtarı listesindeki hesap anahtarı sayısını n (n >= 1) olarak kabul edelim.
- Filtrenin bayt cinsinden boyutu olan s, (1, 2*n + 3) kesilmiş olsun. Örneğin, 1 anahtar kalıcı hale getirilirse s = 4 bayt olur.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3); - F filtresini, her biri 0'a ayarlanmış s baytlık bir dizi olarak ilk kullanıma hazırlayın.
uint8_t F[s] = {0}; Kalıcı hesap anahtarı listesindeki her hesap anahtarı K için:
a. V, concat(K, Salt) olsun.// 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 uygulayın ve 32 baytlık bir değer elde edin: H = {H0, …, H31}.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);c. H'yi big-endian biçiminde sekiz adet 4 baytlık işaretsiz tam sayıya bölün, X = {X0, …, X7}, 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. M, filtredeki bit sayısının modülüsü Xi olsun, (s * 8).
ii. F'deki baytı (M / 8) dizininde alın ve aşağı yuvarlayın.
iii. Bayt içinde, dizindeki (M % 8) biti 1 olarak ayarlayın.
iv. Başka bir ifadeyle:// 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)); }
Reklam verilerine Hesap Anahtarı Filtresi alanı olarak F filtresini ekleyin. Bu değerde daha fazla veya daha az önemli bayt olmadığından "endianness" (bayt sırası) yoktur. Bayt sırasını değiştirmeyin.
Tuzla
Salt, Bloom filtresi oluşturulurken hesap anahtarlarına eklenen rastgele bir değerdir. Adres rotasyonu genelinde izlemeyi önlemek için sağlayıcıya yönelik RPA her güncellendiğinde bu salt yeniden oluşturulmalıdır.
Salt kullanarak Hesap Anahtarı Filtresi oluşturmak için:
- Rastgele 2 baytlık bir S oluşturun. Bu değerde daha fazla veya daha az önemli bayt olmadığından "endianness" (bayt sırası) olmadığını unutmayın. Bayt sırasını değiştirmeyin.
- Salt olarak 2 baytlık S değerini kullanın.
- Reklamı yapılan Hızlı Eşleme hesap verilerinde, oluşturulan filtreyi Hesap Anahtarı Filtresi alanına ve S değerini Salt alanına ekleyin.