التجميع

ما هو الخلط؟

يشير التجميع إلى التخزين المؤقت لأحداث المستشعر في مركز المستشعر و/أو FIFO للأجهزة قبل الإبلاغ عن الأحداث من خلال طبقة HAL للمستشعرات . يُشار إلى الموقع الذي يتم فيه تخزين أحداث المستشعر مؤقتًا (مركز المستشعر و/أو FIFO للأجهزة) باسم "FIFO" في هذه الصفحة. عندما لا يكون تجميع أحداث المستشعر نشطًا، يتم الإبلاغ عن أحداث المستشعر على الفور إلى طبقة أجهزة الاستشعار HAL عندما تكون متاحة.

يمكن أن يؤدي التجميع إلى توفير كبير في الطاقة عن طريق تنشيط معالج التطبيقات الرئيسي (AP)، الذي يقوم بتشغيل Android، فقط عندما تكون العديد من أحداث المستشعر جاهزة للمعالجة، بدلاً من تنبيهه لكل حدث على حدة. يرتبط توفير الطاقة المحتمل بشكل مباشر بعدد الأحداث التي يمكن لمركز المستشعر و/أو FIFO تخزينها مؤقتًا: هناك احتمال أكبر لتوفير الطاقة إذا كان من الممكن تجميع المزيد من الأحداث. يعمل التجميع على زيادة استخدام الذاكرة منخفضة الطاقة من أجل تقليل عدد عمليات تنبيه AP عالية الطاقة.

يمكن أن يحدث التجميع فقط عندما يمتلك المستشعر جهاز FIFO و/أو يمكنه تخزين الأحداث مؤقتًا داخل مركز المستشعر. في كلتا الحالتين، يجب على المستشعر الإبلاغ عن الحد الأقصى لعدد الأحداث التي يمكن تجميعها مرة واحدة من خلال SensorInfo.fifoMaxEventCount .

إذا كان لدى المستشعر مساحة محجوزة داخل FIFO، فيجب على المستشعر الإبلاغ عن عدد الأحداث المحجوزة من خلال SensorInfo.fifoReservedEventCount . إذا كان FIFO مخصصًا للمستشعر، فإن SensorInfo.fifoReservedEventCount هو حجم FIFO. إذا تمت مشاركة FIFO بين عدة أجهزة استشعار، فقد تكون هذه القيمة صفرًا. إحدى حالات الاستخدام الشائعة هي السماح للمستشعر باستخدام FIFO بالكامل إذا كان هو المستشعر النشط الوحيد. إذا كانت هناك عدة أجهزة استشعار نشطة، فسيتم ضمان مساحة لكل مستشعر على الأقل لأحداث SensorInfo.fifoReservedEventCount في FIFO. إذا تم استخدام مركز استشعار، فقد يتم تنفيذ الضمان من خلال البرنامج.

يتم تجميع أحداث المستشعر في الحالات التالية:

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

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

معلمات الخلطة

المعلمتان اللتان تحكمان سلوك التجميع هما sampling_period_ns و max_report_latency_ns . يحدد sampling_period_ns عدد المرات التي يتم فيها إنشاء حدث مستشعر جديد، ويحدد max_report_latency_ns المدة حتى يجب الإبلاغ عن الحدث إلى طبقة توكيل أجهزة الاستشعار.

sampling_period_ns

يعتمد ما تعنيه المعلمة sampling_period_ns على وضع الإبلاغ الخاص بالمستشعر المحدد:

  • مستمر: sampling_period_ns هو معدل أخذ العينات، أي معدل إنشاء الأحداث.
  • عند التغيير: sampling_period_ns يحد من معدل أخذ العينات للأحداث، مما يعني أن الأحداث لا يتم إنشاؤها بشكل أسرع من كل sampling_period_ns نانو ثانية. يمكن أن تكون الفترات أطول من sampling_period_ns إذا لم يتم إنشاء أي حدث ولم تتغير القيم المقاسة لفترات طويلة. لمزيد من التفاصيل، راجع وضع إعداد التقارير عند التغيير .
  • لقطة واحدة: يتم تجاهل sampling_period_ns . ليس له أي تأثير.
  • خاص: للحصول على تفاصيل حول كيفية استخدام sampling_period_ns لأجهزة الاستشعار الخاصة، راجع أنواع أجهزة الاستشعار .

لمزيد من المعلومات حول تأثير sampling_period_ns في الأوضاع المختلفة، راجع أوضاع إعداد التقارير .

لأجهزة الاستشعار المستمرة والمتغيرة:

  • إذا كان sampling_period_ns أقل من SensorInfo.minDelay ، فيجب أن يقوم تطبيق HAL بتثبيته بصمت إلى max(SensorInfo.minDelay, 1ms) . لا يدعم Android إنشاء الأحداث بتردد يزيد عن 1000 هرتز.
  • إذا كانت sampling_period_ns أكبر من SensorInfo.maxDelay ، فيجب أن يقوم تطبيق HAL باقتطاعها بصمت إلى SensorInfo.maxDelay .

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

إذا كان التردد المطلوب هو

ثم يجب أن يكون التردد الفعلي

أقل من الحد الأدنى للتردد (<1/maxDelay)

بين 90% و110% من التردد الأدنى

بين الحد الأدنى والحد الأقصى للتردد

بين 90% و220% من التردد المطلوب

أعلى من الحد الأقصى للتردد (> 1/دقيقة تأخير)

بين 90% و110% من التردد الأقصى وأقل من 1100 هرتز

max_report_latency_ns

يقوم max_report_latency_ns بتعيين الحد الأقصى للوقت بالنانو ثانية، والذي يمكن من خلاله تأخير الأحداث وتخزينها في جهاز FIFO قبل الإبلاغ عنها من خلال HAL عندما تكون نقطة الوصول نشطة.

تشير القيمة صفر إلى أنه يجب الإبلاغ عن الأحداث بمجرد قياسها، إما بتخطي ما يصرف أولاً (FIFO) تمامًا، أو إفراغ ما يصرف أولاً (FIFO) بمجرد وجود حدث واحد من المستشعر.

على سبيل المثال، سيؤدي مقياس التسارع الذي يتم تنشيطه عند 50 هرتز مع max_report_latency_ns=0 إلى تشغيل المقاطعات 50 مرة في الثانية عندما تكون نقطة الوصول نشطة.

عندما يكون max_report_latency_ns>0 ، لا يلزم الإبلاغ عن أحداث المستشعر بمجرد اكتشافها. يمكن تخزينها مؤقتًا في FIFO والإبلاغ عنها على دفعات، طالما لم يتم تأخير أي حدث بأكثر من max_report_latency_ns نانو ثانية. وهذا يعني أنه يتم تسجيل جميع الأحداث منذ الدفعة السابقة وإعادتها مرة واحدة. يؤدي ذلك إلى تقليل مقدار المقاطعات المرسلة إلى نقطة الوصول ويسمح لنقطة الوصول بالتبديل إلى وضع طاقة أقل (خاملاً) أثناء قيام المستشعر بالتقاط البيانات وتجميعها.

كل حدث له طابع زمني مرتبط به. لا يؤثر تأخير الوقت الذي يتم فيه الإبلاغ عن الحدث على الطابع الزمني للحدث. يجب أن يكون الطابع الزمني دقيقًا ويتوافق مع الوقت الذي وقع فيه الحدث فعليًا، وليس وقت الإبلاغ عنه.

لا يؤدي السماح بتخزين أحداث المستشعر مؤقتًا في FIFO إلى تعديل سلوك إرسال الأحداث إلى HAL؛ يمكن تشذير الأحداث من أجهزة استشعار مختلفة وتكون جميع الأحداث من نفس المستشعر مرتبة زمنياً.

أحداث الاستيقاظ وغير الاستيقاظ

يجب تخزين أحداث المستشعر الصادرة عن مستشعرات التنبيه في واحد أو أكثر من عناصر التنبيه FIFO. يتمثل التصميم الشائع في الحصول على تنبيه FIFO فردي وكبير ومشترك حيث يتم تشذير الأحداث من جميع مستشعرات التنبيه. وبدلاً من ذلك، يمكن أن يكون لديك FIFO واحد للتنبيه لكل مستشعر أو أن يكون لديك FIFO مخصص لمستشعرات تنبيه معينة وFIFO مشترك لبقية مستشعرات التنبيه.

وبالمثل، يجب تخزين أحداث المستشعرات الصادرة عن أجهزة الاستشعار غير القابلة للتنشيط في واحد أو أكثر من عناصر FIFO غير القابلة للتنشيط.

في جميع الحالات، لا يمكن تشذير أحداث مستشعر التنبيه وأحداث مستشعر غير التنبيه في نفس ما يصرف أولاً. يجب تخزين أحداث التنبيه في ملف التنبيه الذي يصرف أولاً، ويجب تخزين الأحداث غير التنبيهية في ملف التنبيه الذي يصرف أولاً.

بالنسبة إلى نظام FIFO للاستيقاظ، يوفر تصميم FIFO الفردي والكبير والمشترك أفضل فوائد الطاقة. بالنسبة إلى FIFO غير المستيقظ، فإن تصميمات FIFO المفردة الكبيرة المشتركة والعديد من تصميمات FIFO الصغيرة المحجوزة لها خصائص طاقة مماثلة. لمزيد من الاقتراحات حول كيفية تكوين كل ما يصرف أولاً، راجع أولوية تخصيص ما يصرف أولاً FIFO .

السلوك خارج وضع التوقف المرحلي

عندما تكون نقطة الوصول نشطة (ليست في وضع التوقف المرحلي)، يتم تخزين الأحداث مؤقتًا في FIFOs طالما لم يتم تأخيرها بأكثر من max_report_latency .

طالما أن نقطة الوصول لا تدخل في وضع التوقف المرحلي، فلن يتم إسقاط أي حدث أو فقده. إذا امتلأت قوائم FIFO الداخلية قبل انقضاء max_report_latency ، فسيتم الإبلاغ عن الأحداث عند هذه النقطة لضمان عدم فقدان أي حدث.

إذا كانت هناك عدة أجهزة استشعار تشترك في نفس FIFO وانقضى max_report_latency لأحدها، فسيتم الإبلاغ عن جميع الأحداث من FIFO، حتى لو لم ينقضي max_report_latency الخاص بأجهزة الاستشعار الأخرى بعد. وهذا يقلل من عدد المرات التي يتم فيها الإبلاغ عن دفعات من الأحداث. عندما يجب الإبلاغ عن حدث واحد، يتم الإبلاغ عن جميع الأحداث من جميع أجهزة الاستشعار.

على سبيل المثال، إذا تم تنشيط المستشعرات التالية:

  • مقياس التسارع مجمّع مع max_report_latency = 20 ثانية
  • الجيروسكوب مُجمَّع بأقصى max_report_latency = 5 ثوانٍ

يتم الإبلاغ عن دفعات مقياس التسارع في نفس الوقت الذي يتم فيه الإبلاغ عن دفعات الجيروسكوب (كل 5 ثوانٍ)، حتى لو لم يشترك مقياس التسارع والجيروسكوب في نفس ما يصرف أولاً.

السلوك في وضع التوقف المرحلي

يعد التجميع مفيدًا بشكل خاص لجمع بيانات المستشعر في الخلفية دون إبقاء نقطة الوصول نشطة. نظرًا لأنه لا يُسمح لبرامج تشغيل المستشعر وتنفيذ HAL بالاحتفاظ بقفل التنبيه*، يمكن لنقطة الوصول الدخول في وضع التعليق المرحلي حتى أثناء جمع بيانات المستشعر.

يعتمد سلوك المستشعرات أثناء تعليق نقطة الوصول على ما إذا كان المستشعر عبارة عن مستشعر تنبيه. لمزيد من التفاصيل، راجع أجهزة استشعار الاستيقاظ .

عندما يمتلئ ما يصرف أولاً (FIFO) غير المنبه، فإنه يجب أن يلتف حوله ويتصرف كمخزن مؤقت دائري، حيث يقوم بالكتابة فوق الأحداث القديمة بالأحداث الجديدة التي تحل محل الأحداث القديمة. ليس لـ max_report_latency أي تأثير على FIFO غير التنبيه أثناء وجوده في وضع التوقف المرحلي.

عند امتلاء تنبيه FIFO، أو عند انقضاء max_report_latency استجابة التقرير لأحد مستشعرات التنبيه، يجب على الجهاز تنبيه نقطة الوصول والإبلاغ عن البيانات.

في كلتا الحالتين (التنبيه وعدم التنبيه)، بمجرد خروج نقطة الوصول من وضع التوقف المرحلي، يتم إنتاج دفعة تحتوي على محتوى جميع عناصر FIFO، حتى إذا لم ينقضي max_report_latency لبعض المستشعرات بعد. وهذا يقلل من خطر اضطرار نقطة الوصول إلى الاستيقاظ مرة أخرى بعد وقت قصير من عودتها إلى وضع التوقف المرحلي، وبالتالي يقلل من استهلاك الطاقة.

*أحد الاستثناءات الملحوظة لعدم السماح للسائقين بإمساك قفل التنشيط هو عندما يتم تنشيط مستشعر التنبيه مع وضع الإبلاغ المستمر مع max_report_latency <1 ثانية. في هذه الحالة، يمكن للسائق الاحتفاظ بقفل التنشيط لأن نقطة الوصول ليس لديها الوقت للدخول في وضع التوقف المرحلي، حيث سيتم إيقاظه بواسطة حدث تنبيه قبل الوصول إلى وضع التوقف المرحلي.

الاحتياطات عند تجميع أجهزة استشعار الاستيقاظ

اعتمادًا على الجهاز، قد يستغرق الأمر بضعة أجزاء من الثانية حتى تخرج نقطة الوصول من وضع التوقف المرحلي تمامًا وتبدأ في مسح FIFO. يجب تخصيص مساحة كافية للرأس في FIFO للسماح للجهاز بالخروج من وضع التوقف المرحلي دون تجاوز FIFO للاستيقاظ. لن يتم فقدان أي أحداث، ويجب احترام max_report_latency .

الاحتياطات عند تجميع أجهزة الاستشعار غير القابلة للاستيقاظ عند التغيير

تقوم أجهزة الاستشعار القابلة للتغيير بتوليد الأحداث فقط عندما تتغير القيمة التي تقيسها. إذا تغيرت القيمة المقاسة أثناء وجود نقطة الوصول في وضع التوقف المرحلي، تتوقع التطبيقات تلقي حدث بمجرد تنبيه نقطة الوصول. ولهذا السبب، يجب تنفيذ تجميع أحداث مستشعر عدم الاستيقاظ عند التغيير بعناية إذا كان المستشعر يشارك ما يصرف أولاً (FIFO) الخاص به مع أجهزة استشعار أخرى. يجب دائمًا حفظ الحدث الأخير الذي تم إنشاؤه بواسطة كل مستشعر قيد التغيير خارج FIFO المشترك حتى لا يمكن استبداله بأحداث أخرى. عندما تنشط نقطة الوصول، بعد الإبلاغ عن جميع الأحداث من FIFO، يجب الإبلاغ عن آخر حدث للمستشعر عند التغيير.

إليك الموقف الذي يجب تجنبه:

  1. يقوم التطبيق بالتسجيل في عداد خطوات عدم التنبيه (عند التغيير) ومقياس تسارع عدم التنبيه (مستمر)، وكلاهما يشتركان في نفس FIFO.
  2. يتلقى التطبيق حدث عداد الخطوات step_count=1000 steps >.
  3. تذهب AP إلى التعليق.
  4. يمشي المستخدم 20 خطوة، مما يتسبب في تشذير أحداث عداد الخطوات ومقياس التسارع، ويكون حدث عداد الخطوات الأخير هو step_count = 1020 steps .
  5. لا يتحرك المستخدم لفترة طويلة، مما يتسبب في استمرار تراكم أحداث مقياس التسارع في FIFO، مما يؤدي في النهاية إلى الكتابة فوق كل حدث step_count في FIFO المشترك.
  6. يتم تنشيط AP ويتم إرسال كافة الأحداث من FIFO إلى التطبيق.
  7. التطبيق يستقبل فقط أحداث مقياس التسارع ويعتقد أن المستخدم لم يمشي.

من خلال حفظ حدث عداد الخطوة الأخيرة خارج FIFO، يمكن لـ HAL الإبلاغ عن هذا الحدث عند تنشيط AP، حتى لو تمت الكتابة فوق كافة أحداث عداد الخطوات الأخرى بواسطة أحداث مقياس التسارع. بهذه الطريقة، يتلقى التطبيق step_count = 1020 steps عند تنشيط نقطة الوصول.

تنفيذ الخلطات

لتوفير الطاقة، يجب تنفيذ التجميع دون مساعدة نقطة الوصول، ويجب السماح لنقطة الوصول بالتعليق أثناء التجميع.

إذا تم إجراء الدفع في مركز استشعار، فيجب تقليل استخدام الطاقة في مركز الاستشعار.

يمكن تعديل الحد الأقصى لزمن وصول التقرير في أي وقت، خاصة عندما يكون المستشعر المحدد ممكّنًا بالفعل؛ وهذا لا ينبغي أن يؤدي إلى فقدان الأحداث.

أولوية تخصيص FIFO

في الأنظمة الأساسية التي يكون فيها حجم المخزن المؤقت لمركز الاستشعار FIFO و/أو الأجهزة محدودًا، قد يتعين على مصممي النظام اختيار مقدار FIFO الذي سيتم حجزه لكل مستشعر. للمساعدة في هذا الاختيار، إليك قائمة بالتطبيقات الممكنة عند تنفيذ التجميع على أجهزة الاستشعار المختلفة.

قيمة عالية: حساب الموتى للمشاة منخفض الطاقة

وقت الخلط المستهدف: من 1 إلى 10 دقائق

أجهزة الاستشعار دفعة:

  • كاشف خطوة الاستيقاظ
  • ناقل دوران لعبة الاستيقاظ عند 5 هرتز
  • مقياس الاستيقاظ عند 5 هرتز
  • استيقظ مقياس المغناطيسية غير المعاير عند 5 هرتز

يسمح تجميع هذه البيانات بإجراء حساب عدد القتلى للمشاة مع السماح لنقطة الوصول بالتوقف مؤقتًا.

قيمة عالية: نشاط متقطع متوسط ​​الطاقة/التعرف على الإيماءات

وقت الخلط المستهدف: 3 ثواني

أجهزة الاستشعار للدفعة: مقياس تسارع غير قابل للاستيقاظ عند 50 هرتز

يتيح تجميع هذه البيانات التعرف بشكل دوري على الأنشطة والإيماءات التعسفية دون الحاجة إلى إبقاء نقطة الوصول مستيقظًا أثناء جمع البيانات.

القيمة المتوسطة: نشاط مستمر متوسط ​​القوة/التعرف على الإيماءات

وقت الخلط المستهدف: من 1 إلى 3 دقائق

أجهزة الاستشعار للدفعة: مقياس تسارع الاستيقاظ عند 50 هرتز

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

قيمة متوسطة إلى عالية: تقليل حمل المقاطعة

وقت التجميع المستهدف: <1 ثانية

أجهزة الاستشعار دفعة واحدة: أي أجهزة استشعار عالية التردد، وعادة ما تكون غير قابلة للاستيقاظ.

إذا تم ضبط الجيروسكوب على 240 هرتز، فإن تجميع 10 أحداث جيروسكوبية فقط يمكن أن يقلل عدد المقاطعات من 240/ثانية إلى 24/ثانية.

القيمة المتوسطة: جمع البيانات المستمر منخفض التردد

وقت الخلط المستهدف: من 1 إلى 10 دقائق

أجهزة الاستشعار دفعة:

  • مقياس الاستيقاظ عند 1 هرتز
  • مستشعر رطوبة الاستيقاظ عند 1 هرتز
  • أجهزة استشعار أخرى للاستيقاظ ذات التردد المنخفض بمعدلات مماثلة

يسمح بإنشاء تطبيقات المراقبة بطاقة منخفضة.

قيمة متوسطة إلى منخفضة: مجموعة كاملة من أجهزة الاستشعار المستمرة

وقت الخلط المستهدف: من 1 إلى 10 دقائق

حساسات الدفعة: جميع حساسات الاستيقاظ، بترددات عالية

يسمح بجمع كامل لبيانات المستشعر أثناء ترك نقطة الوصول في وضع التوقف المرحلي. ضع في اعتبارك فقط ما إذا كانت مساحة FIFO لا تمثل مشكلة.