با شروع از اندروید ۱۴، به شرکا و فروشندگان SoC توصیه میشود که پیادهسازی فعلی HIDL HAL را با پیادهسازی AIDL HAL جایگزین کنند.
برای تسهیل انتقال روان از HIDL Audio HAL به AIDL Audio HAL، برخی از تفاوتهای کلیدی در این صفحه برجسته شدهاند. این صفحه همچنین نگاشت بین رابطهای AIDL و HIDL را برای Audio HAL نشان میدهد.
تفاوت بین پیادهسازی AIDL و HIDL Audio HAL
تفاوتهای اصلی بین ساختار HIDL و ساختار AIDL به شرح زیر است:
در AIDL Audio Core HAL ، رابط
IConfigبه عنوان جایگزینی برای پارامترهای سراسری سیستم در فایلهای XML در HIDL HAL معرفی شده است. این چارچوب این پارامترها را به جای فایل پیکربندی فروشنده، از Core HAL میخواند. به عنوان مثال، لیست فرمتهای فراگیر که برای کنترل کاربر نمایش داده میشوند، توسط متدIConfig.getSurroundSoundConfigدر Core HAL ارائه میشود.در AIDL Audio Effects HAL ، منطق
effectProxyتعریف شده در فایلهای XML در HIDL Effects HAL به چارچوب صوتی منتقل میشود. چارچوب صوتی با استفاده ازIFactory.queryEffectsاز تمام نمونههای افکت در سیستم و با استفاده ازIFactory.queryProcessingاز تمام پردازشهای افکت پرسوجو میکند.برای جلوگیری از سردرگمی با استفاده از اصطلاح دستگاه برای انواع دستگاههای صوتی،
IDeviceدر HIDL Audio HAL در AIDL Audio HAL بهIModuleتغییر نام داده است.AIDL Audio HAL جایگزین
IPrimaryDeviceمیشود. این چارچوب بهروزرسانیهایی در مورد حالت صوتی فعلی و چرخش صفحه نمایش را به هر نمونهIModuleارسال میکند. یک رابط اختصاصیIBluetoothپارامترهای مربوط به اتصال همزمان بلوتوث (BT SCO) و پروفایل هندزفری (HFP) را مدیریت میکند. یک رابط اختصاصیITelephonyکنترلهای مخصوص تلفن را ارائه میدهد. میتوانید نمونههایی از هر دوی این رابطها را از نمونه اصلی رابطIModuleبازیابی کنید. برای اطلاعات بیشتر به جداول مقایسه Core HAL و قابلیتهای مرتبط با ویژگی مراجعه کنید.IDevicesFactoryدر AIDL Audio HAL حذف شده است تا از افزونگی جلوگیری شود. ماژولهای HAL (یعنی نمونههای رابطIModule) اکنون مستقیماً با استفاده از نام نمونههای ماژول، مانندbluetoothیاr_submix، در Service Manager ثبت میشوند. تنها استثنا، ماژولprimaryاست که تحت نام نمونهdefaultثبت میشود.
نقشه برداری AIDL و HIDL صوتی HAL
جداول بخشهای بعدی، نگاشت بین رابطهای HIDL و AIDL Audio HAL را نشان میدهند. برای اطلاعات بیشتر در مورد ساختار دایرکتوری، به Audio HAL مراجعه کنید.
هسته هال
تمام رابطهای HIDL در بسته android.hardware.audio@NM قرار دارند، که در آن NM نشان دهنده نسخه Major.Minor است. تمام رابطهای AIDL در بسته android.hardware.audio.core قرار دارند.
| رابطهای API و فایلهای پیکربندی HIDL | رابطهای API AIDL |
|---|---|
IDevicesFactory | ثبت IModule با ServiceManager . |
IDevice | IModule |
IPrimaryDevice | ITelephonyIBluetooth |
IStreamIStreamInIStreamOut | StreamDescriptorIStreamInIStreamCommonIStreamOut |
audio_policy_configuration.xmlaudio_policy_engine_configuration.xml | IConfigIModule |
| فایلهای سیاست صوتی قابل تنظیم | از پیادهسازی HIDL برای اندروید ۱۴ استفاده کنید. |
پورتهای صوتی، پروفایلهای پویا، مسیرها و پچها
در این جدول، عناصر فایلهای XML با استفاده از براکتهای زاویهدار مشخص شدهاند.
| متدهای رابط API HIDL و عناصر فایلهای پیکربندی | متدهای رابط API AIDL |
|---|---|
<attachedDevices><defaultOutputDevice><mixPorts><devicePorts> | IModule.getAudioPorts |
IDevice.getAudioPortIDevice.setConnectedState | IModule.connectExternalDeviceIModule.disconnectExternalDevice |
IStream.getSupportedProfiles | IModule.connectExternalDevice |
< routes > | IModule.getAudioRoutes |
IDevice.createAudioPatchIDevice.updateAudioPatchIDevice.releaseAudioPatchIStream.getDevicesIStream.setDevicesمشخصات دستگاه در IDevice.openInputStreamIDevice.openOutputStream | IModule.setAudioPatchIModule.setAudioPortConfigIModule.resetAudioPatch |
پیکربندیها و جریانهای پورت صوتی
| روشهای رابط API HIDL | متدهای رابط API AIDL |
|---|---|
IStream.getAudioPropertiesIStream.setAudioPropertiesIStreamIn.getAudioSource | IModule.getAudioPortConfigsIModule.setAudioPortConfig |
IDevice.openInputStreamIDevice.openOutputStreamIStreamIn.prepareForReadingIStreamOut.prepareForWritingIStream.createMmapBuffer | IModule.openInputStreamIModule.openOutputStream |
IStream.close | IStreamCommon.close |
IStreamIn.updateSinkMetadataIStreamOut.updateSourceMetadata | IStreamIn.updateMetadataIStreamOut.updateMetadata |
IStream.standby | StreamDescriptor.Command.standby |
IStream.pauseIStream.resume | StreamDescriptor.Command.pause.start |
IStream.startIStream.stop(جریانهای MMAP) | StreamDescriptor.Command.start یا .burst.pause (ورودی) و/یا .flush (خروجی) |
IStreamOut.drainIStreamOut.flush | StreamDescriptor.Command.drain.flush |
IStreamOut.setCallbackIStreamOut.clearCallback | IModule.openOutputStreamIStreamCommon.close |
IStreamOut.getPresentationPosition و IStreamIn.getCapturePositionIStreamOut.getLatencyIStream.getMmapPositionIStreamIn.getInputFramesLost | StreamDescriptor.Reply.observableStreamDescriptor.Reply.latencyMsStreamDescriptor.Reply.hardwareStreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSizeIStreamOut.getLatencyIStream.getBufferSizeIStream.getFrameSizeIStream.getFrameCount | IModule.setAudioPatch ، تأخیر اسمی و حداقل اندازه بافر بخشی از ساختار AudioPatch هستند که توسط HAL بازگردانده میشوند. اندازه واقعی بافر بر حسب فریم، همراه با اندازه فریم بر حسب بایت، بخشی از ساختار StreamDescriptor است. اندازه بافر بر حسب بایت را میتوان با ضرب این دو عدد محاسبه کرد. |
اتصال جلوههای صوتی
| روشهای رابط API HIDL | متدهای رابط API AIDL |
|---|---|
IDevice.addDeviceEffectIDevice.removeDeviceEffect | IModule.addDeviceEffectIModule.removeDeviceEffect |
IStream.addEffectIStream.removeEffect | IStreamCommon.addEffectIStreamCommon.removeEffect |
پیکربندی سراسری سیستم
پیکربندی سراسری سیستم که قبلاً در فایلهای پیکربندی XML سیاست صوتی (یعنی audio_policy_configuration.xml و audio_policy_engine_configuration.xml ) تعریف شده بود، باید از طریق IConfig ارائه شود. با این حال، برای سهولت انتقال به AIDL، فروشندگان هنوز هم میتوانند از همان فایلهای XML که قبلاً برای تنظیم پیکربندی سراسری سیستم استفاده میکردند، استفاده کنند. پیادهسازی مرجع برای IConfig شامل کد لازم برای نمایش اطلاعات از فایل XML با استفاده از انواع داده AIDL است که تبدیل از XML به AIDL را تسهیل میکند.
| عناصر فایل پیکربندی HIDL | متدهای رابط API AIDL |
|---|---|
<globalConfiguration><speaker_drc_enabled><call_screen_mode_supported><engine_library> | به دو روش مختلف تقسیم میشود:ITelephony.getSupportedAudioModesIConfig.getEngineConfig |
<volumes> ، یا<volumeGroups> ، <ProductStrategies> | IConfig.getEngineConfig |
<surroundSound> | IConfig.getSurroundSoundConfig |
speaker_drc_enabledاز فایل پیکربندی حذف شده است زیرا این مورد پیکربندی در سیستم استفاده نمیشود. همه دستگاهها باید DRC را فعال داشته باشند.
قابلیتهای مرتبط با ویژگی
| روشهای رابط API HIDL | رابط API AIDL |
|---|---|
IDevice.setMasterVolumeIDevice.getMasterVolumeIDevice.setMicMuteIDevice.getMicMuteIDevice.setMasterMuteIDevice.getMasterMute | IModule.\* |
IPrimaryDevice.getTtyModeIPrimaryDevice.setTtyModeIPrimaryDevice.getHacEnabledIPrimaryDevice.setHacEnabledIPrimaryDevice.setVoiceVolume | ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugNameIPrimaryDevice.getBtScoNrecEnabledIPrimaryDevice.setBtScoNrecEnabledIPrimaryDevice.getBtScoWidebandEnabledIPrimaryDevice.setBtScoWidebandEnabled,IPrimaryDevice.getBtHfpEnabledIPrimaryDevice.setBtHfpEnabledIPrimaryDevice.setBtHfpSampleRateIPrimaryDevice.setBtHfpVolume | IBluetooth.ScoConfig.\*IBluetooth.HfpConfig.\* |
IPrimaryDevice.setModeIPrimaryDevice.updateRotation | ITelephony.switchAudioModeIModule.updateAudioModeIModule.updateScreenRotation |
IDevice.setScreenStateIDevice.getMicrophones | IModule.updateScreenStateIModule.getMicrophones |
IDevice.getHwAvSyncIStream.setHwAvSync | IModule.generateHwAvSyncIdIStreamCommon.updateHwAvSyncId |
IStreamIn.setGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension | IStreamIn.setHwGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoModeIStreamOut.setDualMonoModeIStreamOut.getPlaybackRateParametersIStreamOut.setPlaybackRateParametersIStreamOut.selectPresentationIStreamOut.getAudioDescriptionMixLevelIStreamOut.setAudioDescriptionMixLevelIStreamOut.setLatencyModeIStreamOut.getRecommendedLatencyModes | IStreamOut.\* |
IStreamOut.setEventCallbackIStreamOut.setLatencyModeCallback | IModule.openOutputStream (فراخوانیها در IStreamOutEventCallback ترکیب میشوند) |
IDevice.get/setParametersIStream.get/setParameters | IModule.get/setVendorParametersIStreamCommon.get/setVendorParameters |
روشهای منسوخشده
| روشهای رابط API HIDL | نظرات |
|---|---|
IDevice.initCheckIDevice.close | ماژول HAL فقط در صورت راهاندازی موفقیتآمیز، خود را با ServiceManager منتشر میکند. در آن مرحله، دائمی در نظر گرفته میشود و نمیتوان آن را بست. |
IDevice.supportsAudioPatchesIStreamOut.supportsPauseAndResumeIStreamOut.supportsDrain | پشتیبانی از وصلهها، مکث، از سرگیری و تخلیه اجباری است. |
IStreamOut.getRenderPositionIStreamOut.getNextWriteTimestamp | منسوخ شده. |
افزونههای فروشنده
در HIDL API، افزونههای فروشنده با استفاده از متدهای getParameters یا setParameters از رابطهای IDevice و IStream پیادهسازی میشوند. این متدها رشتههای دلخواه را میپذیرند. در AIDL API، متدهای متناظری مانند getVendorParameters یا setVendorParameters وجود دارند که با استفاده از کپسولهسازی در ParcelableHolders ، نمونههای دلخواه Parcelable میپذیرند.
تغییرات دیگر
سایر تغییرات کلی به شرح زیر است:
برای بهبود قابلیت تست APIهای HAL، در نسخه AIDL، گزینههای اشکالزدایی را معرفی میکنیم که توسط تستهای VTS استفاده میشوند و از طریق بستهبندی
ModuleDebugدر دسترس هستند. این گزینهها به HAL دستور میدهند تا عملکردهای خاصی (مثلاً اتصال دستگاههای خارجی) را شبیهسازی کند، که در غیر این صورت نیاز به مداخله دستی و استفاده از تجهیزات تست خارجی دارد.وقتی چارچوب یا تست VTS، ویژگی سیستم
sys.audio.restart.halرا روی1تنظیم میکند، سرویسهای HAL باید مجدداً راهاندازی شوند. فایلaudioserver.rcاین راهاندازی مجدد را مدیریت میکند. هنگام پیادهسازی HAL، از نام سرویس HAL مناسب که در فایلaudioserver.rcذکر شده است استفاده کنید. در اندروید ۱۴، نامvendor.audio-hal-aidlبه طور خاص برای نسخه AIDL HAL اضافه شده است.
اثرات هال
تمام رابطهای HIDL درون بسته android.hardware.audio.effect@NM* قرار دارند، که در آن NM نسخه Major.Minor است. تمام رابطهای AIDL درون بسته android.hardware.audio.effect قرار دارند.
| رابطهای API و فایلهای پیکربندی HIDL | رابطهای API AIDL |
|---|---|
IEffectsFactory | IFactory |
IEffect | IEffect |
audio_effects.xml | IEffect |
کارخانه افکت
| رابطهای API HIDL (android.hardware.audio.effect@XX) | رابطهای API AIDL (افکت صوتی.سختافزار.اندروید) |
|---|---|
IEffectsFactory.getAllDescriptors | IFactory.queryEffects با پارامتر UUID تهی |
IEffectsFactory.getDescriptor | IFactory.queryEffects با پارامتر UUID |
IEffectsFactory.createEffect | IFactory.createEffect |
audio_effects.xml | IFactory.queryProcessingIFactory.queryEffects |
رابطهای افکت
| رابطهای API HIDL (android.hardware.audio.effect@XX) | رابطهای API AIDL (افکت صوتی.سختافزار.اندروید) |
|---|---|
IEffect.init | IEffect.open |
IEffect.setConfig | IEffect.setParameter |
IEffect.enable | IEffect.command(CommandId::START) |
IEffect.disable | IEffect.command(CommandId::STOP) |
IEffect.reset | IEffect.command(CommandId::RESET) |
IEffect.getDescriptor | IEffect.getDescriptor |
IEffect.command | نگاشت به IEffect.commandIEffect.setParameter ، یاIEffect.getParameter بر اساس نوع دستور HIDL قدیمی |
| ناموجود | IEffect.getState |
IEffect.setParameter | IEffect.setParameter |
IEffect.getParameter | IEffect.getParameter |
دستورات افکت
| رابطهای API HIDL (android.hardware.audio.effect@XX) | رابطهای API AIDL (افکت صوتی.سختافزار.اندروید) |
|---|---|
EFFECT_CMD_INIT | IEffect.open |
EFFECT_CMD_RESET | CommandId.RESET |
EFFECT_CMD_ENABLE | IEffect.command(CommandId::START) |
EFFECT_CMD_DISABLE | IEffect.command(CommandId::STOP) |
EFFECT_CMD_SET_PARAM_DEFERRED | در Effects AIDL HAL منسوخ شده است |
EFFECT_CMD_SET_PARAM_COMMIT | در Effects AIDL HAL منسوخ شده است |
EFFECT_CMD_SET_CONFIGEFFECT_CMD_SET_PARAMEFFECT_CMD_SET_DEVICEEFFECT_CMD_SET_VOLUMEEFFECT_CMD_SET_AUDIO_MODEEFFECT_CMD_SET_CONFIG_REVERSEEFFECT_CMD_SET_INPUT_DEVICEEFFECT_CMD_SET_FEATURE_CONFIGEFFECT_CMD_SET_AUDIO_SOURCE | IEffect.setParameter |
EFFECT_CMD_GET_PARAMEFFECT_CMD_GET_CONFIGEFFECT_CMD_GET_CONFIG_REVERSEEFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGSEFFECT_CMD_GET_FEATURE_CONFIGVISUALIZER_CMD_MEASUREEFFECT_CMD_FIRST_PROPRIETARY(همانند VISUALIZER_CMD_CAPTURE ) | IEffect.getParameter |
EFFECT_CMD_OFFLOAD | منسوخ شده. در AIDL، سوئیچهای حالت تخلیه بار و غیر تخلیه بار در چارچوب مدیریت میشوند. |
EFFECT_CMD_DUMP | توسط تراکنش اتصالدهندهی داخلی AIBinder_dump مدیریت میشود. |
تعریف پارامترهای اثر مشترک
| تعریف HIDL (android.hardware.audio.effect@XX) | تعریف AIDL |
|---|---|
Types.hal | Flags.aidlParameter.aidl |
تعریف اثرات خاص
| رابطهای API HIDL (android.hardware.audio.effect@XX) | رابطهای API AIDL (افکت صوتی.سختافزار.اندروید) |
|---|---|
I $EffectType$ .hal | $EffectType$ .aidl |