از Android 14، به شرکا و فروشندگان 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 بهIModuleدر AIDL Audio HAL تغییر نام داده است.AIDL Audio HAL جایگزین
IPrimaryDeviceمیشود. چارچوب بهروزرسانیهایی درباره حالت صوتی فعلی و چرخش صفحهنمایش به هر نمونهIModuleارسال میکند. میانایIBluetoothاختصاصی پارامترهای مربوط به اتصال همزمان بلوتوث (BT SCO) و «نمایه دستآزاد» (HFP) را مدیریت میکند. میانایITelephonyاختصاصی کنترلهای ویژه تلفنی را ارائه میدهد. میتوانید نمونههای هر دو این میانها را از نمونه اصلی میانIModuleبازیابی کنید. برای اطلاعات بیشتر، جدولهای مقایسه در Core HAL و کارکرد مربوط به ویژگی را ببینید.
IDevicesFactoryدر AIDL Audio HAL برداشته شده است تا از افزونگی جلوگیری شود. اکنون مدولهای HAL (یعنی نمونههای میانایIModule) مستقیماً بااستفاده از نامهای نمونههای مدول، مثلbluetoothیاr_submix، در «مدیر سرویس» ثبت میشوند. تنها استثنا واحدprimaryاست که تحت نام نمونهdefaultثبت میشود.
نگاشت HAL صوتی AIDL و HIDL
جدولهای بخشهای زیر نگاشت بین میاناهای HIDL و AIDL Audio HAL را نشان میدهند. برای اطلاعات بیشتر درباره ساختار دایرکتوری، Audio HAL را ببینید.
لایه انتزاع سختافزار اصلی
همه میاناهای HIDL در بسته android.hardware.audio@N.M قرار دارند، که در آن
N.M نشاندهنده نسخه Major.Minor است. همه میاناهای AIDL در بسته android.hardware.audio.core قرار دارند.
| میاناهای برنامهسازی کاربردی HIDL و فایلهای پیکربندی | میاناهای میانای برنامهسازی کاربردی AIDL |
|---|---|
IDevicesFactory |
ثبت IModule با ServiceManager. |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
| فایلهای «خطمشی صوتی قابلپیکربندی» | از پیادهسازی HIDL برای Android 14 استفاده کنید. |
درگاههای صدا، نمایههای پویا، مسیرها، و وصلهها
در این جدول، عناصر فایلهای XML بااستفاده از پرانتزهای زاویهدار مشخص شدهاند.
| روشهای واسط میانای برنامهسازی کاربردی HIDL و عناصر فایلهای پیکربندی | روشهای واسط میانای برنامهسازی کاربردی AIDL |
|---|---|
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts> |
IModule.getAudioPorts |
IDevice.getAudioPort
IDevice.setConnectedState |
IModule.connectExternalDevice
IModule.disconnectExternalDevice |
IStream.getSupportedProfiles |
IModule.connectExternalDevice |
<routes> |
IModule.getAudioRoutes |
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
مشخصات دستگاه در IDevice.openInputStream
IDevice.openOutputStream |
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch |
پیکربندیها و جاریسازیهای درگاه صوتی
| روشهای واسط میانای برنامهسازی کاربردی HIDL | روشهای واسط میانای برنامهسازی کاربردی AIDL |
|---|---|
IStream.getAudioProperties
IStream.setAudioProperties
IStreamIn.getAudioSource |
IModule.getAudioPortConfigs
IModule.setAudioPortConfig |
IDevice.openInputStream
IDevice.openOutputStream
IStreamIn.prepareForReading
IStreamOut.prepareForWriting
IStream.createMmapBuffer |
IModule.openInputStream
IModule.openOutputStream |
IStream.close |
IStreamCommon.close |
IStreamIn.updateSinkMetadata
IStreamOut.updateSourceMetadata |
IStreamIn.updateMetadata
IStreamOut.updateMetadata |
IStream.standby |
StreamDescriptor.Command.standby |
IStream.pause IStream.resume |
StreamDescriptor.Command.pause .start |
IStream.start IStream.stop (جاریسازیهای MMAP) |
StreamDescriptor.Command.start یا .burst
.pause (ورودی) و/یا .flush (خروجی) |
IStreamOut.drain IStreamOut.flush |
StreamDescriptor.Command.drain .flush |
IStreamOut.setCallback
IStreamOut.clearCallback |
IModule.openOutputStream
IStreamCommon.close |
IStreamOut.getPresentationPosition و IStreamIn.getCapturePosition
IStreamOut.getLatency
IStream.getMmapPosition
IStreamIn.getInputFramesLost |
StreamDescriptor.Reply.observable
StreamDescriptor.Reply.latencyMs
StreamDescriptor.Reply.hardware
StreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSize
IStreamOut.getLatency
IStream.getBufferSize
IStream.getFrameSize
IStream.getFrameCount |
IModule.setAudioPatch، تأخیر اسمی، و حداقل اندازه میانگیر
بخشی از ساختار AudioPatch هستند که توسط HAL برگردانده میشود.
اندازه واقعی میانگیری در قابها بخشی از ساختار StreamDescriptor
همراه با اندازه قاب در بایت است. اندازه میانگیر برحسب بایت را میتوان با ضرب کردن این دو عدد محاسبه کرد. |
اتصال «جلوههای صوتی»
| روشهای میانای HIDL API | روشهای میانای API AIDL |
|---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.removeEffect |
پیکربندی سراسر سیستم
پیکربندی سراسری که قبلاً در فایلهای پیکربندی XML خطمشی صوتی تعریف شده است (یعنی audio_policy_configuration.xml و audio_policy_engine_configuration.xml) باید ازطریق IConfig ارائه شود.
بااینحال، برای تسهیل انتقال به AIDL، فروشندگان همچنان این گزینه را دارند که از
همان فایلهای XML که قبلاً برای تنظیم پیکربندی سراسری سیستم استفاده میکردند استفاده کنند. پیادهسازی مرجع برای IConfig حاوی کد لازم برای نمایش اطلاعات از فایل XML بااستفاده از انواع داده AIDL است که تبدیل XML به AIDL را تسهیل میکند.
| عناصر فایل پیکربندی HIDL | روشهای واسط میانای برنامهسازی کاربردی AIDL |
|---|---|
<globalConfiguration>
<speaker_drc_enabled><call_screen_mode_supported>
<engine_library> |
به دو روش مختلف تقسیم شده است:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes>، اورگن
<volumeGroups>، <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabledاز فایل پیکربندی برداشته شد زیرا این مورد پیکربندی در سیستم استفاده نمیشود. همه دستگاهها باید «کنترل محدوده پویا» را فعال کرده باشند. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
عملکرد مرتبط با ویژگی
| روشهای واسط میانای برنامهسازی کاربردی HIDL | میانای API زبان تعریف میانای Android |
|---|---|
IDevice.setMasterVolume
IDevice.getMasterVolume
IDevice.setMicMute
IDevice.getMicMute
IDevice.setMasterMute
IDevice.getMasterMute |
IModule.\* |
IPrimaryDevice.getTtyMode
IPrimaryDevice.setTtyMode
IPrimaryDevice.getHacEnabled
IPrimaryDevice.setHacEnabled
IPrimaryDevice.setVoiceVolume |
ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugName
IPrimaryDevice.getBtScoNrecEnabled
IPrimaryDevice.setBtScoNrecEnabled
IPrimaryDevice.getBtScoWidebandEnabled
IPrimaryDevice.setBtScoWidebandEnabled,
IPrimaryDevice.getBtHfpEnabled
IPrimaryDevice.setBtHfpEnabled
IPrimaryDevice.setBtHfpSampleRate
IPrimaryDevice.setBtHfpVolume |
IBluetooth.ScoConfig.\*
IBluetooth.HfpConfig.\* |
IPrimaryDevice.setMode
IPrimaryDevice.updateRotation |
ITelephony.switchAudioMode
IModule.updateAudioMode
IModule.updateScreenRotation |
IDevice.setScreenState
IDevice.getMicrophones |
IModule.updateScreenState
IModule.getMicrophones |
IDevice.getHwAvSync
IStream.setHwAvSync |
IModule.generateHwAvSyncId
IStreamCommon.updateHwAvSyncId |
IStreamIn.setGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamIn.setHwGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoMode
IStreamOut.setDualMonoMode
IStreamOut.getPlaybackRateParameters
IStreamOut.setPlaybackRateParameters
IStreamOut.selectPresentation
IStreamOut.getAudioDescriptionMixLevel
IStreamOut.setAudioDescriptionMixLevel
IStreamOut.setLatencyMode
IStreamOut.getRecommendedLatencyModes |
IStreamOut.\* |
IStreamOut.setEventCallback
IStreamOut.setLatencyModeCallback |
IModule.openOutputStream (تماسهای برگشتی در
IStreamOutEventCallback ترکیب میشوند) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
روشهای منسوخ
| روشهای واسط میانای برنامهسازی کاربردی HIDL | نظرات |
|---|---|
IDevice.initCheckIDevice.close |
واحد HAL خودش را با ServiceManager فقط درصورت
راهاندازی موفق منتشر میکند. در این مرحله، دائمی درنظر گرفته میشود و نمیتوان آن را بست. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
پشتیبانی از وصلهها، توقف موقت، ازسرگیری، و تخلیه الزامی است. |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
منسوخ. |
افزونههای فروشنده
در HIDL API، افزونههای فروشنده بااستفاده از روشهای getParameters یا setParameters از میاناهای IDevice و IStream پیادهسازی میشوند. این
روشها رشتههای دلخواه را میپذیرند.
در AIDL API، روشهای متناظری وجود دارد، مانند getVendorParameters
یا setVendorParameters، که نمونههای دلخواه Parcelable را بااستفاده از
کپسولهسازی در ParcelableHolders میگیرند.
تغییرات دیگر
دیگر تغییرات کلی به شرح زیر است:
برای بهبود قابلیت آزمایش کردن «میاناهای برنامهسازی کاربردی لایه سختافزار» (HAL)، در نسخه AIDL، گزینههای اشکالزدایی را معرفی میکنیم که در آزمایشهای VTS استفاده میشوند و ازطریق نوع بستهبندی
ModuleDebugدردسترس هستند. این گزینهها به HAL دستور میدهند عملکرد خاصی را شبیهسازی کند (برای مثال، اتصال دستگاههای خارجی)، که درغیراینصورت به مداخله دستی و استفاده از تجهیزات آزمایش خارجی نیاز دارد.وقتی چارچوب یا مجموعههای آزمون VTS دارایی سیستم
sys.audio.restart.halرا روی1تنظیم میکند، سرویسهای HAL باید بازراهاندازی شوند. فایلaudioserver.rcبازراهاندازی را مدیریت میکند. هنگام پیادهسازی HAL، از نام سرویس HAL مناسب که در فایلaudioserver.rcفهرست شده است استفاده کنید. در Android 14، نامvendor.audio-hal-aidlبهطور خاص برای نسخه AIDL از HAL اضافه شده است.
لایه انتزاع سختافزار جلوهها
همه میاناهای HIDL در بسته android.hardware.audio.effect@N.M* قرار دارند، که در آن N.M نسخه Major.Minor است. همه میاناهای AIDL
در بسته android.hardware.audio.effect قرار دارند.
| واسطهای میانای برنامهسازی کاربردی HIDL و فایلهای پیکربندی | میاناهای AIDL API |
|---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
کارخانه جلوه
| واسطهای HIDL API (android.hardware.audio.effect@X.X) |
میاناهای AIDL API (android.hardware.audio.effect) |
|---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects با پارامتر شناسه منحصربهفرد جهانی تهی |
IEffectsFactory.getDescriptor |
IFactory.queryEffects با پارامتر UUID |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
میاناهای جلوه
| واسطهای HIDL API (android.hardware.audio.effect@X.X) |
میاناهای AIDL API (android.hardware.audio.effect) |
|---|---|
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 |
براساس نوع فرمان HIDL قدیمی، به IEffect.command،
IEffect.setParameter، یا
IEffect.getParameter نقشه میدهد
|
| موجود نیست | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
فرمانهای جلوه
| واسطهای HIDL API (android.hardware.audio.effect@X.X) |
میاناهای AIDL API (android.hardware.audio.effect) |
|---|---|
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_CONFIG
EFFECT_CMD_SET_PARAM
EFFECT_CMD_SET_DEVICE
EFFECT_CMD_SET_VOLUME
EFFECT_CMD_SET_AUDIO_MODE
EFFECT_CMD_SET_CONFIG_REVERSE
EFFECT_CMD_SET_INPUT_DEVICE
EFFECT_CMD_SET_FEATURE_CONFIG
EFFECT_CMD_SET_AUDIO_SOURCE |
IEffect.setParameter |
EFFECT_CMD_GET_PARAM
EFFECT_CMD_GET_CONFIG
EFFECT_CMD_GET_CONFIG_REVERSE
EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
EFFECT_CMD_GET_FEATURE_CONFIG
VISUALIZER_CMD_MEASURE
EFFECT_CMD_FIRST_PROPRIETARY
(مشابه VISUALIZER_CMD_CAPTURE) |
IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
منسوخشده.
در AIDL، جابهجایی بین حالتهای واگذاری و غیرواگذاری در چارچوب مدیریت میشود. |
EFFECT_CMD_DUMP |
توسط تراکنش بایندر داخلی AIBinder_dump انجام شد. |
تعریف پارامترهای جلوه مشترک
| تعریف HIDL (android.hardware.audio.effect@X.X) |
تعریف AIDL |
|---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
تعریف جلوههای خاص
| واسطهای HIDL API (android.hardware.audio.effect@X.X) |
میاناهای AIDL API (android.hardware.audio.effect) |
|---|---|
I$EffectType$.hal |
$EffectType$.aidl |