הקטעים הבאים מתארים איך לעבוד עם שכבת הפשטה של החומרה (HAL) כדי: להטמיע רדיו שמשודר.
ממשק HAL לשידור רדיו
פרוטוקול HAL של תחנת הרדיו Broadcast מספק מבני נתונים וממשקים ברמת החומרה כדי להטמיע רדיו משודר, כמו רדיו AM/FM ו-DAB.
ממשקי HIDL 2.0 ו-AIDL
פרוטוקול HAL של רדיו השידורים משתמש בממשקים שמתוארים בסעיפים הבאים.
IMessagementListener
IAnnouncementListener
הוא ממשק הקריאה החוזרת (callback) של אוזן ההודעות,
ניתן להירשם בתקשורת HAL לשידורים של הודעות כדי לקבל הודעות. בממשק יש את הפרטים הבאים
אמצעי תשלום:
IMessagementListener | ||
---|---|---|
תיאור: תתבצע שיחה בכל פעם שיש ברשימת ההודעות השתנה. | ||
HIDL 2.0 | oneway onListUpdated(vec<Announcement> announcements) |
|
AIDL | oneway void onListUpdated(in Announcement[] announcements) |
ICloseHandle
ICloseHandle
הוא נקודת האחיזה הגנרית הקרובה כדי להסיר קריאה חוזרת (callback) שלא מצריכה
ממשק פעיל.
ICloseHandle | ||
---|---|---|
תיאור: סגירת נקודת האחיזה. | ||
HIDL 2.0 | close() |
|
AIDL | void close() |
ITunerCallback
ITunerCallback
הוא ממשק הקריאה החוזרת (callback) שנקרא על ידי HAL של הרדיו שמשודר אל
שליחת עדכונים לשירות לקוח HAL.
ITunerCallback | ||
---|---|---|
תיאור: מופעל על ידי HAL במהלך פעולת כוונון (כוונון, דילוג (ב-AIDL) או סריקה (ב-HIDL) והשלב נכשלים באופן אסינכרוני. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
תיאור: הקריאה מופעלת בזמן כוונון, דילוג (ב-AIDL) או סריקה (ב-HIDL), או שהשלב מצליח. | ||
HIDL 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) |
|
AIDL | void onTuneFailed(in Result result, in ProgramSelector selector) |
|
תיאור: הקריאה מופעלת בזמן כוונון, דילוג (ב-AIDL) או סריקה (ב-HIDL), או שהשלב מצליח. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
תיאור: מופעל כשרשימת התוכניות מתעדכנת. ה הגודל של כל מקטע צריך להיות מוגבל ל-500KiB. | ||
HIDL 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
AIDL | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
תיאור: מופעלת כשהאנטנה מחוברת או מנותק. | ||
HIDL 2.0 | oneway onAntennaStateChange(bool connected) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
תיאור: נשלחת קריאה כשפרמטר ספציפי לספק
הערכים מתעדכנים באופן פנימי ב-HAL (אין להפעיל אותו לאחר הקריאה
setParameters על ידי לקוח HAL). |
||
HIDL 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) |
|
AIDL | void onParametersUpdated(in VendorKeyValue[] parameters) |
|
תיאור: חדש ב-AIDL. מתבצעת קריאה כאשר דגל ההגדרה הוא
עודכן באופן פנימי ב-HAL (לא אמור להיות
הופעלה אחרי קריאה אל setConfigFlag באמצעות לקוח HAL). |
||
HIDL 2.0 | לא ישים. | |
AIDL | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
IBroadcastRadio
IBroadcastRadio
הוא הממשק הראשי לשידור חי של רדיו. ב-HIDL
2.0 HAL, שימוש בממשק ITunerSession
לטיונר לביצוע פעולות. אבל, במקרה
רוב טיונר אחד פעיל בו-זמנית (בתנאי שכל מופע HAL של רדיו משודר כולל רק טיונר אחד
).
בוצעה הסרה של ITunerSession
מהממשקים של AIDL והממשקים שלו הועברו אל
IBroadcastRadio
.
IBroadcastRadio | ||
---|---|---|
תיאור: הצגת התיאור של המודול יכולות. | ||
HIDL 2.0 | getProperties() generates (Properties properties) |
|
AIDL | Properties getProperties() |
|
תיאור: אחזור ה-AM/FM הנוכחי או האפשרי הגדרת האזור. | ||
HIDL 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig
config) |
|
AIDL | AmFmRegionConfig getAmFmRegionConfig(bool full) |
|
תיאור: אחזור אזור DAB הנוכחי הגדרה אישית. | ||
HIDL 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry>
config) |
|
AIDL | DabTableEntry[] getDabRegionConfig() |
|
תיאור: קבלת תמונה מהמטמון של מודול הרדיו. ב-AIDL, גודל התמונה חייב להיות קטן מ-1MB בגלל מגבלה קשיחה על מאגר הנתונים הזמני של הקלסר. | ||
HIDL 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) |
|
AIDL | byte[] getImage(in int id) |
|
תיאור: רישום האזנה להודעה. | ||
HIDL 2.0 | registerAnnouncementListener(vec<AnnouncementType>
enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle
closeHandle) |
|
AIDL | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in
AnnouncementType[] enabled) |
|
תיאור:
|
||
HIDL 2.0 | openSession(ITunerCallback callback) יוצר
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
תיאור:
|
||
HIDL 2.0 | close() |
|
AIDL | unsetTunerCallback() |
|
תיאור: התאמה לתוכנית ספציפית. | ||
HIDL 2.0 | tune(ProgramSelector program) generates (Result result) |
|
AIDL | void tune(in ProgramSelector program) |
|
תיאור: חיפוש התוכנית החוקית הבאה
air. כדי למנוע בלבול ב-AIDL,
השם של scan השתנה ל-seek .
|
||
HIDL 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) |
|
AIDL | void seek(in boolean directionUp, in boolean skipSubChannel) |
|
תיאור: שלבים לערוץ הקרוב, שאולי לא להיות חלק מתוכנית כלשהי. | ||
HIDL 2.0 | step(bool directionUp) generates (Result result) |
|
AIDL | void step(in boolean directionUp) |
|
תיאור: ביטול של כוונון עדין, סריקה (ב-HIDL) או דילוג (ב-AIDL) או פעולות של שלבים. | ||
HIDL 2.0 | cancel() |
|
AIDL | void cancel() |
|
תיאור: המערכת מחילה מסנן על רשימת התוכניות
מתחיל לשלוח עדכונים של רשימת התוכניות
התקשרות חזרה onProgramListUpdated . |
||
HIDL 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) |
|
AIDL | void startProgramListUpdates(in ProgramFilter filter) |
|
תיאור: העדכונים על רשימת התוכניות יופסקו. | ||
HIDL 2.0 | stopProgramListUpdates() |
|
AIDL | void stopProgramListUpdates() |
|
תיאור: אחזור ההגדרה הנוכחית של מאפיין נתון דגל config. | ||
HIDL 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) |
|
AIDL | boolean isConfigFlagSet(in ConfigFlag flag) |
|
Description: מגדיר את דגל config הנתון. | ||
HIDL 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) |
|
AIDL | void setConfigFlag(in ConfigFlag flag, boolean value) |
|
Description: הגדרת ערכי פרמטרים ספציפיים לספק. | ||
HIDL 2.0 | setParameters(vec<VendorKeyValue> parameters)
יוצר, (vec<VendorKeyValue> results) |
|
AIDL | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) |
|
תיאור: מאחזר ערכי פרמטרים ספציפיים לספק. | ||
HIDL 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue>
parameters) |
|
AIDL | VendorKeyValue[] getParameters(in String[] keys) |
הבהרות בממשק
התנהגות אסינכרונית
מכיוון שכל פעולת כוונון (לדוגמה, כוונון, סריקה (ב-HIDL) או דילוג (ב-AIDL) וצעד, עשויים צריך להיות גוזל זמן רב ואין לחסום את ה-thread למשך זמן רב, הפעולה לתזמן פעולות שצורכות זמן רב כך שיתרחשו מאוחר יותר ויחזירו במהירות סטטוס או תוצאה. בפירוט, כל פעולה צריכה:
- ביטול כל פעולות הכוונון שבהמתנה.
- לבדוק אם אפשר לעבד את הפעולה בהתאם לקלט של השיטה ולסטטוס של בטיונר.
- מתזמנים את משימת הכוונון ומחזירים את הערך
Result
(ב-HIDL) אוstatus
(ב-AIDL) באופן מיידי. אם הערך שלResult
או שלstatus
הואOK
, הקריאה החוזרת של הטיונר צריך לקרוא אלtuneFailed
אוcurrentProgramInfoChanged
בזמן הכוונון נכשלה (לדוגמה, בגלל שעבר הזמן הקצוב לתפוגה) או שהיא הושלמה.
באופן דומה, startProgramListUpdates
מתזמנת גם את המשימה שגוזלת זמן
לעדכן את רשימת התוכניות כך שתבוצע מאוחר יותר ולהחזיר במהירות סטטוס או תוצאה. השיטה
תחילה מבטל בקשות עדכון בהמתנה, ולאחר מכן מתזמנ את משימת העדכון ומחזיר במהירות
תוצאה אחת.
גזע
בגלל ההתנהגות האסינכרונית של פעולות הכוונון (לדוגמה, כוונון, סריקה (ב-HIDL) או חיפוש
(ב-AIDL) ובשלב), יש מרוץ תהליכים בין ביטול הפעולה לבין הכוונון
ב-AI. אם מתבצעת קריאה אל cancel
אחרי ש-HAL משלים פעולת כוונון ולפני
כשהקריאה החוזרת תסתיים, אפשר להתעלם מהביטול והקריאה החוזרת צריכה להסתיים ולקבלה.
על ידי לקוח HAL.
באופן דומה, אם מתבצעת קריאה אל stopProgramListUpdates
אחרי שהושלמה תוכנית HAL
ולפני שהקריאה החוזרת של onCurrentProgramInfoChanged
תסתיים,
אפשר להתעלם מ-stopProgramListUpdates
והקריאה החוזרת צריכה להסתיים.
מגבלת גודל הנתונים
מכיוון שיש מגבלה קשיחה על מאגר הנתונים הזמני של קלסר, מגבלת הנתונים בחלק מהממשק טכנולוגיית AIDL HAL מבהירה שיטות להעברת נתונים בגודל שעשוי להיות גדול.
- כדי להשתמש בפונקציה
getImage
צריך להחזיר תמונה בגודל של פחות מ-1MB. - הפונקציה
onProgramListUpdate
מחייבת שכלchunk
יהיה קטן מ-500kiB. צריך לפצל רשימות גדולות יותר של תוכניות על ידי הטמעת HAL למספר מקטעים ולשלוח אותם מספר קריאות חוזרות (callback).
שינויים במבני הנתונים של AIDL HAL
נוסף לשינויים בממשקים, השינויים האלה הוחלו על מבני הנתונים מוגדר ברדיו AIDL HAL שמשודר בשידור, שמנצל את ה-AIDL.
- מסירים את הערך
Constant
enum ב-AIDL ומוגדר כ-int ב-IBroadcastRadio
. בינתיים, השםANTENNA_DISCONNECTED_TIMEOUT_MS
השתנה אלANTENNA_STATE_CHANGE_TIMEOUT_MS
. ערך קבוע חדשTUNER_TIMEOUT_MS
הוא נוסף. יש להשלים את כל פעולות הכוונון, הדילוג והצעד בפרק הזמן הזה. - הערכים של הטיפוס
RDS
ו-Deemphasis
מוסרים ב-AIDL ומוגדרים כ-int. ב-AmFmRegionConfig
. במקביל, גםfmDeemphasis
וגםfmRds
ב-ProgramInfo
הוצהרו כ-int, תוצאת חישוב ביט של הדגלים המתאימים. בינתיים, השמות שלD50
ושלD75
השתנו ל-DEEMPHASIS_D50
ו-DEEMPHASIS_D75
, בהתאמה. - הערכים של הטיפוס
ProgramInfoFlags
מסירים ב-AIDL ומוגדרים כ-inst ב-ProgramInfo
עם התחיליתFLAG_
נוספה. בהתאם,infoFlags
ב-ProgramInfo
מוצהר כ-int, תוצאת חישוב של ביט של דגלים. גם השםTUNED
השתנה ל-FLAG_TUNABLE
כדי לתאר טוב יותר את ההגדרה שלו, שאפשר לכוונן את התחנה לפיה. - ב-
AmFmBandRange
, השם שלscanSpacing
השתנה ל-seekSpacing
, כי השם שלscan
השתנה ל-seek
ב-AIDL. - מכיוון שהמושג איחוד נכלל ב-AIDL, ב-
MetadataKey
Metadata
שהוגדרו ב-HIDL HAL כבר לא בשימוש. איחוד AIDLMetadata
מוגדרת ב-AIDL HAL. כל ערך enum שהיה קודם ב-MetadataKey
הוא עכשיו שדה ב-Metadata
מסוג מחרוזת או Int, בהתאם להגדרות שלהם.