پخش رادیو HAL

بخش های زیر نحوه کار با لایه انتزاعی سخت افزاری (HAL) برای اجرای رادیو پخش را شرح می دهد.

رابط HAL رادیویی پخش

رادیو پخش HAL ساختارهای داده و رابط‌هایی را در سطح سخت‌افزار برای اجرای رادیو پخش، مانند رادیو AM/FM و DAB فراهم می‌کند.

رابط های HIDL 2.0 و AIDL

رادیو پخش HAL از رابط های توضیح داده شده در بخش های زیر استفاده می کند.

IAnnouncementListener

IAnnouncementListener رابط پاسخ به تماس برای شنونده اعلامیه است که می تواند در رادیو پخش HAL برای دریافت اطلاعیه ها ثبت شود. رابط دارای روش های زیر است:

IAnnouncementListener
توضیحات: هر زمان که لیست اعلام تغییر کرده باشد تماس گرفته می شود.
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
ایدل oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle یک دسته بسته عمومی برای حذف تماسی است که به رابط فعال نیاز ندارد.

ICloseHandle
توضیحات: دستگیره را ببندید.
HIDL 2.0 close()
ایدل void close()

ITunerCallback

ITunerCallback رابط تماس برگشتی است که توسط رادیو پخش HAL برای ارسال به روز رسانی به سرویس سرویس گیرنده HAL فراخوانی می شود.

ITunerCallback
توضیحات: هنگامی که یک عملیات تنظیم (کوک کردن، جستجو (در AIDL) یا اسکن (در HIDL) و مرحله موفقیت آمیز) به طور ناهمزمان با شکست مواجه می شود توسط HAL فراخوانی می شود.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که تنظیم، جستجو (در AIDL) یا اسکن (در HIDL)، یا گام موفقیت آمیز باشد، تماس گرفته می شود.
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
ایدل void onTuneFailed(in Result result, in ProgramSelector selector)
توضیحات: هنگامی که تنظیم، جستجو (در AIDL) یا اسکن (در HIDL)، یا گام موفقیت آمیز باشد، تماس گرفته می شود.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که لیست برنامه به روز می شود، فراخوانی می شود. اندازه هر قطعه باید به 500 کیلو بایت محدود شود.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
ایدل oneway onProgramListUpdated(ProgramListChunk chunk)
توضیحات: هنگامی که آنتن وصل یا قطع می شود تماس می گیرد.
HIDL 2.0 oneway onAntennaStateChange(bool connected)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: زمانی فراخوانی می شود که مقادیر پارامترهای خاص فروشنده به صورت داخلی در HAL به روز شوند (بعد از فراخوانی setParameters توسط سرویس گیرنده HAL، فراخوانی نکنید).
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
ایدل void onParametersUpdated(in VendorKeyValue[] parameters)
توضیحات: جدید در AIDL. هنگامی که پرچم پیکربندی به صورت داخلی در HAL به روز می شود، فراخوانی می شود (نباید پس از فراخوانی setConfigFlag توسط سرویس گیرنده HAL فراخوانی شود).
HIDL 2.0 قابل اجرا نیست.
ایدل void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

IBroadcast Radio

IBroadcastRadio رابط اصلی برای پخش رادیویی HAL است. در HIDL 2.0 HAL، از رابط ITunerSession به تیونر برای فراخوانی عملیات استفاده کنید. با این حال، حداکثر یک تیونر در یک زمان فعال است (به شرطی که هر نمونه پخش رادیویی HAL فقط یک تراشه تیونر داشته باشد). ITunerSession از رابط های AIDL حذف شد و رابط های آن به IBroadcastRadio منتقل شد.

IBroadcast Radio
توضیحات: توضیحات یک ماژول و قابلیت های آن را دریافت کنید.
HIDL 2.0 getProperties() generates (Properties properties)
ایدل Properties getProperties()
توضیحات: پیکربندی فعلی یا ممکن منطقه AM/FM را واکشی می کند.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
ایدل AmFmRegionConfig getAmFmRegionConfig(bool full)
توضیحات: پیکربندی فعلی منطقه DAB را واکشی می کند.
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
ایدل DabTableEntry[] getDabRegionConfig()
توضیحات: یک تصویر از حافظه پنهان ماژول رادیویی دریافت می کند. در AIDL، به دلیل محدودیت سخت در بافر تراکنش بایندر، اندازه تصویر باید کمتر از 1 مگابایت باشد.
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
ایدل byte[] getImage(in int id)
توضیحات: شنونده اعلامیه را ثبت می کند.
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
ایدل ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
توضیحات:
  • HIDL HAL: هنگامی که یک جلسه تیونر جدید باز می شود، جلسه قبلی باید خاتمه یابد.
  • AIDL HAL: از آنجایی که هیچ جلسه تیونری در دسترس نیست، فقط باید تماس گیرنده تنظیم شود. اگر وجود داشته باشد، تماس قبلی باید تنظیم شود.
HIDL 2.0 openSession(ITunerCallback callback) ایجاد می کند (Result result, ITunerSession session)
ایدل void setTunerCallback(in ITunerCallback callback)
توضیحات:
  • HIDL HAL: بستن جلسه تیونر نباید با شکست مواجه شود و فقط باید یک بار صادر شود.
  • AIDL HAL: هیچ تیونری وجود ندارد و فقط تماس برگشتی تیونر باید تنظیم شود.
HIDL 2.0 close()
ایدل unsetTunerCallback()
توضیحات: روی یک برنامه مشخص تنظیم می شود.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
ایدل void tune(in ProgramSelector program)
توضیحات: به دنبال برنامه معتبر بعدی روی آنتن است. برای جلوگیری از سردرگمی در AIDL، scan به seek تغییر نام داده می شود.
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
ایدل void seek(in boolean directionUp, in boolean skipSubChannel)
توضیحات: مراحل کانال مجاور که ممکن است هیچ برنامه ای آن را اشغال نکند.
HIDL 2.0 step(bool directionUp) generates (Result result)
ایدل void step(in boolean directionUp)
توضیحات: عملیات لحن، اسکن (در HIDL) یا جستجو (در AIDL) یا مرحله در انتظار را لغو می کند.
HIDL 2.0 cancel()
ایدل void cancel()
توضیحات: یک فیلتر را به لیست برنامه اعمال می کند و شروع به ارسال به روز رسانی لیست برنامه ها از طریق پاسخ به تماس onProgramListUpdated می کند.
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
ایدل void startProgramListUpdates(in ProgramFilter filter)
توضیحات: ارسال به روز رسانی لیست برنامه را متوقف می کند.
HIDL 2.0 stopProgramListUpdates()
ایدل void stopProgramListUpdates()
توضیحات: تنظیمات فعلی یک پرچم پیکربندی معین را واکشی می کند.
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
ایدل boolean isConfigFlagSet(in ConfigFlag flag)
توضیحات: پرچم پیکربندی داده شده را تنظیم می کند.
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
ایدل void setConfigFlag(in ConfigFlag flag, boolean value)
توضیحات: مقادیر پارامتر خاص فروشنده را تنظیم می کند.
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

تولید می کند ،

(vec<VendorKeyValue> results)
ایدل VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
توضیحات: مقادیر پارامترهای خاص فروشنده را بازیابی می کند.
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
ایدل 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 می‌توان نادیده گرفت و تماس مجدد باید کامل شود.

محدودیت اندازه داده

از آنجایی که محدودیت سختی در بافر تراکنش بایندر وجود دارد، محدودیت داده برای برخی از روش‌های رابط که داده‌هایی با اندازه بالقوه بزرگ را ارسال می‌کنند، در AIDL HAL مشخص می‌شوند.

  • getImage نیاز دارد که تصویر کمتر از 1 مگابایت برگردانده شود.
  • onProgramListUpdate نیاز دارد که هر chunk کمتر از 500 کیلو بایت باشد. لیست های برنامه های بزرگتر باید توسط اجرای HAL به چند تکه تقسیم شده و از طریق تماس های متعدد ارسال شوند.

تغییرات در ساختار داده AIDL HAL

علاوه بر تغییرات در رابط ها، این تغییرات در ساختارهای داده تعریف شده در رادیو پخش AIDL HAL اعمال شده است که از AIDL بهره می برد.

  • Enum Constant در AIDL حذف می شود و به عنوان const int در IBroadcastRadio تعریف می شود. در همین حال، ANTENNA_DISCONNECTED_TIMEOUT_MS به ANTENNA_STATE_CHANGE_TIMEOUT_MS تغییر نام داد. یک Const int جدید TUNER_TIMEOUT_MS اضافه شده است. تمام عملیات تنظیم، جستجو و گام باید در این زمان تکمیل شود.
  • Enum RDS و Deemphasis در AIDL حذف شده و در AmFmRegionConfig به عنوان const int تعریف می شوند. به همین ترتیب، هر دو fmDeemphasis و fmRds در ProgramInfo به‌عنوان int، یک نتیجه محاسباتی بیت پرچم‌های مربوطه اعلام می‌شوند. در همین حال، D50 و D75 به ترتیب به DEEMPHASIS_D50 و DEEMPHASIS_D75 تغییر نام دادند.
  • Enum ProgramInfoFlags در AIDL حذف می شوند و به عنوان const int در ProgramInfo با اضافه شدن پیشوند FLAG_ تعریف می شوند. به همین ترتیب، infoFlags در ProgramInfo به‌عنوان int، یک نتیجه محاسباتی بیت پرچم‌ها اعلام می‌شود. TUNED همچنین به FLAG_TUNABLE تغییر نام داده است تا تعریف آن را که می توان ایستگاه را تنظیم کرد بهتر توصیف کرد.
  • در AmFmBandRange ، scanSpacing به seekSpacing تغییر نام داده است، زیرا scan به seek در AIDL تغییر نام داده است.
  • از آنجایی که مفهوم اتحاد در AIDL معرفی شده است، MetadataKey و Metadata تعریف شده در HIDL HAL دیگر استفاده نمی شوند. یک Metadata اتحادیه AIDL در AIDL HAL تعریف شده است. هر مقدار enum قبلاً در MetadataKey اکنون یک فیلد در Metadata با نوع رشته یا int بسته به تعاریف آنها است.

پشتیبانی از رادیو DAB

این بخش پشتیبانی رادیویی DAB را توضیح می دهد.

شناسه ها

نوع شناسه اصلی برای رادیو DAB و DMB در رادیو پخش AIDL HAL DAB_SID_EXT است. DAB_SID_EXT از شناسه های سرویس 32 بیتی (SID) استفاده می کند تا بتواند SID رادیویی DAB و DMB را نشان دهد.

علاوه بر شناسه‌های اولیه، شناسه‌های ثانویه مانند DAB_ENSEMBLE و DAB_FREQUENCY_KHZ پشتیبانی می‌شوند. این مهم است زیرا چندین ایستگاه DAB می توانند یک DAB_SID_EXT به اشتراک بگذارند در حالی که دارای مقادیر مختلف DAB_ENSEMBLE یا DAB_FREQUENCY_KHZ هستند. برای اطمینان از به‌روزرسانی دقیق فهرست برنامه، ایستگاه‌های دارای DAB_SID_EXT یکسان با استفاده از ITunerCallback#onProgramListUpdated به‌روزرسانی می‌شوند. سپس این به روز رسانی به سرویس پخش رادیویی و مدیر رادیو و در نهایت از طریق android.hardware.radio.ProgramList به برنامه رادیویی منتقل می شود.

فراداده

جدول زیر فراداده پشتیبانی شده ویژه DAB را در AIDL Broadcast Radio HAL نشان می دهد:

فیلد فراداده توضیحات
dabEnsembleName (شکل مخفف: dabEnsembleNameShort ) نام گروه ایستگاه DAB
dabServiceName (مخفف از dabServiceNameShort ) نام سرویس ایستگاه DAB
dabComponentName (مخفف از dabComponentNameShort ) نام مؤلفه ایستگاه DAB

رادیو HD rupport

این بخش پشتیبانی رادیویی HD را توضیح می دهد.

شناسه ها

HD_STATION_ID_EXT به عنوان شناسه اصلی ایستگاه های رادیویی HD عمل می کند. برای تقویت بیشتر شناسایی ایستگاه، شناسه‌های ثانویه مانند HD_STATION_NAME و HD_STATION_LOCATION نیز ارائه شده‌اند. HD_STATION_LOCATION که اطلاعات موقعیت مکانی را ارائه می دهد، در اندروید 15 معرفی شد.

رادیو دیجیتال را فعال یا غیرفعال کنید

با شروع اندروید 15، می توانید رادیو دیجیتال (مانند رادیو HD) را با تنظیم ConfigFlag s فعال یا غیرفعال کنید. برای کنترل این تنظیم برای رادیو FM، از پرچم FORCE_ANALOG_FM استفاده کنید. برای رادیو AM، از پرچم FORCE_ANALOG_AM استفاده کنید. تنظیم پرچم بر روی false رادیو HD را فعال می کند، در حالی که آن را روی رادیو AM/FM آنالوگ نیروهای true تنظیم می کند.

کانال های HD موجود است

با شروع Android 15، کانال‌های HD که در حال حاضر برای ایستگاه رادیویی HD در دسترس هستند را می‌توان با یک ماسک بیت 8 بیتی، Metadata#hdSubChannelsAvailable ، در ProgramInfo.metadata نشان داد. به عنوان مثال، مقدار بیت 1 از سمت چپ نشان می دهد که آیا کانال فرعی HD2 برای این ایستگاه HD در دسترس است یا خیر.

وضعیت دریافت سیگنال

در اندروید 15 و نسخه‌های بالاتر، برنامه‌های رادیویی می‌توانند وضعیت دریافت سیگنال ایستگاه‌های رادیویی HD را به کاربران نشان دهند. این مفید است زیرا دریافت یک سیگنال HD قوی گاهی اوقات ممکن است چند لحظه طول بکشد.

برای ارائه این اطلاعات، سیستم از ProgramInfo.infoFlags برای ردیابی وضعیت استفاده می کند و برنامه رادیویی را از طریق ITunerCallback#onCurrentProgramInfoChanged.

در اینجا نحوه نمایش وضعیت در ProgramInfo.infoFlags آمده است:

  • بیت 6: نشان می دهد که آیا سیگنال رادیویی HD به دست آمده است یا خیر.
  • بیت 7: نشان می دهد که داده های سرویس اطلاعات ایستگاه (SIS) موجود است یا خیر. SIS اطلاعات بیشتری درباره ایستگاه و آنچه در حال پخش است ارائه می دهد.
  • بیت 8: می گوید که آیا صدای دیجیتال HD موجود است یا خیر.

فراداده

جدول زیر فراداده رادیویی HD پشتیبانی شده برای اندروید 15 و نسخه های بالاتر را نشان می دهد.

فیلد فراداده توضیحات
commentShortDescription شرح مختصر متن نظر
commentActualText متن نظر
commercial تبلیغات رادیویی
ufids شناسه های فایل منحصر به فرد (UFID) مرتبط با محتوا
hdStationNameShort نام کوتاه ایستگاه رادیویی HD یا نام کوتاه جهانی
hdStationNameLong نام طولانی ایستگاه رادیویی HD، شعار یا پیامی از ایستگاه.

هشدارهای اضطراری

در اندروید 15 و بالاتر، هشدارهای اضطراری برای ایستگاه‌های رادیویی HD پشتیبانی می‌شوند تا کاربران برنامه رادیویی را از هشدارهای اضطراری ارسال شده از ایستگاه‌های رادیویی مطلع کنند. هشدار اضطراری ( Alert ) از استاندارد 1.2 پروتکل هشدار مشترک (CAP) پیروی می کند و از هشدارهای نشان داده شده در جدول زیر پشتیبانی می کند:

اطلاعات هشدار توضیحات مقادیر Enum موجود است
AlertStatus وضعیت پیام هشدار ACTUAL ، EXERCISE ، TEST
AlertMessageType نوع پیام هشدار اضطراری ALERT ، UPDATE ، CANCEL
AlertCategory دسته رویداد موضوع پیام هشدار اضطراری GEO , MET , SAFETY , SECURITY , RESCUE , FIRE , HEALTH , ENV , TRANSPORT , INFRA , CBRNE , OTHER
AlertUrgency فوریت رویداد موضوع پیام هشدار اضطراری IMMEDIATE ، EXPECTED ، FUTURE ، PAST ، UNKNOWN
AlertSeverity شدت رویداد موضوع پیام هشدار اضطراری EXTREME ، SEVERE ، MODERATE ، MINOR ، UNKNOWN
AlertCertainty قطعیت رویداد موضوع پیام هشدار اضطراری OBSERVED ، LIKELY ، POSSIBLE ، UNLIKELY ، UNKNOWN
می‌توانید Alert (که حاوی اطلاعات جدول است)، پیام‌های متنی هشدار و AlertArea برای نمایش اطلاعات هشدار فعلی استفاده کنید. Alert یک فیلد اختیاری در ProgramInfo است تا بتوان آن را از Broadcast Radio HAL به برنامه‌های رادیویی از طریق تماس‌های تیونر برای اطلاعات فعلی برنامه و به‌روزرسانی‌های لیست برنامه ارسال کرد.

،

بخش های زیر نحوه کار با لایه انتزاعی سخت افزاری (HAL) برای اجرای رادیو پخش را شرح می دهد.

رابط HAL رادیویی پخش

رادیو پخش HAL ساختارهای داده و رابط‌هایی را در سطح سخت‌افزار برای اجرای رادیو پخش، مانند رادیو AM/FM و DAB فراهم می‌کند.

رابط های HIDL 2.0 و AIDL

رادیو پخش HAL از رابط های توضیح داده شده در بخش های زیر استفاده می کند.

IAnnouncementListener

IAnnouncementListener رابط پاسخ به تماس برای شنونده اعلامیه است که می تواند در رادیو پخش HAL برای دریافت اطلاعیه ها ثبت شود. رابط دارای روش های زیر است:

IAnnouncementListener
توضیحات: هر زمان که لیست اعلام تغییر کرده باشد تماس گرفته می شود.
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
ایدل oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle یک دسته بسته عمومی برای حذف تماسی است که به رابط فعال نیاز ندارد.

ICloseHandle
توضیحات: دستگیره را ببندید.
HIDL 2.0 close()
ایدل void close()

ITunerCallback

ITunerCallback رابط تماس برگشتی است که توسط رادیو پخش HAL برای ارسال به روز رسانی به سرویس سرویس گیرنده HAL فراخوانی می شود.

ITunerCallback
توضیحات: هنگامی که یک عملیات تنظیم (کوک کردن، جستجو (در AIDL) یا اسکن (در HIDL) و مرحله موفقیت آمیز) به طور ناهمزمان با شکست مواجه می شود توسط HAL فراخوانی می شود.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که تنظیم، جستجو (در AIDL) یا اسکن (در HIDL)، یا گام موفقیت آمیز باشد، تماس گرفته می شود.
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
ایدل void onTuneFailed(in Result result, in ProgramSelector selector)
توضیحات: هنگامی که تنظیم، جستجو (در AIDL) یا اسکن (در HIDL)، یا گام موفقیت آمیز باشد، تماس گرفته می شود.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که لیست برنامه به روز می شود، فراخوانی می شود. اندازه هر قطعه باید به 500 کیلو بایت محدود شود.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
ایدل oneway onProgramListUpdated(ProgramListChunk chunk)
توضیحات: هنگامی که آنتن وصل یا قطع می شود تماس می گیرد.
HIDL 2.0 oneway onAntennaStateChange(bool connected)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: زمانی فراخوانی می شود که مقادیر پارامترهای خاص فروشنده به صورت داخلی در HAL به روز شوند (بعد از فراخوانی setParameters توسط سرویس گیرنده HAL، فراخوانی نکنید).
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
ایدل void onParametersUpdated(in VendorKeyValue[] parameters)
توضیحات: جدید در AIDL. هنگامی که پرچم پیکربندی به صورت داخلی در HAL به روز می شود، فراخوانی می شود (نباید پس از فراخوانی setConfigFlag توسط سرویس گیرنده HAL فراخوانی شود).
HIDL 2.0 قابل اجرا نیست.
ایدل void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

IBroadcast Radio

IBroadcastRadio رابط اصلی برای پخش رادیویی HAL است. در HIDL 2.0 HAL، از رابط ITunerSession به تیونر برای فراخوانی عملیات استفاده کنید. با این حال، حداکثر یک تیونر در یک زمان فعال است (به شرطی که هر نمونه پخش رادیویی HAL فقط یک تراشه تیونر داشته باشد). ITunerSession از رابط های AIDL حذف شد و رابط های آن به IBroadcastRadio منتقل شد.

IBroadcast Radio
توضیحات: توضیحات یک ماژول و قابلیت های آن را دریافت کنید.
HIDL 2.0 getProperties() generates (Properties properties)
ایدل Properties getProperties()
توضیحات: پیکربندی فعلی یا ممکن منطقه AM/FM را واکشی می کند.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
ایدل AmFmRegionConfig getAmFmRegionConfig(bool full)
توضیحات: پیکربندی فعلی منطقه DAB را واکشی می کند.
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
ایدل DabTableEntry[] getDabRegionConfig()
توضیحات: یک تصویر از حافظه پنهان ماژول رادیویی دریافت می کند. در AIDL، به دلیل محدودیت سخت در بافر تراکنش بایندر، اندازه تصویر باید کمتر از 1 مگابایت باشد.
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
ایدل byte[] getImage(in int id)
توضیحات: شنونده اعلامیه را ثبت می کند.
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
ایدل ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
توضیحات:
  • HIDL HAL: هنگامی که یک جلسه تیونر جدید باز می شود، جلسه قبلی باید خاتمه یابد.
  • AIDL HAL: از آنجایی که هیچ جلسه تیونری در دسترس نیست، فقط باید تماس گیرنده تنظیم شود. اگر وجود داشته باشد، تماس قبلی باید تنظیم شود.
HIDL 2.0 openSession(ITunerCallback callback) ایجاد می کند (Result result, ITunerSession session)
ایدل void setTunerCallback(in ITunerCallback callback)
توضیحات:
  • HIDL HAL: بستن جلسه تیونر نباید با شکست مواجه شود و فقط باید یک بار صادر شود.
  • AIDL HAL: هیچ تیونری وجود ندارد و فقط تماس برگشتی تیونر باید تنظیم شود.
HIDL 2.0 close()
ایدل unsetTunerCallback()
توضیحات: روی یک برنامه مشخص تنظیم می شود.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
ایدل void tune(in ProgramSelector program)
توضیحات: به دنبال برنامه معتبر بعدی روی آنتن است. برای جلوگیری از سردرگمی در AIDL، scan به seek تغییر نام داده می شود.
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
ایدل void seek(in boolean directionUp, in boolean skipSubChannel)
توضیحات: مراحل کانال مجاور که ممکن است هیچ برنامه ای آن را اشغال نکند.
HIDL 2.0 step(bool directionUp) generates (Result result)
ایدل void step(in boolean directionUp)
توضیحات: عملیات لحن، اسکن (در HIDL) یا جستجو (در AIDL) یا مرحله در انتظار را لغو می کند.
HIDL 2.0 cancel()
ایدل void cancel()
توضیحات: یک فیلتر را به لیست برنامه اعمال می کند و شروع به ارسال به روز رسانی لیست برنامه ها از طریق پاسخ به تماس onProgramListUpdated می کند.
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
ایدل void startProgramListUpdates(in ProgramFilter filter)
توضیحات: ارسال به روز رسانی لیست برنامه را متوقف می کند.
HIDL 2.0 stopProgramListUpdates()
ایدل void stopProgramListUpdates()
توضیحات: تنظیمات فعلی یک پرچم پیکربندی معین را واکشی می کند.
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
ایدل boolean isConfigFlagSet(in ConfigFlag flag)
توضیحات: پرچم پیکربندی داده شده را تنظیم می کند.
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
ایدل void setConfigFlag(in ConfigFlag flag, boolean value)
توضیحات: مقادیر پارامتر خاص فروشنده را تنظیم می کند.
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

تولید می کند ،

(vec<VendorKeyValue> results)
ایدل VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
توضیحات: مقادیر پارامترهای خاص فروشنده را بازیابی می کند.
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
ایدل 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 می‌توان نادیده گرفت و تماس مجدد باید کامل شود.

محدودیت اندازه داده

از آنجایی که محدودیت سختی در بافر تراکنش بایندر وجود دارد، محدودیت داده برای برخی از روش‌های رابط که داده‌هایی با اندازه بالقوه بزرگ را ارسال می‌کنند، در AIDL HAL مشخص می‌شوند.

  • getImage نیاز دارد که تصویر کمتر از 1 مگابایت برگردانده شود.
  • onProgramListUpdate نیاز دارد که هر chunk کمتر از 500 کیلو بایت باشد. لیست های برنامه های بزرگتر باید توسط اجرای HAL به چند تکه تقسیم شده و از طریق تماس های متعدد ارسال شوند.

تغییرات در ساختار داده AIDL HAL

علاوه بر تغییرات در رابط ها، این تغییرات در ساختارهای داده تعریف شده در رادیو پخش AIDL HAL اعمال شده است که از AIDL بهره می برد.

  • Enum Constant در AIDL حذف می شود و به عنوان const int در IBroadcastRadio تعریف می شود. در همین حال، ANTENNA_DISCONNECTED_TIMEOUT_MS به ANTENNA_STATE_CHANGE_TIMEOUT_MS تغییر نام داد. یک Const int جدید TUNER_TIMEOUT_MS اضافه شده است. تمام عملیات تنظیم، جستجو و گام باید در این زمان تکمیل شود.
  • Enum RDS و Deemphasis در AIDL حذف شده و در AmFmRegionConfig به عنوان const int تعریف می شوند. به همین ترتیب، هر دو fmDeemphasis و fmRds در ProgramInfo به‌عنوان int، یک نتیجه محاسباتی بیت پرچم‌های مربوطه اعلام می‌شوند. در همین حال، D50 و D75 به ترتیب به DEEMPHASIS_D50 و DEEMPHASIS_D75 تغییر نام دادند.
  • Enum ProgramInfoFlags در AIDL حذف می شوند و به عنوان const int در ProgramInfo با اضافه شدن پیشوند FLAG_ تعریف می شوند. به همین ترتیب، infoFlags در ProgramInfo به‌عنوان int، یک نتیجه محاسباتی بیت پرچم‌ها اعلام می‌شود. TUNED همچنین به FLAG_TUNABLE تغییر نام داده است تا تعریف آن را که می توان ایستگاه را تنظیم کرد بهتر توصیف کرد.
  • در AmFmBandRange ، scanSpacing به seekSpacing تغییر نام داده است، زیرا scan به seek در AIDL تغییر نام داده است.
  • از آنجایی که مفهوم اتحاد در AIDL معرفی شده است، MetadataKey و Metadata تعریف شده در HIDL HAL دیگر استفاده نمی شوند. یک Metadata اتحادیه AIDL در AIDL HAL تعریف شده است. هر مقدار enum قبلاً در MetadataKey اکنون یک فیلد در Metadata با نوع رشته یا int بسته به تعاریف آنها است.

پشتیبانی از رادیو DAB

این بخش پشتیبانی رادیویی DAB را توضیح می دهد.

شناسه ها

نوع شناسه اصلی برای رادیو DAB و DMB در رادیو پخش AIDL HAL DAB_SID_EXT است. DAB_SID_EXT از شناسه های سرویس 32 بیتی (SID) استفاده می کند تا بتواند SID رادیویی DAB و DMB را نشان دهد.

علاوه بر شناسه‌های اولیه، شناسه‌های ثانویه مانند DAB_ENSEMBLE و DAB_FREQUENCY_KHZ پشتیبانی می‌شوند. این مهم است زیرا چندین ایستگاه DAB می توانند یک DAB_SID_EXT به اشتراک بگذارند در حالی که دارای مقادیر مختلف DAB_ENSEMBLE یا DAB_FREQUENCY_KHZ هستند. برای اطمینان از به‌روزرسانی دقیق فهرست برنامه، ایستگاه‌های دارای DAB_SID_EXT یکسان با استفاده از ITunerCallback#onProgramListUpdated به‌روزرسانی می‌شوند. سپس این به روز رسانی به سرویس پخش رادیویی و مدیر رادیو و در نهایت از طریق android.hardware.radio.ProgramList به برنامه رادیویی منتقل می شود.

فراداده

جدول زیر فراداده پشتیبانی شده ویژه DAB را در AIDL Broadcast Radio HAL نشان می دهد:

فیلد فراداده توضیحات
dabEnsembleName (شکل مخفف: dabEnsembleNameShort ) نام گروه ایستگاه DAB
dabServiceName (مخفف از dabServiceNameShort ) نام سرویس ایستگاه DAB
dabComponentName (مخفف از dabComponentNameShort ) نام مؤلفه ایستگاه DAB

رادیو HD rupport

این بخش پشتیبانی رادیویی HD را توضیح می دهد.

شناسه ها

HD_STATION_ID_EXT به عنوان شناسه اصلی ایستگاه های رادیویی HD عمل می کند. برای تقویت بیشتر شناسایی ایستگاه، شناسه‌های ثانویه مانند HD_STATION_NAME و HD_STATION_LOCATION نیز ارائه شده‌اند. HD_STATION_LOCATION که اطلاعات موقعیت مکانی را ارائه می دهد، در اندروید 15 معرفی شد.

رادیو دیجیتال را فعال یا غیرفعال کنید

با شروع اندروید 15، می توانید رادیو دیجیتال (مانند رادیو HD) را با تنظیم ConfigFlag s فعال یا غیرفعال کنید. برای کنترل این تنظیم برای رادیو FM، از پرچم FORCE_ANALOG_FM استفاده کنید. برای رادیو AM، از پرچم FORCE_ANALOG_AM استفاده کنید. تنظیم پرچم بر روی false رادیو HD را فعال می کند، در حالی که آن را روی رادیو AM/FM آنالوگ نیروهای true تنظیم می کند.

کانال های HD موجود است

با شروع Android 15، کانال‌های HD که در حال حاضر برای ایستگاه رادیویی HD در دسترس هستند را می‌توان با یک ماسک بیت 8 بیتی، Metadata#hdSubChannelsAvailable ، در ProgramInfo.metadata نشان داد. به عنوان مثال، مقدار بیت 1 از سمت چپ نشان می دهد که آیا کانال فرعی HD2 برای این ایستگاه HD در دسترس است یا خیر.

وضعیت دریافت سیگنال

در اندروید 15 و نسخه‌های بالاتر، برنامه‌های رادیویی می‌توانند وضعیت دریافت سیگنال ایستگاه‌های رادیویی HD را به کاربران نشان دهند. این مفید است زیرا دریافت یک سیگنال HD قوی گاهی اوقات ممکن است چند لحظه طول بکشد.

برای ارائه این اطلاعات، سیستم از ProgramInfo.infoFlags برای ردیابی وضعیت استفاده می کند و برنامه رادیویی را از طریق ITunerCallback#onCurrentProgramInfoChanged.

در اینجا نحوه نمایش وضعیت در ProgramInfo.infoFlags آمده است:

  • بیت 6: نشان می دهد که آیا سیگنال رادیویی HD به دست آمده است یا خیر.
  • بیت 7: نشان می دهد که داده های سرویس اطلاعات ایستگاه (SIS) موجود است یا خیر. SIS اطلاعات بیشتری درباره ایستگاه و آنچه در حال پخش است ارائه می دهد.
  • بیت 8: می گوید که آیا صدای دیجیتال HD موجود است یا خیر.

فراداده

جدول زیر فراداده رادیویی HD پشتیبانی شده برای اندروید 15 و نسخه های بالاتر را نشان می دهد.

فیلد فراداده توضیحات
commentShortDescription شرح مختصر متن نظر
commentActualText متن نظر
commercial تبلیغات رادیویی
ufids شناسه های فایل منحصر به فرد (UFID) مرتبط با محتوا
hdStationNameShort نام کوتاه ایستگاه رادیویی HD یا نام کوتاه جهانی
hdStationNameLong نام طولانی ایستگاه رادیویی HD، شعار یا پیامی از ایستگاه.

هشدارهای اضطراری

در اندروید 15 و بالاتر، هشدارهای اضطراری برای ایستگاه‌های رادیویی HD پشتیبانی می‌شوند تا کاربران برنامه رادیویی را از هشدارهای اضطراری ارسال شده از ایستگاه‌های رادیویی مطلع کنند. هشدار اضطراری ( Alert ) از استاندارد 1.2 پروتکل هشدار مشترک (CAP) پیروی می کند و از هشدارهای نشان داده شده در جدول زیر پشتیبانی می کند:

اطلاعات هشدار توضیحات مقادیر Enum موجود است
AlertStatus وضعیت پیام هشدار ACTUAL ، EXERCISE ، TEST
AlertMessageType نوع پیام هشدار اضطراری ALERT ، UPDATE ، CANCEL
AlertCategory دسته رویداد موضوع پیام هشدار اضطراری GEO , MET , SAFETY , SECURITY , RESCUE , FIRE , HEALTH , ENV , TRANSPORT , INFRA , CBRNE , OTHER
AlertUrgency فوریت رویداد موضوع پیام هشدار اضطراری IMMEDIATE ، EXPECTED ، FUTURE ، PAST ، UNKNOWN
AlertSeverity شدت رویداد موضوع پیام هشدار اضطراری EXTREME ، SEVERE ، MODERATE ، MINOR ، UNKNOWN
AlertCertainty قطعیت رویداد موضوع پیام هشدار اضطراری OBSERVED ، LIKELY ، POSSIBLE ، UNLIKELY ، UNKNOWN
می‌توانید Alert (که حاوی اطلاعات جدول است)، پیام‌های متنی هشدار و AlertArea برای نمایش اطلاعات هشدار فعلی استفاده کنید. Alert یک فیلد اختیاری در ProgramInfo است تا بتوان آن را از Broadcast Radio HAL به برنامه‌های رادیویی از طریق تماس‌های تیونر برای اطلاعات فعلی برنامه و به‌روزرسانی‌های لیست برنامه ارسال کرد.

،

بخش های زیر نحوه کار با لایه انتزاعی سخت افزاری (HAL) برای اجرای رادیو پخش را شرح می دهد.

رابط HAL رادیویی پخش

رادیو پخش HAL ساختارهای داده و رابط‌هایی را در سطح سخت‌افزار برای اجرای رادیو پخش، مانند رادیو AM/FM و DAB فراهم می‌کند.

رابط های HIDL 2.0 و AIDL

رادیو پخش HAL از رابط های توضیح داده شده در بخش های زیر استفاده می کند.

IAnnouncementListener

IAnnouncementListener رابط پاسخ به تماس برای شنونده اعلامیه است که می تواند در رادیو پخش HAL برای دریافت اطلاعیه ها ثبت شود. رابط دارای روش های زیر است:

IAnnouncementListener
توضیحات: هر زمان که لیست اعلام تغییر کرده باشد تماس گرفته می شود.
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
ایدل oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle یک دسته بسته عمومی برای حذف تماسی است که به رابط فعال نیاز ندارد.

ICloseHandle
توضیحات: دستگیره را ببندید.
HIDL 2.0 close()
ایدل void close()

ITunerCallback

ITunerCallback رابط تماس برگشتی است که توسط رادیو پخش HAL برای ارسال به روز رسانی به سرویس سرویس گیرنده HAL فراخوانی می شود.

ITunerCallback
توضیحات: هنگامی که یک عملیات تنظیم (کوک کردن، جستجو (در AIDL) یا اسکن (در HIDL) و مرحله موفقیت آمیز) به طور ناهمزمان با شکست مواجه می شود توسط HAL فراخوانی می شود.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که تنظیم، جستجو (در AIDL) یا اسکن (در HIDL)، یا گام موفقیت آمیز باشد، تماس گرفته می شود.
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
ایدل void onTuneFailed(in Result result, in ProgramSelector selector)
توضیحات: هنگامی که تنظیم، جستجو (در AIDL) یا اسکن (در HIDL)، یا گام موفقیت آمیز باشد، تماس گرفته می شود.
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که لیست برنامه به روز می شود، فراخوانی می شود. اندازه هر قطعه باید به 500 کیلو بایت محدود شود.
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
ایدل oneway onProgramListUpdated(ProgramListChunk chunk)
توضیحات: هنگامی که آنتن وصل یا قطع می شود تماس می گیرد.
HIDL 2.0 oneway onAntennaStateChange(bool connected)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: زمانی فراخوانی می شود که مقادیر پارامترهای خاص فروشنده به صورت داخلی در HAL به روز شوند (بعد از فراخوانی setParameters توسط سرویس گیرنده HAL، فراخوانی نکنید).
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
ایدل void onParametersUpdated(in VendorKeyValue[] parameters)
توضیحات: جدید در AIDL. هنگامی که پرچم پیکربندی به صورت داخلی در HAL به روز می شود، فراخوانی می شود (نباید پس از فراخوانی setConfigFlag توسط سرویس گیرنده HAL فراخوانی شود).
HIDL 2.0 قابل اجرا نیست.
ایدل void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

IBroadcast Radio

IBroadcastRadio رابط اصلی برای پخش رادیویی HAL است. در HIDL 2.0 HAL، از رابط ITunerSession به تیونر برای فراخوانی عملیات استفاده کنید. با این حال، حداکثر یک تیونر در یک زمان فعال است (به شرطی که هر نمونه پخش رادیویی HAL فقط یک تراشه تیونر داشته باشد). ITunerSession از رابط های AIDL حذف شد و رابط های آن به IBroadcastRadio منتقل شد.

IBroadcast Radio
توضیحات: توضیحات یک ماژول و قابلیت های آن را دریافت کنید.
HIDL 2.0 getProperties() generates (Properties properties)
ایدل Properties getProperties()
توضیحات: پیکربندی فعلی یا ممکن منطقه AM/FM را واکشی می کند.
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
ایدل AmFmRegionConfig getAmFmRegionConfig(bool full)
توضیحات: پیکربندی فعلی منطقه DAB را واکشی می کند.
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
ایدل DabTableEntry[] getDabRegionConfig()
توضیحات: یک تصویر از حافظه پنهان ماژول رادیویی دریافت می کند. در AIDL، به دلیل محدودیت سخت در بافر تراکنش بایندر، اندازه تصویر باید کمتر از 1 مگابایت باشد.
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
ایدل byte[] getImage(in int id)
توضیحات: شنونده اعلامیه را ثبت می کند.
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
ایدل ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
توضیحات:
  • HIDL HAL: هنگامی که یک جلسه تیونر جدید باز می شود، جلسه قبلی باید خاتمه یابد.
  • AIDL HAL: از آنجایی که هیچ جلسه تیونری در دسترس نیست، فقط باید تماس گیرنده تنظیم شود. اگر وجود داشته باشد، تماس قبلی باید تنظیم شود.
HIDL 2.0 openSession(ITunerCallback callback) ایجاد می کند (Result result, ITunerSession session)
ایدل void setTunerCallback(in ITunerCallback callback)
توضیحات:
  • HIDL HAL: بستن جلسه تیونر نباید با شکست مواجه شود و فقط باید یک بار صادر شود.
  • AIDL HAL: هیچ تیونری وجود ندارد و فقط تماس برگشتی تیونر باید تنظیم شود.
HIDL 2.0 close()
ایدل unsetTunerCallback()
توضیحات: روی یک برنامه مشخص تنظیم می شود.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
ایدل void tune(in ProgramSelector program)
توضیحات: به دنبال برنامه معتبر بعدی روی آنتن است. برای جلوگیری از سردرگمی در AIDL، scan به seek تغییر نام داده می شود.
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
ایدل void seek(in boolean directionUp, in boolean skipSubChannel)
توضیحات: مراحل کانال مجاور که ممکن است هیچ برنامه ای آن را اشغال نکند.
HIDL 2.0 step(bool directionUp) generates (Result result)
ایدل void step(in boolean directionUp)
توضیحات: عملیات لحن، اسکن (در HIDL) یا جستجو (در AIDL) یا مرحله در انتظار را لغو می کند.
HIDL 2.0 cancel()
ایدل void cancel()
توضیحات: یک فیلتر را به لیست برنامه اعمال می کند و شروع به ارسال به روز رسانی لیست برنامه ها از طریق پاسخ به تماس onProgramListUpdated می کند.
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
ایدل void startProgramListUpdates(in ProgramFilter filter)
توضیحات: ارسال به روز رسانی لیست برنامه را متوقف می کند.
HIDL 2.0 stopProgramListUpdates()
ایدل void stopProgramListUpdates()
توضیحات: تنظیمات فعلی یک پرچم پیکربندی معین را واکشی می کند.
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
ایدل boolean isConfigFlagSet(in ConfigFlag flag)
توضیحات: پرچم پیکربندی داده شده را تنظیم می کند.
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
ایدل void setConfigFlag(in ConfigFlag flag, boolean value)
توضیحات: مقادیر پارامتر خاص فروشنده را تنظیم می کند.
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

تولید می کند ،

(vec<VendorKeyValue> results)
ایدل VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
توضیحات: مقادیر پارامترهای خاص فروشنده را بازیابی می کند.
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
ایدل 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 می‌توان نادیده گرفت و تماس مجدد باید کامل شود.

محدودیت اندازه داده

از آنجایی که محدودیت سختی در بافر تراکنش بایندر وجود دارد، محدودیت داده برای برخی از روش‌های رابط که داده‌هایی با اندازه بالقوه بزرگ را ارسال می‌کنند، در AIDL HAL مشخص می‌شوند.

  • getImage نیاز دارد که تصویر کمتر از 1 مگابایت برگردانده شود.
  • onProgramListUpdate نیاز دارد که هر chunk کمتر از 500 کیلو بایت باشد. لیست های برنامه های بزرگتر باید توسط اجرای HAL به چند تکه تقسیم شده و از طریق تماس های متعدد ارسال شوند.

تغییرات در ساختار داده AIDL HAL

علاوه بر تغییرات در رابط ها، این تغییرات در ساختارهای داده تعریف شده در رادیو پخش AIDL HAL اعمال شده است که از AIDL بهره می برد.

  • Enum Constant در AIDL حذف می شود و به عنوان const int در IBroadcastRadio تعریف می شود. در همین حال، ANTENNA_DISCONNECTED_TIMEOUT_MS به ANTENNA_STATE_CHANGE_TIMEOUT_MS تغییر نام داد. یک Const int جدید TUNER_TIMEOUT_MS اضافه شده است. تمام عملیات تنظیم، جستجو و گام باید در این زمان تکمیل شود.
  • Enum RDS و Deemphasis در AIDL حذف شده و در AmFmRegionConfig به عنوان const int تعریف می شوند. به همین ترتیب، هر دو fmDeemphasis و fmRds در ProgramInfo به‌عنوان int، یک نتیجه محاسباتی بیت پرچم‌های مربوطه اعلام می‌شوند. در همین حال ، D50 و D75 به ترتیب به DEEMPHASIS_D50 تغییر نام داده اند و به ترتیب DEEMPHASIS_D75 .
  • Enum ProgramInfoFlags در AIDL حذف شده و به عنوان const int در ProgramInfo با پیشوند FLAG_ اضافه شده تعریف می شود. به همین ترتیب ، infoFlags در ProgramInfo به عنوان int اعلام می شود ، نتیجه محاسبه کمی از پرچم ها. TUNED همچنین به FLAG_TUNABLE تغییر نام داده است تا تعریف آن را بهتر توصیف کند که ایستگاه قابل تنظیم است.
  • در AmFmBandRange ، scanSpacing به seekSpacing تغییر نام داده می شود ، زیرا scan به seek AIDL تغییر نام داده می شود.
  • از آنجا که مفهوم اتحادیه در AIDL معرفی شده است ، MetadataKey و Metadata تعریف شده در Hidl Hal دیگر مورد استفاده قرار نمی گیرد. Metadata اتحادیه AIDL در Aidl Hal تعریف شده است. هر مقدار enum که قبلاً در MetadataKey وجود داشت ، بسته به تعاریف آنها ، زمینه ای در Metadata با نوع رشته یا int است.

پشتیبانی رادیویی DAB

در این بخش پشتیبانی رادیویی DAB توضیح داده شده است.

شناسه ها

نوع شناسه اصلی رادیو DAB و DMB در رادیو پخش AIDL HAL DAB_SID_EXT است. DAB_SID_EXT از یک شناسه خدمات 32 بیتی (SID) استفاده می کند تا بتواند SID رادیو DAB و DMB را نشان دهد.

علاوه بر شناسه های اولیه ، شناسه های ثانویه مانند DAB_ENSEMBLE و DAB_FREQUENCY_KHZ پشتیبانی می شوند. این مهم است زیرا چندین ایستگاه DAB می توانند در حالی که دارای مقادیر مختلف DAB_ENSEMBLE یا DAB_FREQUENCY_KHZ هستند ، یک DAB_SID_EXT به اشتراک بگذارند. برای اطمینان از به روزرسانی دقیق لیست برنامه ها ، ایستگاه هایی با همان DAB_SID_EXT با استفاده از ITunerCallback#onProgramListUpdated به روز می شوند. این بروزرسانی سپس به مدیر رادیو و مدیر رادیو پخش شده و سرانجام از طریق android.hardware.radio.ProgramList به برنامه رادیو منتقل می شود.

فراداده

در جدول زیر ، ابرداده پشتیبانی شده Speficic به DAB در AIDL Broadcast Radio Hal:

میدان فوق داده توضیحات
dabEnsembleName (فرم مختصر: dabEnsembleNameShort ) نام گروه ایستگاه DAB
dabServiceName (مختصر از dabServiceNameShort ) نام سرویس ایستگاه DAB
dabComponentName (مختصر از dabComponentNameShort ) نام جزء ایستگاه DAB

Rupport رادیو HD

در این بخش پشتیبانی رادیو HD توضیح داده شده است.

شناسه ها

HD_STATION_ID_EXT به عنوان شناسه اصلی ایستگاه های رادیویی HD استفاده می شود. برای افزایش بیشتر شناسایی ایستگاه ، شناسه های ثانویه مانند HD_STATION_NAME و HD_STATION_LOCATION نیز ارائه شده است. HD_STATION_LOCATION ، که اطلاعات مکان را ارائه می دهد ، در اندروید 15 معرفی شد.

رادیو دیجیتال را فعال یا غیرفعال کنید

با شروع Android 15 ، می توانید رادیو دیجیتال (مانند رادیو HD) را با تنظیم ConfigFlag s فعال یا غیرفعال کنید. برای کنترل این تنظیم برای رادیو FM ، از پرچم FORCE_ANALOG_FM استفاده کنید. برای رادیو AM ، از پرچم FORCE_ANALOG_AM استفاده کنید. تنظیم پرچم روی false رادیو HD را قادر می سازد ، در حالی که آن را روی رادیو Analog Am/FM Analog true قرار می دهد.

کانال های HD موجود است

با شروع Android 15 ، کانال های HD که در حال حاضر برای ایستگاه رادیویی HD در دسترس هستند ، می توانند با یک ماسک بیت از 8 بیت ، Metadata#hdSubChannelsAvailable ، در ProgramInfo.metadata نمایش داده شوند. به عنوان مثال ، مقدار بیت 1 از سمت چپ نشان می دهد که آیا زیر کانال HD2 برای این ایستگاه HD در دسترس است.

وضعیت کسب سیگنال

در نسخه های Android 15 و بالاتر ، برنامه های رادیویی می توانند وضعیت کسب سیگنال ایستگاه های رادیویی HD را به کاربران نشان دهند. این مفید است زیرا دستیابی به یک سیگنال HD قوی گاهی اوقات می تواند چند لحظه طول بکشد.

برای ارائه این اطلاعات ، سیستم از ProgramInfo.infoFlags برای ردیابی وضعیت و به روزرسانی برنامه رادیویی از طریق ITunerCallback#onCurrentProgramInfoChanged.

در اینجا نحوه نمایش وضعیت در ProgramInfo.infoFlags آورده شده است:

  • بیت 6: نشان می دهد که آیا سیگنال رادیویی HD به دست آمده است یا خیر.
  • بیت 7: نشان می دهد که آیا داده های سرویس اطلاعات ایستگاه (SIS) در دسترس است یا خیر. SIS اطلاعات بیشتری در مورد ایستگاه و آنچه در حال بازی است ارائه می دهد.
  • بیت 8: می گوید آیا HD Digital Audio در دسترس است یا خیر.

فراداده

جدول زیر ابرداده رادیویی HD پشتیبانی شده برای نسخه های Android 15 و بالاتر را نشان می دهد.

میدان فوق داده توضیحات
commentShortDescription شرح متن کوتاه نظر
commentActualText متن نظر
commercial تجاری رادیویی
ufids شناسه های فایل منحصر به فرد (UFIDS) مرتبط با محتوا
hdStationNameShort نام کوتاه ایستگاه رادیویی HD یا نام کوتاه جهانی
hdStationNameLong نام بلند ، شعار یا پیامی از ایستگاه رادیویی HD.

هشدارهای اضطراری

در اندروید 15 و بالاتر ، هشدارهای اضطراری برای ایستگاه های رادیویی HD پشتیبانی می شوند تا به کاربران برنامه رادیویی از هشدارهای اضطراری ارسال شده از ایستگاه های رادیویی اطلاع دهند. هشدار اضطراری ( Alert ) از پروتکل هشدار دهنده مشترک (CAP) 1.2 استاندارد پیروی می کند و از هشدارهای نشان داده شده در جدول زیر پشتیبانی می کند:

اطلاعات هشدار توضیحات مقادیر موجود در دسترس است
AlertStatus وضعیت پیام هشدار ACTUAL ، EXERCISE ، TEST
AlertMessageType نوع پیام هشدار اضطراری ALERT ، UPDATE ، CANCEL
AlertCategory دسته رویداد موضوع پیام هشدار اضطراری GEO ، MET ، SAFETY ، SECURITY ، RESCUE ، FIRE ، HEALTH ، ENV ، TRANSPORT ، INFRA ، CBRNE ، OTHER
AlertUrgency فوریت رویداد موضوع پیام هشدار اضطراری IMMEDIATE ، EXPECTED ، FUTURE ، PAST ، UNKNOWN
AlertSeverity شدت رویداد موضوع پیام هشدار اضطراری EXTREME ، SEVERE ، MODERATE ​​، MINOR ، UNKNOWN
AlertCertainty یقین از موضوع موضوع پیام هشدار اضطراری OBSERVED ، LIKELY ، POSSIBLE ، UNLIKELY ، UNKNOWN
می توانید Alert (که حاوی اطلاعات موجود در جدول است) ، پیام های متنی هشدار و AlertArea برای نشان دادن اطلاعات در مورد هشدار فعلی استفاده کنید. Alert یک زمینه اختیاری در ProgramInfo است به طوری که می توان آن را از طریق پخش رادیو HAL به برنامه های رادیویی از طریق پاسخ های تنظیم کننده برای اطلاعات برنامه فعلی و به روزرسانی لیست برنامه ارسال کرد.

،

در بخش های زیر نحوه کار با لایه Abstraction Hardware (HAL) برای اجرای رادیو پخش شده توضیح داده شده است.

پخش رابط هال رادیو

پخش رادیو HAL ساختار داده ها و رابط های داده را در سطح سخت افزار برای اجرای رادیو پخش ، مانند AM/FM و DAB Radio فراهم می کند.

رابط های Hidl 2.0 و AIDL

رادیو پخش شده HAL از رابط های شرح داده شده در بخش های زیر استفاده می کند.

یانن

IAnnouncementListener رابط پاسخ به عنوان شنونده اعلامیه است که می تواند در رادیو پخش هال برای دریافت اعلامیه ثبت شود. رابط کاربری زیر را دارد:

یانن
توضیحات: هر زمان که لیست اعلامیه تغییر کرده باشد ، تماس گرفته می شود.
Hidl 2.0 oneway onListUpdated(vec<Announcement> announcements)
ایدل oneway void onListUpdated(in Announcement[] announcements)

ایکلوس

ICloseHandle دسته نزدیک عمومی برای حذف یک تماس تلفنی است که نیازی به رابط فعال ندارد.

ایکلوس
توضیحات: دسته را ببندید.
Hidl 2.0 close()
ایدل void close()

itunercallback

ITunerCallback رابط تماس تلفنی است که توسط رادیو پخش شده HAL برای ارسال به روزرسانی به سرویس Client HAL تماس گرفته شده است.

itunercallback
توضیحات: هنگامی که یک عملیات تنظیم (لحن ، جستجو (در AIDL) یا اسکن (در HIDL) و مرحله موفقیت آمیز) توسط HAL خوانده می شود ، به طور غیر همزمان انجام نمی شود.
Hidl 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگام تنظیم ، به دنبال (در AIDL) یا اسکن (در HIDL) باشید ، یا مرحله موفقیت آمیز است.
Hidl 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
ایدل void onTuneFailed(in Result result, in ProgramSelector selector)
توضیحات: هنگام تنظیم ، به دنبال (در AIDL) یا اسکن (در HIDL) باشید ، یا مرحله موفقیت آمیز است.
Hidl 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که لیست برنامه به روز شد ، نامیده می شود. اندازه هر تکه باید به 500 کیلوگرم محدود شود.
Hidl 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
ایدل oneway onProgramListUpdated(ProgramListChunk chunk)
توضیحات: هنگام اتصال یا قطع آنتن ، نامیده می شود.
Hidl 2.0 oneway onAntennaStateChange(bool connected)
ایدل void onCurrentProgramInfoChanged(in ProgramInfo info)
توضیحات: هنگامی که مقادیر پارامتر خاص فروشنده در HAL به روز می شوند (پس از فراخوانی setParameters توسط HAL Client) فراخوانی می شود.
Hidl 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
ایدل void onParametersUpdated(in VendorKeyValue[] parameters)
توضیحات: جدید در AIDL. هنگامی که پرچم پیکربندی به صورت داخلی در HAL به روز می شود (پس از تماس با setConfigFlag توسط HAL Client) فراخوانی می شود.
Hidl 2.0 قابل اجرا نیست.
ایدل void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

اوبروکسترادیو

IBroadcastRadio رابط اصلی برای پخش رادیو هال است. در HIDL 2.0 HAL ، از رابط ITunerSession در تیونر استفاده کنید تا عملیات را فراخوانی کنید. با این حال ، حداکثر یک تیونر در یک زمان فعال است (به شرط آنکه هر نمونه رادیویی پخش شده فقط یک تراشه تیونر داشته باشد). ITunerSession از رابط های AIDL برداشته شد و رابط های آن به IBroadcastRadio منتقل شدند.

اوبروکسترادیو
توضیحات: توضیحات یک ماژول و قابلیت های آن را دریافت کنید.
Hidl 2.0 getProperties() generates (Properties properties)
ایدل Properties getProperties()
توضیحات: پیکربندی منطقه فعلی یا احتمالی منطقه AM/FM را واگذار می کند.
Hidl 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
ایدل AmFmRegionConfig getAmFmRegionConfig(bool full)
توضیحات: پیکربندی منطقه DAB فعلی را واگذار می کند.
Hidl 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
ایدل DabTableEntry[] getDabRegionConfig()
توضیحات: از حافظه نهان ماژول رادیویی تصویری می گیرد. در AIDL ، اندازه تصویر باید به دلیل محدودیت سخت در بافر معامله چسب ، کمتر از 1 مگابایت باشد.
Hidl 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
ایدل byte[] getImage(in int id)
توضیحات: شنونده اعلامیه را ثبت می کند.
Hidl 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
ایدل ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
توضیحات:
  • HIDL HAL: هنگامی که یک جلسه تنظیم کننده جدید باز شد ، جلسه قدیمی باید خاتمه یابد.
  • AIDL HAL: از آنجا که هیچ جلسه تیونر در دسترس نیست ، فقط نیاز به تماس تنظیم کننده تنظیم می شود. اگر وجود داشته باشد ، پاسخ به تماس قدیمی باید غیرقانونی باشد.
Hidl 2.0 openSession(ITunerCallback callback) تولید می کند (Result result, ITunerSession session)
ایدل void setTunerCallback(in ITunerCallback callback)
توضیحات:
  • HIDL HAL: بستن جلسه تیونر نباید شکست بخورد و فقط باید یک بار صادر شود.
  • AIDL HAL: هیچ تیونر وجود ندارد و فقط پاسخ پاسخ به تنظیمات نیاز دارد.
Hidl 2.0 close()
ایدل unsetTunerCallback()
توضیحات: آهنگ به یک برنامه مشخص.
Hidl 2.0 tune(ProgramSelector program) generates (Result result)
ایدل void tune(in ProgramSelector program)
توضیحات: برنامه معتبر بعدی را در هوا جستجو می کند. برای جلوگیری از سردرگمی در AIDL ، scan به seek تغییر نام داده می شود.
Hidl 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
ایدل void seek(in boolean directionUp, in boolean skipSubChannel)
توضیحات: مراحل به کانال مجاور ، که ممکن است توسط هیچ برنامه ای اشغال نشود.
Hidl 2.0 step(bool directionUp) generates (Result result)
ایدل void step(in boolean directionUp)
توضیحات: لغو در انتظار لحن ، اسکن (در Hidl) یا به دنبال (در AIDL) یا عملیات مرحله.
Hidl 2.0 cancel()
ایدل void cancel()
توضیحات: یک فیلتر را در لیست برنامه اعمال می کند و ارسال به روزرسانی لیست برنامه را از طریق پاسخ به تماس با onProgramListUpdated شروع می کند.
Hidl 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
ایدل void startProgramListUpdates(in ProgramFilter filter)
توضیحات: ارسال به روزرسانی لیست برنامه را متوقف می کند.
Hidl 2.0 stopProgramListUpdates()
ایدل void stopProgramListUpdates()
توضیحات: تنظیمات فعلی یک پرچم پیکربندی معین را واگذار می کند.
Hidl 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
ایدل boolean isConfigFlagSet(in ConfigFlag flag)
توضیحات: پرچم پیکربندی داده شده را تنظیم می کند.
Hidl 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
ایدل void setConfigFlag(in ConfigFlag flag, boolean value)
توضیحات: مقادیر پارامتر خاص فروشنده را تنظیم می کند.
Hidl 2.0 setParameters(vec<VendorKeyValue> parameters)

تولید می کند ،

(vec<VendorKeyValue> results)
ایدل VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
توضیحات: مقادیر پارامتر خاص فروشنده را بازیابی می کند.
Hidl 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
ایدل VendorKeyValue[] getParameters(in String[] keys)

توضیحات رابط

رفتار ناهمزمان

از آنجا که هر عملیات تنظیم (به عنوان مثال ، لحن ، اسکن (در HIDL) یا به دنبال (در AIDL) و مرحله) ممکن است وقت گیر باشد و نخ نباید برای مدت طولانی مسدود شود ، عمل باید برنامه های زمانبندی را برنامه ریزی کند تا بعداً اتفاق بیفتد و به سرعت وضعیت یا نتیجه را برگردانید. با جزئیات ، هر عمل باید:

  • تمام عملیات تنظیم در انتظار را لغو کنید.
  • بررسی کنید که آیا این عملیات بر اساس ورودی های روش و وضعیت تیونر قابل پردازش است.
  • وظیفه تنظیم را برنامه ریزی کرده و سپس Result (در HIDL) یا status (در AIDL) را بلافاصله برگردانید. اگر Result یا status OK باشد ، هنگام عدم موفقیت کار تنظیم (به عنوان مثال ، به دلیل زمان بندی) یا کامل است ، باید tuneFailed پاسخ currentProgramInfoChanged شود.

به طور مشابه ، startProgramListUpdates همچنین وظیفه وقت گیر به روزرسانی لیست برنامه را بعداً برنامه ریزی می کند و به سرعت یک وضعیت یا نتیجه را باز می گرداند. این روش ابتدا درخواست های به روزرسانی را لغو می کند و سپس کار به روزرسانی را برنامه ریزی می کند و به سرعت نتیجه را برمی گرداند.

شرایط مسابقه

با توجه به رفتار ناهمزمان عملیات تنظیم (به عنوان مثال ، لحن ، اسکن (در Hidl) یا به دنبال (در AIDL) و مرحله) ، یک وضعیت مسابقه بین لغو عملیات و عملیات تنظیم وجود دارد. در صورت cancel پس از اتمام عملیات HAL ، قبل از اتمام پاسخ به تماس ، لغو نادیده گرفته می شود و پاسخ به تماس کامل می شود و توسط مشتری HAL دریافت می شود.

به طور مشابه ، اگر stopProgramListUpdates پس از اتمام به روزرسانی لیست برنامه و قبل از اتمام تماس تلفنی onCurrentProgramInfoChanged فراخوانی شود ، می توان stopProgramListUpdates نادیده گرفت و پاسخ به تماس کامل شد.

محدودیت اندازه داده ها

از آنجا که محدودیت سختی در بافر معاملات Binder وجود دارد ، محدودیت داده برای برخی از روش های رابط که داده های با اندازه بالقوه بزرگ را منتقل می کنند ، در Aidl Hal روشن می شوند.

  • getImage نیاز به تصویر کمتر از 1 مگابایت دارد.
  • onProgramListUpdate نیاز به هر chunk کمتر از 500 کیلوگرم دارد. لیست برنامه های بزرگتر باید توسط اجرای HAL به چند تکه تقسیم شود و از طریق چندین تماس تلفنی ارسال شود.

تغییر در ساختار داده های AIDL HAL

علاوه بر تغییرات در رابط ها ، این تغییرات در ساختارهای داده تعریف شده در پخش رادیو Aidl Hal ، که از AIDL استفاده می کند ، اعمال شده است.

  • Enum Constant در AIDL برداشته می شود و به عنوان const Int در IBroadcastRadio تعریف می شود. در همین حال ، ANTENNA_DISCONNECTED_TIMEOUT_MS به ANTENNA_STATE_CHANGE_TIMEOUT_MS تغییر نام داده می شود. یک TUNER_TIMEOUT_MS جدید const int اضافه شده است. تمام عملیات لحن ، جستجو و مرحله باید در این زمان به پایان برسد.
  • enum RDS و Deemphasis در AIDL برداشته می شود و به عنوان const Int در AmFmRegionConfig تعریف می شود. به همین ترتیب ، هر دو fmDeemphasis و fmRds در ProgramInfo به عنوان int اعلام می شوند ، نتیجه محاسبه کمی از پرچم های مربوطه. در همین حال ، D50 و D75 به ترتیب به DEEMPHASIS_D50 تغییر نام داده اند و به ترتیب DEEMPHASIS_D75 .
  • Enum ProgramInfoFlags در AIDL حذف شده و به عنوان const int در ProgramInfo با پیشوند FLAG_ اضافه شده تعریف می شود. به همین ترتیب ، infoFlags در ProgramInfo به عنوان int اعلام می شود ، نتیجه محاسبه کمی از پرچم ها. TUNED همچنین به FLAG_TUNABLE تغییر نام داده است تا تعریف آن را بهتر توصیف کند که ایستگاه قابل تنظیم است.
  • در AmFmBandRange ، scanSpacing به seekSpacing تغییر نام داده می شود ، زیرا scan به seek AIDL تغییر نام داده می شود.
  • از آنجا که مفهوم اتحادیه در AIDL معرفی شده است ، MetadataKey و Metadata تعریف شده در Hidl Hal دیگر مورد استفاده قرار نمی گیرد. Metadata اتحادیه AIDL در Aidl Hal تعریف شده است. هر مقدار enum که قبلاً در MetadataKey وجود داشت ، بسته به تعاریف آنها ، زمینه ای در Metadata با نوع رشته یا int است.

پشتیبانی رادیویی DAB

در این بخش پشتیبانی رادیویی DAB توضیح داده شده است.

شناسه ها

نوع شناسه اصلی رادیو DAB و DMB در رادیو پخش AIDL HAL DAB_SID_EXT است. DAB_SID_EXT از یک شناسه خدمات 32 بیتی (SID) استفاده می کند تا بتواند SID رادیو DAB و DMB را نشان دهد.

علاوه بر شناسه های اولیه ، شناسه های ثانویه مانند DAB_ENSEMBLE و DAB_FREQUENCY_KHZ پشتیبانی می شوند. این مهم است زیرا چندین ایستگاه DAB می توانند در حالی که دارای مقادیر مختلف DAB_ENSEMBLE یا DAB_FREQUENCY_KHZ هستند ، یک DAB_SID_EXT به اشتراک بگذارند. برای اطمینان از به روزرسانی دقیق لیست برنامه ها ، ایستگاه هایی با همان DAB_SID_EXT با استفاده از ITunerCallback#onProgramListUpdated به روز می شوند. این بروزرسانی سپس به مدیر رادیو و مدیر رادیو پخش شده و سرانجام از طریق android.hardware.radio.ProgramList به برنامه رادیو منتقل می شود.

فراداده

در جدول زیر ، ابرداده پشتیبانی شده Speficic به DAB در AIDL Broadcast Radio Hal:

میدان فوق داده توضیحات
dabEnsembleName (فرم مختصر: dabEnsembleNameShort ) نام گروه ایستگاه DAB
dabServiceName (مختصر از dabServiceNameShort ) نام سرویس ایستگاه DAB
dabComponentName (مختصر از dabComponentNameShort ) نام جزء ایستگاه DAB

Rupport رادیو HD

در این بخش پشتیبانی رادیو HD توضیح داده شده است.

شناسه ها

HD_STATION_ID_EXT به عنوان شناسه اصلی ایستگاه های رادیویی HD استفاده می شود. برای افزایش بیشتر شناسایی ایستگاه ، شناسه های ثانویه مانند HD_STATION_NAME و HD_STATION_LOCATION نیز ارائه شده است. HD_STATION_LOCATION ، که اطلاعات مکان را ارائه می دهد ، در اندروید 15 معرفی شد.

رادیو دیجیتال را فعال یا غیرفعال کنید

با شروع Android 15 ، می توانید رادیو دیجیتال (مانند رادیو HD) را با تنظیم ConfigFlag s فعال یا غیرفعال کنید. برای کنترل این تنظیم برای رادیو FM ، از پرچم FORCE_ANALOG_FM استفاده کنید. برای رادیو AM ، از پرچم FORCE_ANALOG_AM استفاده کنید. تنظیم پرچم روی false رادیو HD را قادر می سازد ، در حالی که آن را روی رادیو Analog Am/FM Analog true قرار می دهد.

کانال های HD موجود است

با شروع Android 15 ، کانال های HD که در حال حاضر برای ایستگاه رادیویی HD در دسترس هستند ، می توانند با یک ماسک بیت از 8 بیت ، Metadata#hdSubChannelsAvailable ، در ProgramInfo.metadata نمایش داده شوند. به عنوان مثال ، مقدار بیت 1 از سمت چپ نشان می دهد که آیا زیر کانال HD2 برای این ایستگاه HD در دسترس است.

وضعیت کسب سیگنال

در نسخه های Android 15 و بالاتر ، برنامه های رادیویی می توانند وضعیت کسب سیگنال ایستگاه های رادیویی HD را به کاربران نشان دهند. این مفید است زیرا دستیابی به یک سیگنال HD قوی گاهی اوقات می تواند چند لحظه طول بکشد.

برای ارائه این اطلاعات ، سیستم از ProgramInfo.infoFlags برای ردیابی وضعیت و به روزرسانی برنامه رادیویی از طریق ITunerCallback#onCurrentProgramInfoChanged.

در اینجا نحوه نمایش وضعیت در ProgramInfo.infoFlags آورده شده است:

  • بیت 6: نشان می دهد که آیا سیگنال رادیویی HD به دست آمده است یا خیر.
  • بیت 7: نشان می دهد که آیا داده های سرویس اطلاعات ایستگاه (SIS) در دسترس است یا خیر. SIS اطلاعات بیشتری در مورد ایستگاه و آنچه در حال بازی است ارائه می دهد.
  • بیت 8: می گوید آیا HD Digital Audio در دسترس است یا خیر.

فراداده

جدول زیر ابرداده رادیویی HD پشتیبانی شده برای نسخه های Android 15 و بالاتر را نشان می دهد.

میدان فوق داده توضیحات
commentShortDescription شرح متن کوتاه نظر
commentActualText متن نظر
commercial تجاری رادیویی
ufids شناسه های فایل منحصر به فرد (UFIDS) مرتبط با محتوا
hdStationNameShort نام کوتاه ایستگاه رادیویی HD یا نام کوتاه جهانی
hdStationNameLong نام بلند ، شعار یا پیامی از ایستگاه رادیویی HD.

هشدارهای اضطراری

در اندروید 15 و بالاتر ، هشدارهای اضطراری برای ایستگاه های رادیویی HD پشتیبانی می شوند تا به کاربران برنامه رادیویی از هشدارهای اضطراری ارسال شده از ایستگاه های رادیویی اطلاع دهند. هشدار اضطراری ( Alert ) از پروتکل هشدار دهنده مشترک (CAP) 1.2 استاندارد پیروی می کند و از هشدارهای نشان داده شده در جدول زیر پشتیبانی می کند:

اطلاعات هشدار توضیحات مقادیر موجود در دسترس است
AlertStatus وضعیت پیام هشدار ACTUAL ، EXERCISE ، TEST
AlertMessageType نوع پیام هشدار اضطراری ALERT ، UPDATE ، CANCEL
AlertCategory دسته رویداد موضوع پیام هشدار اضطراری GEO ، MET ، SAFETY ، SECURITY ، RESCUE ، FIRE ، HEALTH ، ENV ، TRANSPORT ، INFRA ، CBRNE ، OTHER
AlertUrgency فوریت رویداد موضوع پیام هشدار اضطراری IMMEDIATE ، EXPECTED ، FUTURE ، PAST ، UNKNOWN
AlertSeverity شدت رویداد موضوع پیام هشدار اضطراری EXTREME ، SEVERE ، MODERATE ​​، MINOR ، UNKNOWN
AlertCertainty یقین از موضوع موضوع پیام هشدار اضطراری OBSERVED ، LIKELY ، POSSIBLE ، UNLIKELY ، UNKNOWN
می توانید Alert (که حاوی اطلاعات موجود در جدول است) ، پیام های متنی هشدار و AlertArea برای نشان دادن اطلاعات در مورد هشدار فعلی استفاده کنید. Alert یک زمینه اختیاری در ProgramInfo است به طوری که می توان آن را از طریق پخش رادیو HAL به برنامه های رادیویی از طریق پاسخ های تنظیم کننده برای اطلاعات برنامه فعلی و به روزرسانی لیست برنامه ارسال کرد.