בגרסת 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 (הצלחה).
שינוי חיישני_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,
fifoReserveEventCount: אם לא מטמיעים קיבוץ באצווה, צריך להגדיר את הקיבוץ ל-0.
fifoMaxEventCount: אם לא מטמיעים קיבוץ באצווה של קריאות, צריך להגדיר את הקיבוץ ל-0.
stringType: יש להגדיר את הערך 0 לכל חיישני Android הרשמיים (אלה שמוגדרים ב segments.h), כי ה-framework יחליף את הערך הזה. עבור חיישנים לא רשמיים, sensor_t .
ההרשאה הנדרשת: ההרשאה הנדרשת שהאפליקציות יצטרכו לקבל
גישה לחיישן. בדרך כלל אפשר להגדיר את הערך כ-0 בכל החיישנים
אבל חיישנים מסוג HEART_RATE
חייבים להגדיר את הערך SENSOR_PERMISSION_BODY_SENSORS.
maxDelay: הערך הזה חשוב וצריך להגדיר אותו בהתאם היכולות של החיישן ושל הנהג.
הערך הזה מוגדר רק לחיישנים רציפים ולחיישנים שעוברים שינויים. זו
בין שני אירועי חיישן שתואמים לתדר הנמוך ביותר
תומך בחיישן. כשנשלחת בקשה לתדרים נמוכים יותר דרך
הפונקציה batch
, האירועים ייווצרו בתדירות הזו.
במקום זאת. ה-framework או האפליקציות יכולים להשתמש בו כדי להעריך מתי
יכול להיות ש-FIFO מלא באצווה. אם הערך הזה לא מוגדר כראוי, CTS ייכשל.
יש להגדיר את הערך של maxDelay
ל-0 בשביל חיישנים חד-פעמיים ומצבי דיווח מיוחדים.
עבור חיישנים רציפים, יש להגדיר את תקופת הדגימה המקסימלית המותרת מיקרו-שניות.
ההגדרות הבאות רלוונטיות ל-period_ns
, ל-maxDelay
ול-minDelay
:
period_ns
הוא בננו-שניות ואילוmaxDelay
/minDelay
נמצאים במיליוניות השנייה.maxDelay
צריך תמיד להתאים בתוך מספר שלם חתום של 32 ביט. הוא מוצהר כ-64 ביט בארכיטקטורות של 64 ביט רק מסיבות של תאימות בינארית.
דגלים: השדה הזה מגדיר את מצב הדיווח של החיישן והאם החיישן חיישן התעוררות.
אם אתם לא מיישמים קיבוץ באצווה ומעבירים רק מ-1.0 ל-1.3, יש להגדיר to:
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
.