שכבת הפשטה של פלטפורמת HAR

משתמשים ב-HAR (רכיב עיבוד עם זמינות גבוהה) כדי להציג מידע על הרכב ש-Android לא יכול להציג. זה יכול לקרות בגלל בעיות כמו הפעלה, זמינות, בטיחות או תקנות. ‫HAR היא אפליקציה ניידת ומובנית שנכתבה ב-Rust.

‫HAR, שנקרא גם מסגרת HAR, כולל קוד שמשמש לבניית אפליקציות. אפליקציה שנבנתה באמצעות HAR היא אפליקציה מבוססת-HAR. למסגרת HAR יש קטעי קוד לפלטפורמות שונות. לדוגמה, במערכת Linux, משתמשים בספריות כמו tinyalsa לצלילים. ל-QNX יש ספריות אודיו ייחודיות משלה.

פלטפורמה כוללת חומרה, מערכת הפעלה, ספריות מערכת וגורמים אחרים. קוד ספציפי לפלטפורמה כולל חלקים שנקראים מערכות משנה. כל מערכת משנה מטפלת בתכונה אחת של הפלטפורמה, כמו אודיו, מצלמות EVS או נתוני רכב. כדי לתמוך בפלטפורמה, צריך להטמיע את כל מערכות המשנה של מסגרת HAR.

יכול להיות שקוד של מערכת משנה ספציפית לפלטפורמה יפעל באותו תהליך כמו האפליקציה שמבוססת על HAR, או בתהליך נפרד. כשהקוד נפרד, הוא מטפל בתקשורת בין תהליכים (IPC) כדי לאמת שהפלטפורמה תומכת באפליקציה. מנגנוני IPC מורכבים צריכים להיות חלק מהקוד הספציפי לפלטפורמה.

חבילת מקרים לבדיקה של HAR מריצה בדיקות בכל מערכות המשנה שהוטמעו בפלטפורמה. בעזרת החבילה הזו אפשר לבדוק אם הפלטפורמות עומדות בדרישות של HAR ולמצוא בעיות חדשות.

הסברים על המונחים

המונחים האלה מופיעים בדף הזה:

אפליקציה מבוססת-HAR
אפליקציה ספציפית לפונקציה או ל-OEM שנבנתה באמצעות מסגרת HAR. אפליקציות שונות זו מזו לפי מצב האפליקציה ומאפיינים אחרים שאפשר להתאים אישית.
מסגרת HAR
מספק קבוצה בסיסית של כלים שמשמשים לבניית אפליקציות.
הפשטה של פלטפורמת HAR
חלק ממסגרת HAR שמספקת API מוכר שכל פלטפורמות היעד צריכות להטמיע.
חבילת מקרים לבדיקה HAR
סדרה של בדיקות מוכרות על הטמעות של פלטפורמות, שעוזרות לוודא שהטמעות של פלטפורמות תומכות ב-framework של HAR בפלטפורמה נתונה.

נכסים מוסתרים

קובץ HAR לא כולל:

  • הטמעות נפרדות לכל פלטפורמת יעד: הטמעות לפלטפורמות יעד. במקום זאת, בדף הזה מתוארים הממשקים שיישומים של פלטפורמות צריכים לכלול, ו<b>חבילת מקרים לבדיקה</b> שצריך לעמוד בה.

  • מקרי בדיקה: מקרי בדיקה ספציפיים לכל הממשקים. במקום זאת, בדף הזה מתוארות פונקציות נפרדות לממשקי API, כולל ארגומנטים, ערכי החזרה, התנהגויות צפויות ותופעות לוואי צפויות. בדף הזה מתואר חבילת מקרים לבדיקה שבה אפשר להטמיע ולהריץ מקרים לבדיקה.

מבנה ארגזים ברמה גבוהה של הפשטת פלטפורמה

פרויקטים ב-Rust מורכבים מ-crates. באיור 1 מוצגת מבנה ה-crate של שכבת ההפשטה של פלטפורמת ה-HAR. שכבת ההפשטה של הפלטפורמה משפיעה על שני ארגזי Rust או יותר:

  • ההפשטות (תיאורי Rust trait) נמצאות בתיבת ה-crate של מסגרת HAR.

  • ההטמעות בפלטפורמה מתבצעות באמצעות har-platform-x crate נפרד. לדוגמה, har-platform-linux או har-platform-android.

אי אפשר ליצור או לבדוק את תיבת ה-HAR בלי לציין הטמעה של פלטפורמה. זה מכוון כי מסגרת HAR היא מסגרת.

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

ארגז HAR

איור 1. ארגז HAR.

מבנה כללי בתוך display-safety

העיצוב הזה מוסיף סדרה של תיבות חדשות למאגר display_safety, כמו שמוצג באיור 2:

תיבת HAR, מסגרת ואפליקציה

איור 2. מודולים של הפשטה.

חבילת בדיקות דומה מבחינה מבנית לאפליקציה, אבל היא מסתמכת רק על תיבת כלים (crate) של הטמעה בפלטפורמה נתונה. חבילת מקרים לבדיקה צריכה להתייחס למאפיינים ולמבנים שמוגדרים במסגרת HAR, אבל לא ליישומים מורכבים יותר.

תיאור כללי של שכבת ההפשטה של הפלטפורמה

בטבלה הזו מתוארות מערכות משנה ספציפיות לפלטפורמה שמוגדרות על ידי שכבת ההפשטה של פלטפורמת HAR.

שם ההפשטה פונקציה קשורה תיאור הערות
OpenGL רינדור דו-ממדי מספק יכולות רינדור של OpenGLES 2.0/3.0 לתיבת הכלים של HAR.
Audio רינדור אודיו הכלי מספק ממשק כמו Android SoundPool לניהול ולהפעלה של אודיו במערכת.
Camera תצוגת המצלמה ברכב מספקת ממשק HAL של EVS כמו לניהול ולהצגה של מידע ממצלמת הרכב.
Looper הלולאה הראשית של האפליקציה והגדרת התצוגה מספק ממשק כמו Android Looper לניהול לולאות ראשיות של אפליקציות ספציפיות לפלטפורמה ולהצגת הגדרות.
UserInput מגע, מקלדת, הגה או בקר סיבובי, וקלט אחר ספציפי לפלטפורמה מספק ממשק להזנת קלט של מגע ומקלדת לאפליקציות מבוססות-HAR. הטמעה לדוגמה שמבוססת על Linux evdev ב-har-user-input-evdev.
VehicleData שדה להזנת מצב הרכב מספק ממשק להעברת זרם של נתוני רכב שרירותיים לאפליקציות מבוססות-HAR, כמו אלה שמסופקים על ידי Android VHAL או CAN bus.
ResourceManager מסמך עיצוב ספציפי לאפליקציה שנשמר במטמון מספק מטמון בזיכרון של משאבים שנדרשים להפעלה של HAR, כמו תמונות ששמורות במטמון ומסמכי עיצוב. עדיין לא הוטמע מטמון דיסק.
Logging רישום ביומן המערכת וטלמטריה השירות הזה מספק תמיכה ברישום ביומן ספציפי לפלטפורמה באמצעות מערכת המעקב. כך מופעל איסוף טלמטריה כנדרש על ידי הפלטפורמה.
Tracing תיעוד עקבות המערכת מספק הפשטה לשילוב עם מערכות תיעוד עקבות ופרופילים.
Monitoring ניטור המערכת ערכת כלים למעקב אחרי ביצועים וזמני אחזור במסגרת HAR.
Commlib נתוני הרכב הטמעה לדוגמה באמצעות סריאליזציה של Protobuf. הוצא משימוש: צריך להשתמש בממשקי API שמוגדרים ב-reference/harry-control-api וביישומים harry-grpcio-server ו-harry-tonic-server (יישום לדוגמה).
TestSupport בדיקת ווים של תמיכה תמיכה בבנייה ובפירוק של תרחישי בדיקה, ביצירה של אירועי בדיקה וביצירה של ארטיפקטים של בדיקה. לדוגמה, יצירת אירועי מגע מסימולציה כדי לבדוק את UserInput ויצירת צילומי מסך לצורך ניתוח. התכונה הזו נעולה על ידי Rust כדי למנוע הכללה בגרסאות ייצור.

מוסכמות מתן שמות ומבני מסגרות

בטבלה הזו מוצגים השמות והמבנים האלה:

  • מופעים צפויים של מערכת משנה trait שסופקו על ידי מסגרת HAR. כל trait מייצג מערכת משנה ספציפית לפלטפורמה שצריך להטמיע.

  • השמות הצפויים של יישומי מערכת משנה ספציפיים לפלטפורמה בכל תיבת פלטפורמה. אפליקציות שמבוססות על HAR מצפות שהשמות הספציפיים האלה יוטמעו.

  • בדרך כלל משתמשים במופעים קשורים של מסגרת HAR‏ enum ו-struct כדי להעביר מידע מהטמעות שקשורות לפלטפורמה אל מסגרת HAR.

שמות המאפיינים שמות ההטמעה מבני נתונים וספירות של framework HAR
GlContextFactory OpenGL trait harry::Renderer
harry::DisplayRotation
AudioApiFactory Audio harry::AudioApi
harry::AudioDevice
harry::VolumeMillibel
ICameraManager Camera harry::ICameraDevice
harry::CameraDescriptor
Looper Looper harry::LooperMessage
harry::LooperOptions
harry::DisplayId
PlatformVehicleData VehicleData harry::VehicleDataType
harry::VehicleDataListener
ResourceManager (Struct) ResourceManager harry::ResourceManagerMessage
harry::ResourceToken
harry::RawImageData
PlatformTracing Tracing לא רלוונטי
HarPerformanceMonitor Monitoring harry::Renderer
harry::ResolveLatencyToken
PlatformTestSupport TestSupport harry::TestConfig
harry::TestDisplayConfig

שגיאות וטיפול בשגיאות

ממשקי ה-API המוצעים משתמשים בסוג Result<> של Rust. ב-Rust צריך לבדוקResult סוגים שכוללים שגיאות. אם לא, הקומפיילר יוצר אזהרה או שגיאה. בדיקה בזמן בנייה אוכפת בדיקת שגיאות מקוד ספציפי לפלטפורמה.

שגיאות שמוחזרות מהטמעות של פלטפורמות הן מסוג harry::error::Error. כדי לוודא שסוגי השגיאות של הפלטפורמה לא חודרים לקוד האפליקציה, משתמשים בסוג השגיאה הרגיל שמסופק על ידי מסגרת ה-HAR.

סוג harry::error::Error מתרחב וכולל שגיאות ספציפיות לכל מערכות המשנה:

// This is Rust
pub enum Error {
  Msg(String), // A generic message string
  // Legacy error type, likely to be removed or merged into Msg
  Audio(String),
}

שגיאות שלא ניתן לתקן מוחזרות בעיקר דרך הממשקים המוגדרים ופונקציות ה-callback.

עיצוב מפורט של חבילת מקרים לבדיקה

בקטע הזה מתואר העיצוב של חבילת מקרים לבדיקה, שמאמתת הטמעות של הפשטות שספציפיות לפלטפורמה.

יצירת בדיקות בחבילת מקרים לבדיקה

ב-Soong builds (מוגדרים על ידי קובצי Android.bp), הבדיקות עוברות קומפילציה כחלק ממערכת ה-build של פלטפורמת Android, וההפעלה שלהן מנוהלת על ידי atest.

הרצת חבילת מקרים לבדיקה

כדי לבדוק פלטפורמה ספציפית:

משתמשים בפקודה atest עם יעד הבדיקה הרלוונטי (לדוגמה, atest <module_name>). הפקודה הזו פורסת את הבדיקות ומריצה אותן במכשיר או באמולטור של Android.