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
  • V = sürüm
  • F = bayraklar
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
  • L = hesap anahtarı filtresinin bayt cinsinden uzunluğu
  • T = tür
0bLLLL0000
  • uzunluk = 0bLLLL = değişken
  • type = 0b0000 (kullanıcı arayüzü göstergesini göster) veya 0b0010 (kullanıcı arayüzü gösterimini gizle), hesap anahtarı filtresi
1 - sn Hesap Anahtarı Filtresi değişiklik gösterir
s + 1 uint8 Alan uzunluğu ve türü
0bLLLLTTTT
  • L = bayt cinsinden uzunluk
  • T = tür
0b00100001
  • uzunluk = 0b0010 = 2
  • tür = 0b0001, Tuz
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:

  1. Kalıcı Hesap Anahtarı listesinde n hesap anahtarı sayısı (n >= 1) olsun.
  2. 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);
  3. F filtresini, her biri 0'a ayarlanmış s baytlık bir dizi olarak başlatın.
    uint8_t F[s] = {0};
  4. 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:

  1. 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.
  2. Takviye olarak 2 baytlık S'yi kullanın.
  3. Tanıtılan Hızlı Eşleme Hesap Verilerinde, oluşturulan filtreyi Hesap Anahtarı Filtresi alanına ve Tuz alanına S'yi ekleyin.