مستشعرات HAL 1.0

واجهة مجسات HAL، أعلن في sensors.h ، يمثل التفاعل بين الروبوت إطار والبرامج أجهزة محددة. يجب أن يحدد تطبيق HAL كل وظيفة تم الإعلان عنها في أجهزة الاستشعار. الوظائف الرئيسية هي:

  • get_sensors_list - إرجاع قائمة بجميع أجهزة الاستشعار.
  • activate - يبدأ أو يتوقف جهاز استشعار.
  • batch - مجموعات المعلمات جهاز استشعار مثل أخذ العينات تردد والحد الأقصى الكمون التقارير.
  • setDelay - يستخدم فقط في HAL الإصدار 1.0. يضبط تردد أخذ العينات لجهاز استشعار معين.
  • flush - تمسح FIFO من أجهزة الاستشعار محددة وتقارير حدثا الكامل تدفق عندما يتم ذلك.
  • poll - إرجاع الأحداث الاستشعار المتاحة.

يجب أن يكون التنفيذ موضوعًا آمنًا ويسمح باستدعاء هذه الوظائف من مؤشرات ترابط مختلفة.

تحدد الواجهة أيضًا عدة أنواع تستخدمها تلك الوظائف. الأنواع الرئيسية هي:

  • sensors_module_t
  • sensors_poll_device_t
  • sensor_t
  • sensors_event_t

بالإضافة إلى الأقسام التالية، انظر sensors.h لمزيد من المعلومات حول تلك الأنواع.

get_sensors_list (قائمة)

int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t
  const** list);

يوفر قائمة المستشعرات المطبقة بواسطة HAL. انظر sensor_t حصول على تفاصيل حول كيفية تعريف أجهزة الاستشعار.

الترتيب الذي تظهر به المستشعرات في القائمة هو الترتيب الذي سيتم إبلاغ التطبيقات به عن المستشعرات. عادة ، تظهر المستشعرات الأساسية أولاً ، تليها المستشعرات المركبة.

إذا كانت العديد من أجهزة الاستشعار تشترك في نفس نوع المستشعر وخاصية التنبيه ، فإن أول واحد في القائمة يسمى المستشعر "الافتراضي". هو واحد إرجاعها بواسطة getDefaultSensor(int sensorType, bool wakeUp) .

تقوم هذه الوظيفة بإرجاع عدد أجهزة الاستشعار في القائمة.

تنشيط (مستشعر ، صح / خطأ)

int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int
  enabled);

ينشط أو يعطل جهاز الاستشعار.

sensor_handle هو مقبض من أجهزة الاستشعار لتفعيل / تعطيل. ويعرف التعامل مع جهاز استشعار من قبل handle مجال لها sensor_t هيكل.

enabled تعيين إلى 1 لتمكين أو 0 لتعطيل أجهزة الاستشعار.

أجهزة الاستشعار طلقة واحدة إلغاء تنشيط نفسها تلقائيا عند استلام حدث، ويجب أن نقبل ما زال لابطال مفعولها من خلال الدعوة إلى activate(..., enabled=0) .

لا تمنع مستشعرات عدم الاستيقاظ أبدًا شركة نفط الجنوب من الدخول في وضع التعليق ؛ بمعنى ، لا يجوز لـ HAL إيقاف التنبيه الجزئي نيابة عن التطبيقات.

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

إذا enabled هو 1 وتنشيط جهاز استشعار بالفعل، هذه الوظيفة هي عدم المرجع ونجحت.

إذا enabled هو 0 ويتم إلغاء تنشيط جهاز استشعار بالفعل، هذه الوظيفة هي عدم المرجع ونجحت.

ترجع هذه الدالة 0 عند النجاح ورقم خطأ سالب بخلاف ذلك.

الدفعة (المستشعر ، الأعلام ، فترة أخذ العينات ، الحد الأقصى لوقت استجابة التقرير)

int (*batch)(
     struct sensors_poll_device_1* dev,
     int sensor_handle,
     int flags,
     int64_t sampling_period_ns,
     int64_t max_report_latency_ns);

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

sensor_handle هو مقبض جهاز استشعار لتكوين.

flags غير المستخدمة حاليا.

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

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

ترجع هذه الدالة 0 عند النجاح ورقم خطأ سالب بخلاف ذلك.

setDelay (المستشعر ، فترة أخذ العينات)

int (*setDelay)(
     struct sensors_poll_device_t *dev,
     int sensor_handle,
     int64_t sampling_period_ns);

بعد الإصدار 1.0 من HAL ، يتم إهمال هذه الوظيفة ولا يتم استدعاؤها مطلقًا. بدلا من ذلك، batch يتم استدعاء الدالة لتعيين sampling_period_ns المعلمة.

في HAL الإصدار 1.0، استخدمت setDelay بدلا من دفعة واحدة إلى مجموعة sampling_period_ns .

دافق (مستشعر)

int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);

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

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

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

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

flush لا ينطبق على دفعة واحدة، وأجهزة الاستشعار. إذا sensor_handle يشير إلى استشعار طلقة واحدة، flush يجب أن يعود -EINVAL ولا تولد أي حال التعريف الكامل دافق.

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

تصويت()

int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
  count);

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

عدد الأحداث التي تم إرجاعها في data يجب أن يكون أقل أو يساوي count حجة. يجب ألا تُرجع هذه الوظيفة 0 (لا يوجد حدث).

تسلسل المكالمات

عند بدء تشغيل الجهاز، get_sensors_list يسمى.

عندما يحصل على تنشيط جهاز استشعار، و batch وسوف يطلق وظيفة مع المعلمات المطلوبة، تليها activate(..., enable=1) .

علما بأن في HAL نسخة 1_0، كان الأمر عكس ذلك: activate كانت تسمى الأولى، تليها set_delay .

عندما تتغير الخصائص المطلوبة من جهاز استشعار في حين يتم تفعيلها، و batch يتم استدعاء الدالة.

flush يمكن استدعاء في أي وقت، وحتى على أجهزة الاستشعار التي تنشط غير (في هذه الحالة يجب أن تعيد -EINVAL )

عندما يحصل على إلغاء تنشيط جهاز استشعار، activate(..., enable=0) وسوف يطلق.

وبالتوازي مع هذه الدعوات، و poll سيتم استدعاء الدالة مرارا وتكرارا لبيانات الطلب. poll يمكن أن يسمى حتى عندما يتم تنشيط أي أجهزة الاستشعار.

sensors_module_t

sensors_module_t هو النوع الذي يستخدم لإنشاء وحدة الأجهزة الروبوت لأجهزة الاستشعار. تنفيذ HAL يجب تحديد كائن HAL_MODULE_INFO_SYM من هذا النوع لفضح get_sensors_list وظيفة. انظر تعريف sensors_module_t في sensors.h وتعريف hw_module_t لمزيد من المعلومات.

sensors_poll_device_t / sensors_poll_device_1_t

sensors_poll_device_1_t يحتوي على بقية الطرق المحددة أعلاه: activate ، batch ، flush و poll . على common الميدان (من نوع hw_device_t ) يحدد رقم إصدار HAL.

sensor_t

sensor_t يمثل استشعار الروبوت . فيما يلي بعض مجالاته المهمة:

اسم: سلسلة المستخدم مرئية تمثل أجهزة الاستشعار. غالبًا ما تحتوي هذه السلسلة على اسم جزء من المستشعر الأساسي ونوع المستشعر وما إذا كان مستشعر تنبيه. على سبيل المثال ، "LIS2HH12 Accelerometer" ، "MAX21000 Uncalibrated Gyroscope" ، "BMP280 Wake-up Barometer" ، "MPU6515 Game Rotation Vector"

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

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

stringType: نوع من أجهزة الاستشعار كسلسلة. عندما أجهزة الاستشعار لديها نوع رسمي، لتعيين SENSOR_STRING_TYPE_* . عندما يكون جهاز استشعار لصناعة نوع معين، stringType يجب أن تبدأ مع الشركة المصنعة اسم النطاق عكسي. على سبيل المثال، جهاز استشعار (يقول كاشف يونيكورن) التي حددها فريق بارد المنتجات في خيالي-شركة يمكن استخدام stringType=”com.fictional_company.cool_product.unicorn_detector” . و stringType يستخدم لتعريف أجهزة الاستشعار أنواع غير الرسمية بشكل فريد. انظر sensors.h لمزيد من المعلومات حول أنواع وأنواع السلسلة.

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

الأعلام: أعلام لهذا الاستشعار، وتحديد وضع التقارير استشعار وإذا كان المجس هو استشعار إيقاظ أم لا. على سبيل المثال، جهاز استشعار إيقاظ دفعة واحدة لديها flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP . يجب ترك بتات العلم التي لم يتم استخدامها في إصدار HAL الحالي مساوية لـ 0.

maxRange: القيمة القصوى للاستشعار يمكن أن تبلغ في نفس الوحدة كما في القيم المبلغ عنها. يجب أن يكون استشعار قادرة على تقرير القيم دون تشبع داخل [-maxRange; maxRange] . لاحظ أن هذا يعني أن مجموعة الكلي للاستشعار بمعناها الواسع هي 2*maxRange . عندما يُبلغ المستشعر عن قيم عبر عدة محاور ، فإن النطاق ينطبق على كل محور. على سبيل المثال، فإن "+/- 2G" التسارع تقرير maxRange = 2*9.81 = 2g .

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

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

minDelay: للحصول على أجهزة استشعار مستمرة، فترة أخذ العينات، في ميكروثانية، الموافق أسرع معدل الدعم الاستشعار. انظر sampling_period_ns حصول على تفاصيل حول كيفية استخدام هذه القيمة. حذار أن minDelay ما يعبر عنه في ميكروثانية في حين sampling_period_ns في نانو ثانية. لعلى التغيير وأجهزة الاستشعار الخاصة وضع التقارير، ما لم ينص على خلاف ذلك، minDelay يجب أن يكون 0. لأجهزة الاستشعار طلقة واحدة، يجب أن يكون -1.

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

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

fifoMaxEventCount: الحد الأقصى لعدد من الأحداث التي يمكن تخزينها في FIFOs لهذا الاستشعار. هذا هو دائما أكبر أو يساوي fifoReservedEventCount . تُستخدم هذه القيمة لتقدير مدى سرعة امتلاء FIFO عند التسجيل في المستشعر بمعدل معين ، بافتراض عدم تنشيط أي مستشعرات أخرى. على الأنظمة التي لم يكن لديك FIFO الأجهزة، fifoMaxEventCount غير 0. انظر التجزئة لمزيد من التفاصيل.

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

sensors_event_t

الأحداث الاستشعار التي تولدها أجهزة الاستشعار الروبوت والإبلاغ عنه من خلال استطلاع وظيفة هي من type sensors_event_t . وفيما يلي بعض المجالات الهامة من sensors_event_t :

النسخة: يجب أن يكون sizeof(struct sensors_event_t)

الاستشعار: المؤشر من أجهزة الاستشعار التي ولدت هذا الحدث، كما تم تعريفها من قبل sensor_t.handle .

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

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

البيانات وتداخل الحقول: القيم المقاسة بواسطة أجهزة الاستشعار. معنى ووحدات هذه الحقول خاصة بكل نوع من أنواع أجهزة الاستشعار. انظر sensors.h وتعريف مختلف أنواع الاستشعار للحصول على وصف حقول البيانات. بالنسبة لبعض أجهزة الاستشعار، ويقال دقة القراءات أيضا كجزء من البيانات، من خلال status الميداني. يتم تمرير هذا الحقل فقط لأنواع المستشعرات المحددة ، والتي تظهر في طبقة SDK كقيمة دقة. بالنسبة لأولئك أجهزة الاستشعار، وذكر أن حقل الحالة يجب تعيين في حياتهم استشعار نوع التعريف.

تدفق البيانات الوصفية الأحداث كاملة

الأحداث الوصفية لديها نفس نوع الأحداث استشعار العادية: sensors_event_meta_data_t = sensors_event_t . يتم إرجاعها مع أحداث أجهزة الاستشعار الأخرى من خلال الاستطلاع. لديهم المجالات التالية:

النسخة: يجب أن يكون META_DATA_VERSION

اكتب: يجب أن يكون SENSOR_TYPE_META_DATA

الاستشعار، ومحفوظة، والطابع الزمني: يجب أن تكون 0

meta_data.what: يحتوي على نوع الفوقية لهذا الحدث. هناك حاليا واحد صحيح نوع الفوقية: META_DATA_FLUSH_COMPLETE .

META_DATA_FLUSH_COMPLETE تمثل الأحداث الانتهاء من مطاردة جهاز استشعار FIFO. عندما meta_data.what=META_DATA_FLUSH_COMPLETE ، meta_data.sensor يجب تعيين المقبض من أجهزة الاستشعار التي تم استواء. يتم إنشاؤها أنها عندما وفقط عندما flush يسمى في جهاز استشعار. راجع المقطع على تدفق وظيفة لمزيد من المعلومات.