מידע על המבנה של vehicle_hw_device

מידע על המבנה של 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)
 

תיאור מפורט

ההגדרה מופיעה בשורה 1639 בקובץ vehicle.h .

מסמכי תיעוד של שדה

struct hw_device_t common

ההגדרה מופיעה בשורה 1640 בקובץ vehicle.h .

int(* dump)(struct vehicle_hw_device *device, int fd)

הדפסת מצב ניפוי הבאגים של ממשק ה-HAL של הרכב. השירות הזה יקרא על ידי שירות הרשת ברכב ויכלול את האשפה של השירות.

אפשר להשתמש בתיאור הקובץ שהוענק כדי לכתוב טקסט לניפוי באגים באמצעות dprintf()‎ או write(). ‎ הטקסט צריך להיות בקידוד ASCII בלבד.

דרישות הביצועים:

זו חייבת להיות קריאה לא חוסמת. ה-HAL אמור לחזור מהקריאה הזו תוך 1ms, והוא חייב לחזור מהקריאה הזו תוך 10ms. צריך להימנע מנעילה מרובת משאבים (deadlock) בקריאה הזו, כי היא עשויה להתבצע בכל שלב של הפעולה. כל רכיבי הסנכרון הבסיסיים שבהם נעשה שימוש (כמו מנעולים מסוג mutex או סמפורים) צריכים להיות מופעלים עם זמן קצוב לתפוגה.

ההגדרה מופיעה בשורה 1744 בקובץ vehicle.h .

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.

ההגדרה מופיעה בשורה 1681 בקובץ vehicle.h .

אחרי שמפעילים את open במכשיר, המשתמש צריך לרשום פונקציות קריאה חוזרת (callbacks) לפונקציות של אירועים ושגיאות.

ההגדרה מופיעה בשורה 1646 בקובץ vehicle.h .

vehicle_prop_config_t const*(* list_properties)(struct vehicle_hw_device *device, int *num_properties)

מציגים את כל המאפיינים הזמינים. הרשימה מוחזרת ב-"list".

פרמטרים
num_properties מספר הנכסים שמופיעים במערך המוחזר.
החזרות
מערך של הגדרות נכס שנתמכות ברכב הזה. שימו לב שהנתונים המוחזרים הם const והמבצע הקורא לא יכול לשנות אותם. הטמעת HAL צריכה לשמור את הזיכרון הזה עד לפרסום HAL כדי למנוע העתקה חוזרת.

ההגדרה מופיעה בשורה 1663 בקובץ vehicle.h .

int(* release)(struct vehicle_hw_device *device)

לפני שמפעילים את close, המשתמש צריך למחוק את פונקציות הקריאה החוזרת הרשומה. אם הקריאה ל- ‎unsubscribe()‎ לא מתבצעת בכל הנכסים לפני הקריאה ל- ‎release()‎ , הקריאה ל- ‎release()‎ תבטל את ההרשמה של הנכסים בעצמה.

ההגדרה מופיעה בשורה 1654 בקובץ vehicle.h .

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 הרכב.

ההגדרה נמצאת בשורה 1693 בקובץ vehicle.h .

int(* set)(struct vehicle_hw_device *device, const vehicle_prop_value_t *data)

מגדירים ערך למאפיין של הרכב. צריך להקצות את הנתונים בצורה נכונה ולא להגדיר אותם כ-NULL. מבצע הקריאה ל-API הוא הבעלים של שדה הנתונים. המערכת תתעלם מחותמת הזמן של הנתונים בפעולות הגדרה. כדי להגדיר חלק מהמאפיינים, צריך שהמצב הראשוני יהיה זמין. בהתאם ל-HAL של הרכב, יכול להיות שהנתונים הראשוניים האלה לא יהיו זמינים למשך זמן קצר אחרי ההפעלה. במקרה כזה, קריאה להגדרה יכולה להחזיר את הערך -EAGAIN כמו קריאה לקבלה. בנכס עם בקרת מתח נפרדת, הפעולה של set עשויה להיכשל אם המכשיר לא פועל. במקרה כזה, HAL אמור להחזיר את השגיאה -ESHUTDOWN.

ההגדרה מופיעה בשורה 1706 בקובץ vehicle.h .

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 מציין את כל האזורים הנתמכים במקום אף אזור.

ההגדרה מופיעה בשורה 1723 בקובץ vehicle.h .

int(* unsubscribe)(struct vehicle_hw_device *device, int32_t prop)

ביטול המינוי לנכס.

ההגדרה מופיעה בשורה 1727 בקובץ vehicle.h .


התיעוד של המבנה הזה נוצר מהקובץ הבא: