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

במהדורת L של אנדרואיד, אנו מפסיקים את התמיכה בכמה גרסאות 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 ליצור אירוע 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 עבור כל חיישני האנדרואיד הרשמיים (אלו המוגדרים ב-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 סיביות רק מסיבות של תאימות בינארית.

דגלים : שדה זה מגדיר את מצב הדיווח של החיישן והאם החיישן הוא חיישן השכמה.

אם אינך מיישם אצווה, ורק עובר מ-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 עבור חיישן הקרבה וחיישן גלאי ההטיה הרשמי של אנדרואיד.

הערות בעת שדרוג מ-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 .