במהדורת L של Android, אנחנו מפסיקים את התמיכה בגרסאות מסוימות של HAL לחיישנים. הגרסאות הנתמכות היחידה הן SENSORS_DEVICE_API_VERSION_1_0
ו-SENSORS_DEVICE_API_VERSION_1_3
.
בגרסאות הבאות סביר להניח שנפסיק גם את התמיכה ב-1_0.
ב-1_0 אין מושג של צבירה. אם אפשר, צריך לשדרג את כל המכשירים עם הגרסה 1_0 לגרסה 1_3.
ב-1_1 וב-1_2 יש הגדרה לא טובה של מושג האצווה, והם לא נתמכים יותר
כל המכשירים שמשתמשים כרגע בגרסה 1_1 או 1_2 חייבים לשדרג לגרסה 1_3.
בגרסה 1_3 הפכנו את הרעיון של קיבוץ בקשות לפשוט יותר והוספנו חיישני התעוררות.
כדי לשדרג לגרסה 1_3, מבצעים את השינויים המפורטים בהמשך.
הטמעת פונקציית האצווה
גם אם לא מטמיעים אצווה (אין בחומרה FIFO), צריך להטמיע את הפונקציה batch
. השדה batch
משמש להגדרת תקופת הדגימה וזמן האחזור המקסימלי לדיווח של חיישן נתון. הוא מחליף את setDelay
. לא יתבצעו יותר שיחות אל setDelay
.
אם לא מטמיעים את האצווה, אפשר להטמיע את batch
פשוט על ידי קריאה לפונקציה הקיימת setDelay
עם הפרמטר sampling_period_ns
שסופק.
הטמעת פונקציית ה-flush
גם אם לא מטמיעים את האצווה, צריך להטמיע את הפונקציה flush
.
אם לא מטמיעים את האצווה, flush
חייבת ליצור אירוע META_DATA_FLUSH_COMPLETE
אחד ולהחזיר 0 (הצלחה).
שינוי השדה sensors_poll_device_t.common.version
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
מוסיפים את השדות החדשים להגדרה של החיישנים
כשמגדירים כל חיישן, בנוסף לשדות הרגילים של sensor_t:
.name = "My magnetic field Sensor", .vendor = "My company", .version = 1, .handle = mag_handle, .type = SENSOR_TYPE_MAGNETIC_FIELD, .maxRange = 200.0f, .resolution = CONVERT_M, .power = 5.0f, .minDelay = 16667,
צריך גם להגדיר את השדות החדשים, שמוגדרים בין 1_0 ל-1_3:
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount: אם לא מטמיעים אצווה, מגדירים את הערך הזה ל-0.
fifoMaxEventCount: אם לא מטמיעים אצווה, מגדירים את הערך הזה ל-0
stringType: מגדירים את הערך 0 לכל החיישנים הרשמיים של Android (אלה שמוגדרים ב-sensors.h), כי הערך הזה יוחלף על ידי המסגרת. לפרטים על הגדרת חיישנים לא רשמיים, ראו sensor_t.
requiredPermission: זו ההרשאה שתצטרכו להעניק לאפליקציות כדי שתהיה להן גישה לחיישן. בדרך כלל אפשר להגדיר את הערך הזה ל-0 לכל החיישנים, אבל חיישנים מסוג HEART_RATE
חייבים להגדיר את הערך הזה ל-SENSOR_PERMISSION_BODY_SENSORS.
maxDelay: הערך הזה חשוב וצריך להגדיר אותו בהתאם ליכולות של החיישן ושל מנהל ההתקן שלו.
הערך הזה מוגדר רק לחיישנים רצופיים ולחיישנים שמתעדכנים בזמן אמת. זהו העיכוב בין שני אירועי חיישן שתואמים לתדירות הנמוכה ביותר שהחיישן תומך בה. כשמבקשים תדרים נמוכים יותר באמצעות הפונקציה batch
, האירועים נוצרים בתדירות הזו במקום זאת. אפשר להשתמש בו על ידי המסגרת או האפליקציות כדי להעריך מתי ה-FIFO של האצווה עשוי להתמלא. אם הערך הזה לא מוגדר כראוי, הבדיקה של CTS תיכשל.
לחיישנים עם דיווח חד-פעמי ובמצב דיווח מיוחד, מגדירים את maxDelay
כ-0.
בחיישנים רצופיים, מגדירים את פרק הזמן המקסימלי לדגימה במיקרו-שניות.
הפרטים הבאים רלוונטיים ל-period_ns
, ל-maxDelay
ול-minDelay
:
- הערך של
period_ns
הוא בננו-שניות, ואילו הערכים שלmaxDelay
/minDelay
הם במיליוניות השנייה. - הערך של
maxDelay
צריך תמיד להתאים למספר שלם חתום באורך 32 ביט. הוא מוגדר כ-64 סיביות בארכיטקטורות של 64 סיביות רק מסיבות של תאימות בינארית.
flags: השדה הזה מגדיר את אופן הדיווח של החיישן ואת העובדה שהוא חיישן להפעלה.
אם לא מטמיעים אצווה, ורק עוברים מ-1.0 ל-1.3, מגדירים את הערך הזה בתור:
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
לחיישנים חד-פעמיים
SENSOR_FLAG_CONTINUOUS_MODE
לחיישנים רציפים, SENSOR_FLAG_ON_CHANGE_MODE
לחיישנים שמשנים את הערך, מלבד חיישן הקרבה, SENSOR_FLAG_SPECIAL_REPORTING_MODE
לחיישנים עם מצב דיווח מיוחד, מלבד גלאי ההטיה.
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
עבור חיישן הקרבה וחיישן זיהוי הטיה הרשמי של Android.
הערות לגבי שדרוג מגרסה 1_1 או 1_2
- הפונקציה
batch
מצליחה כמעט תמיד, גם בחיישניים שלא תומכים בצבירה, ללא קשר לערך של ארגומנט הזמן הקצוב לתפוגה. הפונקציהbatch
עשויה להיכשל רק במקרים של שגיאות פנימיות, או אם הערך שלsensor_handle,
שגוי, או אם הערך שלsampling_period_ns
אוmax_report_latency_ns
שלילי. - כדי לבדוק אם חיישן תומך בצבירה, צריך לבדוק אם הערך של
fifoMaxEventCount
גדול מ-0. (בגרסאות קודמות, הוא היה מבוסס על ערך ההחזרה שלbatch()
). - חיישנים שתומכים בצבירה תמיד נמצאים במצב שקראנו לו 'מצב צבירה' בגרסאות קודמות: גם אם הערך של הפרמטר
max_report_latency_ns
הוא 0, עדיין צריך לצבור את הנתונים מהחיישן, כלומר האירועים צריכים להישמר ב-FIFO כש-SoC עובר למצב השהיה. - הפרמטר
flags
של הפונקציהbatch
לא בשימוש יותר. גםDRY_RUN
וגםWAKE_UPON_FIFO_FULL
הוצאו משימוש, והם אף פעם לא יועברו לפונקציהbatch
. - הארגומנט של זמן הקצאת הזמן לקבוצה נקרא עכשיו הארגומנט
max_report_latency
.