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
  • V = sürüm
  • F = işaretler
0x00
1 uint8 Alan uzunluğu ve türü
0bLLLLTTTT
  • L = model kimliğinin bayt cinsinden uzunluğu
  • T = tür
0bLLLL0111
  • length = 0bLLLL = değişir
  • type = 0b0111, Model Kimliği
2 - s Model Kimliği değişir
s + 1 uint8 Alan uzunluğu ve türü
0bLLLLTTTT
  • L = bayt cinsinden uzunluk
  • T = tür
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
  • V = sürüm
  • F = işaretler
0x00
1 uint8 Alan uzunluğu ve türü
0bLLLLTTTT
  • L = model kimliğinin bayt cinsinden uzunluğu
  • T = tür
0bLLLL0111
  • length = 0bLLLL = değişir
  • type = 0b0111, Model Kimliği
2 - s Model Kimliği değişir
s + 1 uint8 Alan uzunluğu ve türü
0bLLLLTTTT
  • L = koordineli veri kümesinin uzunluğu
  • T = tür
0b01101011
  • uzunluk = 0b0110
  • type = 0b1011
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:
  • 0x00 : sol bileşen
  • 0x01 : sağ bileşen
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 = 0xe3b0c44298fc1c149afbf4c8996fb924
    
    SHA256(SIRK) = 0x2646036bb22781536be710245c8cbb04b92842c587f845996ce8ab542592a25e
    
  • Karma 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
  • V = sürüm
  • F = işaretler
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
  • L = hesap anahtarı filtresinin bayt cinsinden uzunluğu
  • T = tür
0bLLLL0000
  • length = 0bLLLL = değişir
  • type = 0b0000 (kullanıcı arayüzü göstergesini göster) veya 0b0010 (kullanıcı arayüzü göstergesini gizle), Hesap Anahtarı Filtresi
1 - s Hesap Anahtarı Filtresi değişir
s + 1 uint8 Alan uzunluğu ve türü
0bLLLLTTTT
  • L = bayt cinsinden uzunluk
  • T = tür
0b00100001
  • uzunluk = 0b0010 = 2
  • type = 0b0001, Salt
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:

  1. Kalıcı Hesap Anahtarı listesindeki hesap anahtarı sayısını n (n >= 1) olarak kabul edelim.
  2. 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);
  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};
  4. 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:

  1. 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.
  2. Salt olarak 2 baytlık S değerini kullanın.
  3. 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.