توضح الأقسام التالية كيفية العمل باستخدام طبقة تجريد الأجهزة (HAL) من أجل تشغيل البث الإذاعي
بث واجهة HAL للراديو
يوفر جهاز HAL للراديو هياكل وواجهات للبيانات على مستوى الأجهزة تنفيذ محطات إذاعية مثل AM/FM وراديو DAB.
واجهتا HIDL 2.0 وAIDL
يستخدم جهاز HAL للراديو الواجهات الموضحة في الأقسام التالية.
IAdvertisingListener
IAnnouncementListener
هي واجهة معاودة الاتصال لمستمع الإشعار، وهي
تسجيلاً على HAL للإذاعة لتلقي الإعلانات. تتضمّن الواجهة ما يلي
الطرق:
IAdvertisingListener | ||
---|---|---|
الوصف: يتم طلبه عندما تحتوي قائمة الإشعارات على بتغييره. | ||
مستوى HIDL 2.0 | oneway onListUpdated(vec<Announcement> announcements) |
|
لغة تعريف الهوية (AIDL) | oneway void onListUpdated(in Announcement[] announcements) |
ICloseHandle
ICloseHandle
هو الاسم المعرِّف العام لإزالة معاودة الاتصال التي لا تحتاج إلى
وواجهة نشطة.
ICloseHandle | ||
---|---|---|
الوصف: أغلِق الاسم المعرِّف. | ||
مستوى HIDL 2.0 | close() |
|
لغة تعريف الهوية (AIDL) | void close() |
معاودة الاتصال بـ ITuner
ITunerCallback
هي واجهة معاودة الاتصال التي يطلق عليها "HAL" للراديو الإذاعي
إرسال التحديثات إلى خدمة عملاء HAL.
معاودة الاتصال بـ ITuner | ||
---|---|---|
الوصف: يتم استدعاءه بواسطة طبقة تجريد الأجهزة (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) |
|
الوصف: يتم استدعاؤه عند تعديل قائمة البرامج. الـ يجب ألّا يتجاوز حجم كل مجموعة 500 كيلوبايت. | ||
مستوى 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
هي الواجهة الأساسية لـ HAL للراديو. في 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، يجب أن يكون حجم الصورة أقل من 1 ميغابايت بسبب أحد القيود الصارمة في المخزن المؤقت للمعاملات بين المجلد. | ||
مستوى 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) |
|
الوصف: للبحث عن البرنامج الصالح التالي على
الهواء. لتجنب الالتباس في 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() |
|
الوصف: لجلب الإعداد الحالي لعنصر معيّن علامة الضبط. | ||
مستوى HIDL 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) |
|
لغة تعريف الهوية (AIDL) | boolean isConfigFlagSet(in ConfigFlag flag) |
|
الوصف: لضبط علامة الإعداد المحدّدة. | ||
مستوى HIDL 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) |
|
لغة تعريف الهوية (AIDL) | void setConfigFlag(in ConfigFlag flag, boolean value) |
|
الوصف: لضبط قيم المَعلمات الخاصة بالمورّدين | ||
مستوى 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) قد يؤدي تستهلك وقتًا طويلاً وألا يتم حظر سلسلة التعليمات لفترة طويلة، يجب جدولة عمليات تستغرق وقتًا طويلاً في وقت لاحق وعرض حالة أو نتيجة بسرعة. بالتفصيل، يجب لكل عملية:
- إلغاء جميع عمليات الضبط المعلّقة.
- التحقّق من إمكانية معالجة العملية استنادًا إلى إدخالات الطريقة وحالة موالف.
- حدِّد موعدًا لمهمة الضبط، ثم أعِد جهاز "
Result
" (بتنسيق HIDL) أوstatus
(في AIDL) فورًا. إذا كانت قيمةResult
أوstatus
هيOK
، سيتم معاودة الاتصال بالموالف يجب استدعاءtuneFailed
أوcurrentProgramInfoChanged
عند التوليف فشل مهمة (على سبيل المثال، بسبب انتهاء المهلة) أو اكتمالها.
وبالمثل، يحدِّد startProgramListUpdates
أيضًا المهمة التي تستغرق وقتًا طويلاً
تحديث قائمة البرامج لكي تحدث لاحقًا وعرض حالة أو نتيجة بسرعة. الطريقة
يلغي أولاً طلبات التحديث المعلقة، ثم يحدد موعد مهمة التحديث ويعيد بسرعة
نتيجته.
حالة السباق
بسبب السلوك غير المتزامن لعمليات الضبط (على سبيل المثال، التوليف أو البحث (في HIDL) أو الانتقال
(في AIDL) والخطوة، هناك شرط أساسي بين إلغاء العملية والضبط
العمليات التجارية. إذا تم استدعاء الدالة cancel
بعد إكمال عملية توليف HAL، وقبل
اكتمال معاودة الاتصال، يمكن تجاهل الإلغاء ومن المفترض أن تكتمل معاودة الاتصال ويتم استلامها
بواسطة عميل HAL.
وبالمثل، إذا تم استدعاء stopProgramListUpdates
بعد إكمال HAL برنامجًا
تحديث القائمة وقبل اكتمال معاودة الاتصال onCurrentProgramInfoChanged
،
يمكن تجاهل stopProgramListUpdates
ومن المفترض أن تكتمل عملية معاودة الاتصال.
الحدّ الأقصى لحجم البيانات
نظرًا لوجود حد صارم على المخزن المؤقت لمعاملات الحافظ، فإن الحد الأقصى للبيانات في بعض الواجهات يتم توضيح الطرق التي تمر بها البيانات ذات الحجم الكبير المحتمل في HAL AIDL.
- تتطلّب الدالة
getImage
أن يكون حجم الصورة التي يتم عرضها أقل من 1 ميغابايت. - تتطلّب السمة "
onProgramListUpdate
" أن يكون حجم كلchunk
أقل من 500 كيلوبايت. يجب تقسيم قوائم البرامج الأكبر حجمًا بواسطة تنفيذ HAL إلى أجزاء متعددة وإرسالها من خلال وعدة استدعاءات.
تغييرات في هياكل بيانات AIDL HAL
بالإضافة إلى التغييرات التي طرأت على الواجهات، تم تطبيق هذه التغييرات على هياكل البيانات محددة في البث الإذاعي AIDL HAL، والتي تستفيد من لغة تعريف AIDL.
- تمت إزالة تعداد
Constant
في AIDL وتم تعريفه على أنّه عدد صحيح ثابت فيIBroadcastRadio
في غضون ذلك، تمت إعادة تسميةANTENNA_DISCONNECTED_TIMEOUT_MS
. إلىANTENNA_STATE_CHANGE_TIMEOUT_MS
. قيمة ثابتة جديدة للسمةTUNER_TIMEOUT_MS
هي تمت إضافتها. يجب إكمال جميع عمليات الضبط والبحث والخطوات خلال هذه المدة. - تمت إزالة التعداد
RDS
وDeemphasis
في AIDL وتم تحديده على أنّه عدد صحيح ثابت. فيAmFmRegionConfig
. وبالتالي، كلاً منfmDeemphasis
يتم تعريفfmRds
فيProgramInfo
على أنها int، وهي نتيجة حسابية بت العلامات المعنية. في هذه الأثناء، تمت إعادة تسميةD50
وD75
إلىDEEMPHASIS_D50
وDEEMPHASIS_D75
على التوالي. - تمت إزالة التعداد
ProgramInfoFlags
في AIDL وتم تحديده على أنّه عدد صحيح ثابت في تمت إضافةProgramInfo
مع البادئةFLAG_
. وبالمقابل، تم تعريفinfoFlags
فيProgramInfo
على أنّه int، وهي نتيجة عملية حسابية بت. العلامة. تم تغيير اسمTUNED
أيضًا إلىFLAG_TUNABLE
، وذلك لوصفه بشكلٍ أفضل. تعريفها بحيث يمكن ضبط المحطة عليه. - في
AmFmBandRange
، تمت إعادة تسميةscanSpacing
إلىseekSpacing
، نظرًا لأنه تمت إعادة تسميةscan
إلىseek
في AIDL. - بما أن مفهوم الاتحاد قد تم إدخاله في لغة AIDL، فإنّ
MetadataKey
لم تعُد السمةMetadata
المحددة في HIDL HAL مستخدمة. اتحاد AIDL:Metadata
تعريف في AIDL HAL. كل قيمة تعداد سابقة فيMetadataKey
أصبحت الآن حقلاً فيMetadata
مع نوع السلسلة أو عدد صحيح، حسب تعريفاتها.