بدءًا من Android 14، ننصح الشركاء ومورّدي شرائح النظام على الرقاقة (SoC) باستبدال عملية التنفيذ الحالية لطبقة تجريد الأجهزة (HAL) المستندة إلى لغة تعريف واجهة HIDL بعملية تنفيذ لطبقة تجريد الأجهزة (HAL) المستندة إلى لغة تعريف واجهة AIDL.
لتسهيل الانتقال السلس من HIDL Audio HAL إلى AIDL Audio HAL، تم توضيح بعض الاختلافات الرئيسية في هذه الصفحة. تعرض هذه الصفحة أيضًا عملية الربط بين واجهات AIDL وHIDL الخاصة بطبقة تجريد الأجهزة (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.يتم استبدال
IPrimaryDevice
في AIDL Audio HAL. يتم إرسال التحديثات المتعلقة بوضع الصوت الحالي وتدوير الشاشة إلى كل مثيل منIModule
. تتم معالجة المَعلمات ذات الصلة باتصال البلوتوث المتزامن الموجّه (BT SCO) وملف تعريف بدون لمس الجهاز (HFP) من خلال واجهةIBluetooth
مخصّصة. توفّر واجهةITelephony
عناصر تحكّم خاصة بالهاتف. يمكن استرداد مثيلات كلتا الواجهتين من المثيل الأساسي لواجهةIModule
. لمزيد من المعلومات، راجِع جداول المقارنة في Core HAL والوظائف ذات الصلة بالميزات.تتم إزالة
IDevicesFactory
في AIDL Audio HAL لتجنُّب التكرار. يتم الآن تسجيل وحدات HAL (أي مثيلات واجهةIModule
) مباشرةً في "مدير الخدمات" باستخدام أسمائها كأسماء مثيلات، مثلbluetooth
أوr_submix
. الاستثناء الوحيد هو الوحدةprimary
التي يتم تسجيلها ضمن اسم المثيلdefault
.
ربط واجهات AIDL وHIDL Audio HAL
تعرض الجداول في الأقسام التالية عملية الربط بين واجهات HIDL وAIDL Audio HAL. راجِع ملف README الخاص بطبقة تجريد الأجهزة الصوتية للحصول على مزيد من المعلومات عن بنية الدليل.
Core HAL
تتوفّر جميع واجهات HIDL ضمن الحزمة android.hardware.audio@N.M
، حيث يشير N.M
إلى الإصدار Major.Minor. تتوفّر جميع واجهات AIDL ضمن حزمة android.hardware.audio.core
.
واجهات برمجة التطبيقات وملفات الإعداد في HIDL | واجهات AIDL API |
---|---|
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
IStream.start IStream.stop |
StreamDescriptor.Command.pause .start
.start .drain |
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 | طُرق واجهة برمجة التطبيقات 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 | واجهة برمجة تطبيقات AIDL |
---|---|
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.setGain IStreamIn.setMicrophoneDirection IStreamIn.setMicrophoneFieldDimension |
IStreamIn.setHwGain IStreamIn.setMicrophoneDirection IStreamIn.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.initCheck IDevice.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 لمحاكاة وظائف معيّنة (مثل توصيل الأجهزة الخارجية)، والتي تتطلّب عادةً تدخّلاً يدويًا واستخدام معدّات اختبار خارجية.يجب إعادة تشغيل خدمات HAL عندما يتم ضبط قيمة سمة النظام
sys.audio.restart.hal
على1
. تتم إعادة التشغيل من خلالaudioserver.rc
. أثناء تنفيذ طبقة تجريد الأجهزة (HAL)، استخدِم اسم خدمة HAL المناسب المُدرَج في ملفaudioserver.rc
. في نظام التشغيل Android 14، تتم إضافة الاسمvendor.audio-hal-aidl
خصيصًا لإصدار AIDL من HAL.
طبقة تجريد الأجهزة (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 |
Effect Factory
واجهات HIDL API (android.hardware.audio.effect@X.X) |
واجهات AIDL API (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects مع مَعلمة UUID فارغة |
IEffectsFactory.getDescriptor |
IFactory.queryEffects مع مَعلمة المعرّف الفريد العالمي |
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 |
يتم الربط بـ IEffect.command أو IEffect.setParameter أو IEffect.getParameter استنادًا إلى نوع أمر HIDL القديم.
|
لا ينطبق | 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 |
يتم التعامل معها من خلال معاملة binder المضمّنة 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 |