बैटरी की सूचना

जब कोई प्रोवाइडर एक से ज़्यादा कॉम्पोनेंट शामिल करता है, तो सीक करने वाले को हर कॉम्पोनेंट के बैटरी लेवल की सूचना देना काम का हो सकता है. इसकी एक मिसाल यह है कि जब ईयरबड का केस खोला जाता है और सीक करने वाले को हर बड और केस के बैटरी लेवल के बारे में जानना होता है.

ऐसा करने के लिए, कोई प्रोवाइडर विज्ञापन में अतिरिक्त जानकारी शामिल कर सकता है. यह जानकारी, विज्ञापन: जब डिवाइस की खोज नहीं की जा सकती में बताए गए Fast Pair खाते के डेटा के आधार पर बनाई जाती है.

खाते के डेटा के अलावा, प्रोवाइडर को एक और फ़ील्ड शामिल करना चाहिए, जिसमें बैटरी की वैल्यू बताई गई हों. पैकेट में यह जानकारी होनी चाहिए:

ऑक्टेट डेटा टाइप ब्यौरा मान क्या यह ज़रूरी है?
0 uint8 झंडे 0x00
(सभी बिट, आने वाले समय में इस्तेमाल के लिए रिज़र्व हैं)
ज़रूरी है
1 - s खाते की कुंजी का डेटा ज़रूरी है
s + 1 uint8 बैटरी लेवल की लंबाई और टाइप
0bLLLLTTTT
  • L = बैटरी की वैल्यू की संख्या
  • T = टाइप
0bLLLLTTTT
  • लंबाई = 0b0011 = बैटरी की तीन वैल्यू
  • टाइप = 0b0011 (यूज़र इंटरफ़ेस (यूआई) में इंडिकेशन दिखाएं) या 0b0100 (यूज़र इंटरफ़ेस (यूआई) में इंडिकेशन छिपाएं)
वैकल्पिक
s + 2, s + 3, s + 4 uint8 बैटरी की वैल्यू
0bSVVVVVVV
  • S = स्टेटस (चार्ज हो रहा है या नहीं)
  • V = वैल्यू
  • बैटरी की वैल्यू को इस क्रम में होना चाहिए: बाएं ईयरबड (s + 2), दाएं ईयरबड (s + 3), और केस (s + 4).
0bSVVVVVVV
  • स्टेटस = 0b1 (चार्ज हो रहा है) या 0b0 (चार्ज नहीं हो रहा है)
  • वैल्यू = बैटरी लेवल, जो 0 से 100 प्रतिशत तक हो सकता है. अज्ञात के लिए, 0bS1111111.
वैकल्पिक

छेड़छाड़ से बचाने के लिए, ऊपर दिए गए खाते की कुंजी के डेटा में थोड़ा बदलाव किया जाएगा, ताकि विज्ञापन में बैटरी की वैल्यू शामिल होने पर, उसमें बैटरी की जानकारी भी शामिल की जा सके. आम तौर पर, खाते की कुंजी फ़िल्टर बनाते समय, खाते की कुंजी को सॉल्ट के साथ मिलाकर एक वैल्यू V बनाई जाती है. इसके बजाय, जब बैटरी की जानकारी भी दिखाई जा रही हो, तो वैल्यू V को इस तरह बनाया जाना चाहिए:

  1. एक वैल्यू V बनाएं, जहां:
    1. पहले 16 बाइट K हैं.
    2. अगले बाइट, सॉल्ट हैं.
    3. बाकी बाइट, बैटरी की जानकारी हैं. यह जानकारी, ऊपर दी गई टेबल में s + 1 से लेकर s + 4 तक है. इसमें लंबाई और टाइप बाइट भी शामिल हैं.

जैसा कि ऊपर बैटरी की लंबाई और टाइप वाले फ़ील्ड में बताया गया है कि टाइप 0b0011 या 0b0100 हो सकता है.

  • 0b0011 - इसका इस्तेमाल तब करें, जब प्रोवाइडर चाहता है कि सीक करने वाला, यूज़र इंटरफ़ेस (यूआई) में बैटरी की वैल्यू का इंडिकेशन दिखाए.
  • 0b0100 - इसका इस्तेमाल तब करें, जब प्रोवाइडर चाहता है कि सीक करने वाला, इंडिकेशन को छिपाए. ऐसा तब करें, जब इंडिकेशन पहले से दिख रहा हो.

इसका एक सामान्य इस्तेमाल यह है कि जब केस खोला गया हो, तब 0b0011 का इस्तेमाल करें. वहीं, जब ईयरबड को केस से हटा दिया गया हो या केस को फिर से बंद कर दिया गया हो, तब 0b0100 का इस्तेमाल करें.

  //The sample code demonstrates that the headset only reports the battery level.

  #define FASTPAIR_ACCOUNT_KEY_SIZE 16

  // In the sample code, the size of salt is 2 bytes.
  #define SALT_SIZE 2

  // 1st byte - Battery level length and type
  // 2nd~4th bytes - Battery values
  #define BAT_LEVEL_SIZE 3

  uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE + BAT_LEVEL_SIZE + 1] = {0};
  int v_index = 0;

  // The first 16 bytes are K.
  uint8_t K[FASTPAIR_ACCOUNT_KEY_SIZE] = {0};
  fastpair_get_account_key_by_index(keyIndex, K);
  memcpy(V, K, FASTPAIR_ACCOUNT_KEY_SIZE);
  v_index = v_index + FASTPAIR_ACCOUNT_KEY_SIZE;

  // The next byte is the Salt.
  uint8_t randomSalt = (uint8_t)rand();
  V[v_index] = randomSalt;
  v_index = v_index + SALT_SIZE;

  // The remaining bytes are the battery information (from s + 1 to s + 4 including the length and type bytes).

  uint8_t battery_level_len = 0;
  uint8_t battery_level[BAT_LEVEL_SIZE] = {0};

  fastpair_get_bat_level(&battery_level_len, battery_level);

  // type = 0b0011 (show UI indication) or 0b0100 (hide UI indication)
  V[v_index] = (battery_level_len << 4 | (is_show_ui ? 0x3 : 0x4));
  v_index = v_index + 1;

  for (int idx = 0; idx < battery_level_len; idx++) {
          V[v_index++] = battery_level[idx];
  }

ट्रैक होने से बचाने के लिए, प्रोवाइडर को विज्ञापन में हमेशा बैटरी का रॉ डेटा शामिल नहीं करना चाहिए. इसके बजाय, सीक करने वाले से कनेक्ट होने पर, इसे मैसेज स्ट्रीम के ज़रिए भेजा जा सकता है. इसके लिए, मैसेज स्ट्रीम: डिवाइस की जानकारी देखें.