מידע על המבנה של vehicle_hw_device
#include <
vehicle.h
>
שדות נתונים |
|
struct hw_device_t | נפוץ |
int(* | init )(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
int(* | release )(struct vehicle_hw_device *device) |
vehicle_prop_config_t const *(* | list_properties )(struct vehicle_hw_device *device, int *num_properties) |
int(* | get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
void(* | release_memory_from_get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
int(* | set )(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
int(* | subscribe )(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
int(* | unsubscribe )(struct vehicle_hw_device *device, int32_t prop) |
int(* | dump )(struct vehicle_hw_device *device, int fd) |
תיאור מפורט
מסמכי תיעוד של שדה
struct hw_device_t common |
int(* dump)(struct vehicle_hw_device *device, int fd) |
הדפסת מצב ניפוי הבאגים של ממשק ה-HAL של הרכב. השירות הזה יקרא על ידי שירות הרשת ברכב ויכלול את האשפה של השירות.
אפשר להשתמש בתיאור הקובץ שהוענק כדי לכתוב טקסט לניפוי באגים באמצעות dprintf() או write(). הטקסט צריך להיות בקידוד ASCII בלבד.
דרישות הביצועים:
זו חייבת להיות קריאה לא חוסמת. ה-HAL אמור לחזור מהקריאה הזו תוך 1ms, והוא חייב לחזור מהקריאה הזו תוך 10ms. צריך להימנע מנעילה מרובת משאבים (deadlock) בקריאה הזו, כי היא עשויה להתבצע בכל שלב של הפעולה. כל רכיבי הסנכרון הבסיסיים שבהם נעשה שימוש (כמו מנעולים מסוג mutex או סמפורים) צריכים להיות מופעלים עם זמן קצוב לתפוגה.
int(* get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
קבלת ערך של מאפיין רכב באופן מיידי. הנתונים צריכים להיות מוקצים בצורה נכונה. מבצע הקריאה ל-API הוא הבעלים של שדה הנתונים. מבצע הקריאה יגדיר את data->prop, data->value_type ואת ערך האזור (אופציונלי) לנכס מחולק לאזורים. אבל הטמעת HAL צריכה למלא את כל הרשומות כראוי כשהיא חוזרת. עבור סוג של מצביע, הטמעת HAL צריכה להקצות את הזיכרון הנדרש, והמבצע הקורא אחראי לקרוא ל-release_memory_from_get, שמאפשר ל-HAL לשחרר את הזיכרון שהוקצה. עבור נכס מסוג VEHICLE_PROP_CHANGE_MODE_STATIC, הפונקציה get תמיד אמורה להחזיר את אותו ערך. עבור נכס מסוג VEHICLE_PROP_CHANGE_MODE_ON_CHANGE, הוא אמור להחזיר את הערך האחרון. אם עדיין אין נתונים זמינים, מה שיכול לקרות בשלב הראשוני, הקריאה הזו אמורה לחזור באופן מיידי עם קוד השגיאה -EAGAIN.
int(* init)(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
vehicle_prop_config_t const*(* list_properties)(struct vehicle_hw_device *device, int *num_properties) |
מציגים את כל המאפיינים הזמינים. הרשימה מוחזרת ב-"list".
- פרמטרים
-
num_properties מספר הנכסים שמופיעים במערך המוחזר.
- החזרות
- מערך של הגדרות נכס שנתמכות ברכב הזה. שימו לב שהנתונים המוחזרים הם const והמבצע הקורא לא יכול לשנות אותם. הטמעת HAL צריכה לשמור את הזיכרון הזה עד לפרסום HAL כדי למנוע העתקה חוזרת.
int(* release)(struct vehicle_hw_device *device) |
לפני שמפעילים את close, המשתמש צריך למחוק את פונקציות הקריאה החוזרת הרשומה. אם הקריאה ל- unsubscribe() לא מתבצעת בכל הנכסים לפני הקריאה ל- release() , הקריאה ל- release() תבטל את ההרשמה של הנכסים בעצמה.
void(* release_memory_from_get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
שחרור הזיכרון שהוקצה לנתונים בקריאת get הקודמת. קריאת get לביתת בייט או למחרוזת כוללת הקצאת הזיכרון הנדרש מ-HAL הרכב. מטעמי בטיחות, צריך לשחרר את הזיכרון שהוקצה על ידי vehicle hal על ידי vehicle hal, ושירות הרשת של הרכב יבצע את הקריאה הזו כשהנתונים מ-vehicle hal כבר לא נחוצים. הטמעת vehicle hal צריכה לשחרר רק את המאפיין של vehicle_prop_value_t, כמו data->str_value.data או data->bytes_value.data, אבל לא את הנתונים עצמם, כי הנתונים עצמם הוקצו על ידי שירות הרשת של הרכב. אחרי שמשחררים את הזיכרון, צריך להגדיר את ההצבעה המתאימה ל-NULL על ידי HAL הרכב.
int(* set)(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
מגדירים ערך למאפיין של הרכב. צריך להקצות את הנתונים בצורה נכונה ולא להגדיר אותם כ-NULL. מבצע הקריאה ל-API הוא הבעלים של שדה הנתונים. המערכת תתעלם מחותמת הזמן של הנתונים בפעולות הגדרה. כדי להגדיר חלק מהמאפיינים, צריך שהמצב הראשוני יהיה זמין. בהתאם ל-HAL של הרכב, יכול להיות שהנתונים הראשוניים האלה לא יהיו זמינים למשך זמן קצר אחרי ההפעלה. במקרה כזה, קריאה להגדרה יכולה להחזיר את הערך -EAGAIN כמו קריאה לקבלה. בנכס עם בקרת מתח נפרדת, הפעולה של set עשויה להיכשל אם המכשיר לא פועל. במקרה כזה, HAL אמור להחזיר את השגיאה -ESHUTDOWN.
int(* subscribe)(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
להירשם לאירועים. בהתאם לפלט של list_properties, אם המאפיין הוא: א) on-change: צריך להגדיר את sample_rate כ-0. ב) supports frequency: צריך להגדיר את sample_rate מ-min_sample_rate ל-max_sample_rate. לנכסים מסוג 'בזמן שינוי', שירות הרשת של הרכב יבצע קריאה נוספת ל-get כדי לבדוק את המצב הראשוני. לכן, בהטמעה של HAL לכלי רכב אין צורך לשלוח מצב ראשוני למאפיינים מסוג 'בזמן שינוי'.
- פרמטרים
-
מכשיר תפאורה sample_rate תחומים כל האזורים שנרשמו לנכס מחולק לאזורים. אפשר להתעלם מהם בנכס שלא מחולק לאזורים. הערך 0 מציין את כל האזורים הנתמכים במקום אף אזור.
int(* unsubscribe)(struct vehicle_hw_device *device, int32_t prop) |
התיעוד של המבנה הזה נוצר מהקובץ הבא:
- hardware/libhardware/include/hardware/ vehicle.h