بث HAL على الراديو

توضح الأقسام التالية كيفية العمل باستخدام طبقة تجريد الأجهزة (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 HAL: عند فتح جلسة موالف جديدة، يجب إنهاء الجلسة القديمة.
  • AIDL HAL: بسبب عدم توفّر جلسة الموالف، يجب ضبط معاودة الاتصال بالمواالف فقط. وفي حال توفّرها، يجب إلغاء ضبط معاودة الاتصال القديمة.
مستوى HIDL 2.0 يتم إنشاء "openSession(ITunerCallback callback)" (Result result, ITunerSession session)
لغة تعريف الهوية (AIDL) void setTunerCallback(in ITunerCallback callback)
الوصف:
  • HIDL HAL: يجب ألا يفشل إغلاق جلسة الموالف ويجب أن يتم إصداره مرة واحدة فقط.
  • AIDL HAL: ما من موالف، ويجب إلغاء ضبط معاودة الاتصال بالمواالف فقط.
مستوى 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 مع نوع السلسلة أو عدد صحيح، حسب تعريفاتها.