विज्ञापन दिखाने से जुड़ी सेवा देने वाली कंपनी का सिग्नल
विज्ञापन: जब खोजा जा सकता है
जब प्रोवाइडर डिवाइस, बीआर/ईडीआर की मदद से खोजा जा सकता है (यानी कि वह दूसरे डिवाइस से जोड़ने वाले मोड में है), तब वह बीएलई पर फ़ास्ट पेयर मॉडल आईडी डेटा का विज्ञापन देगा. साथ ही, बीएलई पते को रोटेट नहीं किया जाएगा.
विज्ञापन दिखाने का इंटरवल: जब स्पेस खोजा जा सकता है
विज्ञापनों के बीच का इंटरवल 100 मि॰से॰ (10 हर्ट्ज़) से ज़्यादा नहीं होना चाहिए. तेज़ स्कैनिंग रेट की वजह से, सीक करने वाला डिवाइस, प्रोवाइडर डिवाइस को तेज़ी से ढूंढ पाता है. ऐसा तब भी होता है, जब वह कम बैटरी मोड में स्कैन कर रहा हो.
विज्ञापन पेलोड: फ़ास्ट पेयर मॉडल आईडी डेटा
विज्ञापन में सेवा से जुड़े डेटा का डेटा टाइप शामिल होना चाहिए, ibid., § 1.11. यूयूआईडी, 0xFE2C का फ़ास्ट पेयर सर्विस यूयूआईडी होना चाहिए. सेवा से जुड़े डेटा में यह जानकारी शामिल होनी चाहिए:
| ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
|---|---|---|---|
| 0-2 | uint24 |
24-बिट मॉडल आईडी | अलग-अलग होती है |
LE Audio Sharing Advertising पेलोड: फ़ास्ट पेयर मॉडल आईडी डेटा और FP Capability Map
सेवा से जुड़े डेटा में यह जानकारी शामिल होगी:
| ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
|---|---|---|---|
| 0 | uint8 |
वर्शन और फ़्लैग 0bVVVVFFFF
|
0x00 |
| 1 | uint8 |
फ़ील्ड की लंबाई और टाइप 0bLLLLTTTT
|
0bLLLL0111
|
| 2 - s | मॉडल आईडी | अलग-अलग होती है | |
| s + 1 | uint8 |
फ़ील्ड की लंबाई और टाइप 0bLLLLTTTT
|
0bLLLL1000
|
| s + 2 | uint8 |
FP Capability Map | अलग-अलग होती है |
FP Capability Map
एफ़पी की सुविधा का मैप, एक बिटमैप होता है. इससे पता चलता है कि प्रोवाइडर, एफ़पी की किन सुविधाओं के साथ काम करता है. बिटमैप का पहला बाइट इस तरह से तय किया जाता है:
| बिटमैप | ब्यौरा |
|---|---|
| 0bRRRRRRSO | R - रिज़र्व किया गया बिट. फ़िलहाल, इसे ढूंढने वाला अनदेखा करेगा और इसे 0 के तौर पर सेट किया जाएगा. S - FP LE Audio Sharing की सुविधा काम करती है (अगर यह सुविधा चालू है, तो इसे 1 पर सेट करें. अगर यह सुविधा बंद है, तो इसे 0 पर सेट करें). O - आउट ऑफ़ बॉक्स (OOB) बिट. अगर डिवाइस एकदम नया है, तो इसे 1 पर सेट करें. |
अगर प्रोवाइडर, FP LE Audio Sharing स्पेसिफ़िकेशन के साथ काम करता है, तो FP LE Audio Sharing support बिट को 1 पर सेट करें. इसका मतलब है कि प्रोवाइडर, Temporary Pairing, LE Audio Sharing Advertising Payload, और Hearable control version 2 के साथ काम करता है. अगर प्रोवाइडर, FP LE Audio Sharing स्पेसिफ़िकेशन के साथ काम नहीं करता है, तो FP LE Audio Sharing support बिट को 0 पर सेट करें.
अगर प्रोवाइडर ने किसी भी FP Seeker के साथ पेयर नहीं किया है और वह फ़ैक्ट्री से नया है (इसका मतलब है कि प्रोवाइडर पर कोई FP खाता कुंजी नहीं है), तो OOB बिट को 1 पर सेट करें. अगर ऐसा नहीं है, तो इसे 0 पर सेट करें.
विज्ञापन: जब खोजा नहीं जा सकता
जब डिवाइस को खोजा नहीं जा सकता (यानी कि वह दूसरे डिवाइस से जोड़ने वाले मोड में नहीं है), तब Provider डिवाइस, फ़ास्ट पेयर खाते के डेटा का विज्ञापन दिखाएगा. इसके लिए, वह इन दिशा-निर्देशों का पालन करेगा.
खाते में मौजूद डेटा का विज्ञापन दिखाने से, आस-पास के लोगों को यह पता चल जाता है कि कोई सेवा देने वाली कंपनी उनके खाते से जुड़ी है. इससे वे बिना किसी रुकावट के, डिवाइसों को एक-दूसरे से जोड़ पाते हैं. ऐसा करने के लिए, उन्हें सेवा देने वाली कंपनी को पहले दूसरे डिवाइस से जोड़ने वाले मोड में वापस लाने की ज़रूरत नहीं पड़ती. यह एक आम समस्या है जिसकी वजह से लोग शिकायत करते हैं. सीकर, उपयोगकर्ताओं को इस ब्रॉडकास्ट को अनदेखा करने का विकल्प देंगे. ऐसा तब होगा, जब वे सेवा देने वाले व्यक्ति या कंपनी के साथ पेयर होने का इंतज़ार नहीं करते हैं या ब्रॉडकास्ट काम का नहीं है. उदाहरण के लिए, अगर वे पहले ही पेयर हो चुके हैं. Seekers, खराब ब्रॉडकास्ट को भी अपने-आप फ़िल्टर कर देंगे. जैसे, अगर खाते में मौजूद डेटा गलत तरीके से कॉन्फ़िगर किया गया है.
विज्ञापन दिखाने का इंटरवल: जब स्पेस नहीं दिखता है
विज्ञापनों के बीच का इंटरवल ज़्यादा से ज़्यादा 250 मि॰से॰ (4 हर्ट्ज़) होना चाहिए.
विज्ञापन पेलोड: फ़ास्ट पेयर सुविधा के लिए खाता डेटा
विज्ञापन में सेवा से जुड़े डेटा का डेटा टाइप शामिल होना चाहिए, Ibid., § 1.11. यूयूआईडी, 0xFE2C का फ़ास्ट पेयर सर्विस यूयूआईडी होना चाहिए. सेवा से जुड़े डेटा में यह जानकारी शामिल होनी चाहिए:
| ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
|---|---|---|---|
| 0 | uint8 |
वर्शन और फ़्लैग 0bVVVVFFFF
|
0x00(आने वाले समय में इस्तेमाल के लिए रिज़र्व रखा गया है) |
| 1 - अलग-अलग | खाते के मुख्य डेटा | बदलता रहता है |
खाता कुंजी डेटा में यह जानकारी शामिल होती है:
| ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
|---|---|---|---|
| 0 | uint8 |
फ़ील्ड की लंबाई और टाइप 0bLLLLTTTT
|
0bLLLL0000
|
| 1 - s | खाता कुंजी फ़िल्टर | अलग-अलग होती है | |
| s + 1 | uint8 |
फ़ील्ड की लंबाई और टाइप 0bLLLLTTTT
|
0b00100001
|
| s + 2 - s + 3 | uint16 |
Salt | अलग-अलग होती है |
खाता कुंजी फ़िल्टर
विज्ञापन में शामिल खाता कुंजी फ़िल्टर की मदद से, नौकरी ढूंढने वाला व्यक्ति यह तुरंत पता लगा सकता है कि क्या सेवा देने वाली कंपनी के पास कोई खास खाता कुंजी है. इसमें गलत पॉज़िटिव की संभावना कम होती है. आम तौर पर, यह 0.5% से बहुत कम होती है. इससे पहले कि वह आगे की कार्रवाइयां करे, वह यह जानकारी पा सकता है. जब सीक करने वाले डिवाइस को टाइप 0 वाला फ़िल्टर ब्रॉडकास्ट होता हुआ दिखता है, तब वह अपने-आप कनेक्ट हो सकता है और प्रोसेस शुरू करने की कोशिश कर सकता है.टाइप 0 वाले फ़िल्टर का मतलब है कि यूज़र इंटरफ़ेस (यूआई) इंडिकेशन दिख रहा है. इसमें सीक करने वाले डिवाइस की कोई खाता कुंजी शामिल हो सकती है, ताकि फ़ॉल्स पॉज़िटिव की दर को और कम किया जा सके. कुछ मामलों में, ऐसा हो सकता है कि डिवाइस को पेयर करने के लिए तैयार न होने पर भी, Provider को Seeker के तौर पर पहचाना जाए. उदाहरण के लिए, जब बड को वापस केस में रखा जाता है, तो हम चाहते हैं कि इसके बाद पेयरिंग की सूचना न दिखे. ऐसा इसलिए, क्योंकि हेडसेट पेयरिंग को अस्वीकार कर सकता है.
खाता कुंजी फ़िल्टर, अलग-अलग लंबाई वाला ब्लूम फ़िल्टर होता है. इसे इस तरह बनाया जाता है:
- मान लें कि सेव की गई खाता कुंजी की सूची में, खाता कुंजियों की संख्या n है (n >= 1).
- मान लें कि फ़िल्टर का साइज़ s बाइट है. इसे (1.2*n + 3) से छोटा किया गया है. उदाहरण के लिए, अगर एक कुंजी सेव की जाती है, तो s = 4 बाइट.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3); - फ़िल्टर F को s बाइट के ऐरे के तौर पर शुरू करें. हर बाइट को 0 पर सेट करें.
uint8_t F[s] = {0}; सेव की गई खाता कुंजी की सूची में मौजूद हर खाता कुंजी K के लिए:
a. मान लें कि V, concat(K, Salt) है.// 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 का इस्तेमाल करके V को हैश करें. इससे 32 बाइट की वैल्यू H = {H0, …, H31} मिलती है.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);c. H को बिग-एंडियन में, चार बाइट के आठ अनसाइंड पूर्णांकों में बांटें. X = {X0, …, X7}, जहां 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. हर Xi के लिए:
i. मान लें कि M, फ़िल्टर में मौजूद बिट की संख्या (s * 8) के हिसाब से Xi का मॉडुलस है.
ii. F में मौजूद बाइट को इंडेक्स (M / 8) पर पाएं. यह इंडेक्स, पूर्णांक में होगा.
iii. बाइट में, इंडेक्स (M % 8) पर मौजूद बिट को 1 पर सेट करें.
iv. दूसरे शब्दों में:// 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)); }
विज्ञापन डेटा में, F फ़िल्टर को खाता कुंजी फ़िल्टर फ़ील्ड के तौर पर शामिल करें. ध्यान दें कि इस वैल्यू में कोई "एंडियननेस" नहीं है, क्योंकि इसमें कोई ज़्यादा या कम ज़रूरी बाइट नहीं है. इसलिए, बाइट के क्रम में बदलाव न करें.
नमक का मैदान
सॉल्ट एक रैंडम वैल्यू होती है. इसे ब्लूम फ़िल्टर बनाते समय, खाते की कुंजियों में जोड़ा जाता है. इस सॉल्ट को हर बार फिर से जनरेट किया जाना चाहिए, ताकि पता बदलने पर भी ट्रैकिंग से बचा जा सके.
सॉल्ट का इस्तेमाल करके, खाता कुंजी फ़िल्टर जनरेट करने के लिए:
- कोई भी 2-बाइट S जनरेट करता है. ध्यान दें कि इस वैल्यू के लिए कोई "एंडियननेस" नहीं है, क्योंकि इसमें कोई ज़्यादा या कम अहम बाइट नहीं है. इसलिए, बाइट के क्रम में बदलाव न करें.
- सॉल्ट के तौर पर, 2 बाइट वाले S का इस्तेमाल करें.
- विज्ञापन में दिखाए गए फ़ास्ट पेयर खाते के डेटा में, जनरेट किए गए फ़िल्टर को Account Key Filter फ़ील्ड में और S को Salt फ़ील्ड में शामिल करें.