بدءًا من نظام التشغيل Android 14، الشركاء ومورّدو المنظومة على الرقاقة (SoC) يُنصح باستبدال عملية تنفيذ HIDL HAL الحالية بترخيص AIDL HAL. التنفيذ.
لتسهيل الانتقال السلس من 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
في دالة HAL الأساسية.في HAL لتأثيرات الصوت المستندة إلى AIDL، تم نقل منطق
effectProxy
المحدد في ملفات XML في HIDL Effects HAL إلى إطار عمل الصوت. يطلب إطار عمل الصوت جميع حالات التأثير في الذي يستخدمIFactory.queryEffects
، وجميع عمليات معالجة التأثيرات باستخدامIFactory.queryProcessing
لتجنُّب حدوث أي التباس مع استخدام مصطلح device لأنواع الأجهزة السماعية، تمت إعادة تسمية
IDevice
في HIDL Audio HAL إلىIModule
في AIDL Audio HAL.تم استبدال
IPrimaryDevice
في AIDL Audio. إشعارات حول المحتوى الصوتي الحالي يتم إرسال الوضع وتدوير الشاشة إلى كل مثيلIModule
. المَعلمات معلومات حول الاتصال المتزامن عبر البلوتوث (BT SCO) وميزة "بدون استخدام اليدين" يتعامل مع الملف الشخصي (HFP) من خلالIBluetooth
مخصَّص. من واجهة pyplot. واجهةITelephony
مخصصة توفّر الاتصالات الهاتفية والتحكم المستمر. ويمكن استرداد أمثلة كلتا الواجهتين من المثيل الأساسي لواجهةIModule
. اطّلِع على جداول المقارنة على تقنية HAL الأساسية الوظائف المتعلّقة بالميزات لمزيد من المعلومات.تتم إزالة
IDevicesFactory
في AIDL Audio HAL لتجنُّب التكرار. طبقة تجريد الأجهزة (HAL) تم الآن تسجيل الوحدات (أيIModule
مثيل للواجهة) مباشرةً. مع مدير الخدمة باستخدام أسمائه، مثل أسماء المثيلات، مثلbluetooth
أوr_submix
. الاستثناء الوحيد هو الوحدةprimary
التي يتم تسجيلها تحت اسم المثيلdefault
.
ربط HAL لكل من AIDL وHIDL Audio
تُظهِر الجداول في الأقسام التالية التعيين بين HIDL وAIDL. واجهات HAL الصوتية. عرض ملف Audio HAL README لمزيد من المعلومات عن بنية الدليل.
طبقة تجريد الأجهزة (HAL) الأساسية
تتوفّر جميع واجهات HIDL ضمن حزمة "android.hardware.audio@N.M
"، حيث يكون
تشير السمة N.M
إلى الإصدار Major.Minor. تقع جميع واجهات AIDL ضمن
حزمة android.hardware.audio.core
واجهات HIDL API وملفات الإعداد | واجهات 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 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.<a href="#fnref1" rev="footnote"> </a href="#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
هذه
تقبل السلاسل العشوائية.
في 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 API وملفات الإعداد | واجهات 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 تحتوي على مَعلمة 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 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 القديمة
Command
|
لا ينطبق | 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 |
تم إيقافها في قائمة HAL AIDL للتأثيرات |
EFFECT_CMD_SET_PARAM_COMMIT |
تم إيقافها في قائمة HAL AIDL للتأثيرات |
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 |