بخش های زیر نحوه کار با لایه انتزاعی سخت افزاری (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) | |
| ایدل | void 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 2.0 | openSession(ITunerCallback callback) ایجاد می کند (Result result, ITunerSession session) | |
| ایدل | void setTunerCallback(in ITunerCallback callback) | |
توضیحات:
| ||
| 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یاstatusOKباشد، زمانی که کار تنظیم ناموفق بوده است (مثلاً به دلیل مهلت زمانی) یا تکمیل شده است، تنظیم کننده تماس برگشتی تنظیم کننده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 به برنامههای رادیویی از طریق تماسهای تیونر برای اطلاعات فعلی برنامه و بهروزرسانیهای لیست برنامه ارسال کرد.