بدءًا من Android 14، ننصح الشركاء ومورّدي شرائح المعالجة المتكاملة باستبدال تنفيذ HIDL HAL الحالي بتنفيذ AIDL HAL.
لتسهيل الانتقال السلس من HIDL Audio HAL إلى AIDL Audio HAL، تم تسليط الضوء على بعض الاختلافات الرئيسية في هذه الصفحة. تعرض هذه الصفحة أيضًا التعيين بين واجهات AIDL وHIDL لملف IDE لأجل 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.تم استبدال
IPrimaryDevice
في AIDL Audio. يتم إرسال التعديلات المتعلقة بوضع الصوت الحالي وتدوير الشاشة إلى كل مثيلIModule
. يتم التعامل مع المَعلمات المتعلّقة بالاتصال المتزامن عبر البلوتوث (BT SCO) والملف الشخصي بدون لمس الجهاز (HFP) من خلال واجهةIBluetooth
مخصَّصة. توفّر واجهةITelephony
المخصّصة عناصر تحكّم خاصة بإجراءات الاتصال الهاتفي. يمكن استرداد نُسخ من كلتا الواجهات من النسخة الأساسية لواجهةIModule
. اطّلِع على جداول المقارنة حول HAL الأساسية والوظائف ذات الصلة بالميزات للحصول على مزيد من المعلومات.تتم إزالة
IDevicesFactory
في AIDL Audio HAL لتجنُّب التكرار. يتم الآن تسجيل وحدات HAL (أي، مثيلات واجهةIModule
) مباشرةً مع "مدير الخدمات" باستخدام أسمائها لأسماء المثيلات، مثلbluetooth
أوr_submix
. الاستثناء الوحيد هو وحدةprimary
التي يتم تسجيلها تحت اسم المثيلdefault
.
ربط HAL لكل من AIDL وHIDL Audio
تعرض الجداول في الأقسام التالية عملية الربط بين واجهات HIDL وAIDL Audio HAL. راجِع ملف README الخاص بواجهة برمجة التطبيقات Audio HAL لمزيد من المعلومات عن بنية الدليل.
طبقة تجريد الأجهزة (HAL) الأساسية
تقع جميع واجهات HIDL ضمن حزمة android.hardware.audio@N.M
، حيث يشيرN.M
إلى الإصدار Major.Minor. تتوفّر جميع واجهات AIDL ضمن حزمة
android.hardware.audio.core
.
واجهات HIDL API وملفات الإعداد | واجهات برمجة التطبيقات 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 API وعناصر ملفات الضبط | طرق واجهة برمجة التطبيقات 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 API | طرق واجهة واجهة برمجة تطبيقات 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 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
من ملف الضبط لأنّه لا يتم استخدام عنصر الضبط هذا داخل النظام. يجب أن تكون ميزة DRC مفعّلة على جميع الأجهزة. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
الوظائف ذات الصلة بالميزات
طرق واجهة HIDL API | واجهة AIDL API |
---|---|
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 API | التعليقات |
---|---|
IDevice.initCheck IDevice.close |
تنشر وحدة HAL نفسها مع ServiceManager فقط عند إتمام الإعداد بنجاح. وفي هذه الحالة، يُعتبر الطلب نهائيًا
ولا يمكن إغلاقه. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
يجب أن تتوفّر إمكانية استخدام الرموز البرمجية الإضافية وإيقاف البث مؤقتًا واستئنافه وإيقاف الجهاز نهائيًا. |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
قديم |
إضافات المورّدين
في واجهة برمجة التطبيقات HIDL، يتم تنفيذ إضافات المورّدين باستخدام الطريقة getParameters
أو
setParameters
من الواجهتين IDevice
وIStream
. تقبل هذه methods سلاسل عشوائية.
في واجهة برمجة التطبيقات AIDL، هناك طرق مقابلة، مثل getVendorParameters
أو setVendorParameters
، التي تأخذ نُسخًا عشوائية من Parcelable
باستخدام
التضمين ضمن ParcelableHolders
.
تغييرات أخرى
في ما يلي التغييرات العامة الأخرى:
لتحسين إمكانية اختبار واجهات برمجة التطبيقات HAL، في إصدار AIDL، لدينا خيارات تصحيح الأخطاء التي تستخدمها اختبارات VTS والتي تتوفّر من خلال
ModuleDebug
parcelable. تُوجّه هذه الخيارات 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 API وملفات الإعداد | واجهات واجهة برمجة التطبيقات AIDL |
---|---|
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 باستخدام مَعلمة UUID |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
واجهات التأثيرات
واجهات HIDL API (android.hardware.audio.effect@X.X) |
واجهات واجهة برمجة التطبيقات AIDL (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 (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) |
تعريف لغة تعريف واجهة نظام Android (AIDL) |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
تعريف التأثيرات المحدّدة
واجهات HIDL API (android.hardware.audio.effect@X.X) |
واجهات واجهة برمجة التطبيقات AIDL (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |