הוצאה משימוש של גרסת HAL

בגרסת 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.