إشعار البطارية

عندما يتضمن أحد الموفّرين مكونات متعددة، قد يكون من المفيد إبلاغ يبحث عن مستوى البطارية لكل مكوّن. أحد الأمثلة على ذلك عند فتح حافظة سمّاعات الأذن ويحتاج "الباحث" إلى معرفة مستوى شحن البطارية لكل سمّاعة على حدة والحالة نفسها.

لتحقيق ذلك، يمكن للموفر تضمين معلومات إضافية في يستند إلى بيانات الحساب التي يتم ربطها باستخدام ميزة "الإقران السريع" والموضحة في الإعلانات: عندما لا تكون قابلة للاكتشاف.

بالإضافة إلى بيانات الحساب، على مقدّم الخدمة تضمين حقل إضافي لتحديد قيم البطارية. يجب أن تحتوي الحزمة على ما يلي:

ثُمانِي واحد نوع البيانات الوصف القيمة إلزامي؟
0 uint8 أعلام 0x00
(جميع وحدات البت محجوزة للاستخدام في المستقبل)
إلزامي
1 - ث البيانات الأساسية للحساب إلزامي
s + 1 uint8 طول مستوى البطارية ونوعها
0bLLLLTTTT
  • L = عدد قيم البطارية
  • T = النوع
0bLLTTTT
  • الطول = 0b0011 = 3 قيم للبطارية
  • type = 0b0011 (إظهار مؤشر واجهة المستخدم) أو 0b0100 (إخفاء مؤشر واجهة المستخدم)
اختياري
s + 2، s + 3، s + 4 uint8 قيم البطارية
0bSVVVVVV
  • S = الحالة (جارٍ الشحن أو لا يتم الشحن)
  • V = قيمة
  • يجب ترتيب قيم البطارية مثل سمّاعة الأذن اليسرى (s + 2) والسماعة اليمنى (s + 3) والحالة (s + 4).
0bSVVVVVV
  • الحالة = 0b1 (الشحن) أو 0b0 (بدون الشحن)
  • القيمة = مستوى شحن البطارية يتراوح بين 0 و100 بالمائة، 0bS1111111 بالنسبة إلى القيمة غير المعروفة.
اختياري

لمنع التلاعب، ستكون بيانات مفتاح الحساب أعلاه متفاوتة يتم تعديلها لتتضمن معلومات البطارية عند تضمين قيم البطارية في الإعلان عادةً، عند إنشاء مفتاح الحساب الفلتر، يتم إنتاج قيمة V من خلال جمع حساب بالملح. بدلاً من ذلك، عند الإعلان أيضًا عن معلومات البطارية، يجب إنشاء القيمة V على النحو التالي:

  1. أنتج قيمة V، حيث:
    1. أول 16 بايت هي K.
    2. وحدات البايت التالية هي Salt.
    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];
  }

لمنع التتبّع، على مزوِّد الخدمة عدم تضمين بيانات البطارية الأولية في إعلاناتك طوال الوقت. وبدلاً من ذلك يمكن إرساله عبر RFCOMM عند الاتصال بـ الباحث، يُرجى الاطّلاع على تدفق الرسائل: معلومات الجهاز.