في الإصدار 13 من نظام التشغيل Android والإصدارات الأقدم، يتم تحديد واجهة Audio HAL باستخدام HIDL في ملفات HIDL HAL (مع الامتداد .hal) ومخططات XSD لملفات الإعداد، كما هو موضّح أدناه.
الشكل 1: واجهة Audio HAL
ملفات الإعداد
تُعد ملفات إعداد XML الخاصة بسياسة الصوت وتأثيرات الصوت جزءًا من واجهة Audio HIDL HAL. يجب أن تتوافق هذه الملفات مع مخططاتها، ويتم التحقّق من التوافق من خلال اختبارات VTS.
كجزء من تنفيذ طبقة تجريد الأجهزة (HAL) الخاصة بالصوت في لغة تعريف واجهة HIDL، يجب إنشاء
ملف إعدادات سياسة الصوت
يصف بنية الصوت. يجب الإعلان عن إمكانات Audio HAL في ملف audio_policy_configuration.xml لكي يستخدمها إطار العمل.
واجهة برمجة تطبيقات Audio HIDL HAL
يصف هذا القسم واجهات برمجة التطبيقات Core وEffects وCommon HAL الخاصة بلغة HIDL.
Core HAL
في ما يلي بعض الواجهات الرئيسية لطبقة تجريد الأجهزة (HAL) الأساسية، باستخدام HIDL:
-
IDeviceFactory.halهي نقطة الدخول إلى واجهة برمجة التطبيقات. - يحتوي
IDevice.halوIPrimaryDevice.halعلى طرق مثلsetMasterVolumeأوopenInputStream. - تكون عمليات البث أحادية الاتجاه، ويستخدمها AudioFlinger لإرسال الصوت واستلامه من طبقة HAL عبر
IStream.halوIStreamOut.halوIStreamIn.hal.
يسرد الجدول التالي موقع المكوّنات المفيدة لواجهة HIDL الخاصة بطبقة تجريد الأجهزة (HAL) الأساسية:
| مكوّن HAL الأساسي | الموقع الجغرافي |
|---|---|
| أحدث إصدار من واجهة برمجة التطبيقات | /hardware/interfaces/audio/6.0
|
| الأنواع الخاصة بأحدث واجهة Core HAL API | /hardware/interfaces/audio/6.0/types.hal
|
| مخطط XSD لملف إعداد سياسة الصوت | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd
|
إنّ التنفيذ التلقائي لواجهة Core HAL API (/hardware/interfaces/audio/core/all-versions/default/) هو برنامج تضمين حول تنفيذ HAL السابق لإصدار Treble باستخدام المكتبات المشتركة القديمة.
يمكن أيضًا اعتبار عملية التنفيذ التلقائية مرجعًا عند تنفيذ إصدارات جديدة من طبقات تجريد الأجهزة الصوتية (HAL) التي تتفاعل مع برامج تشغيل النواة مباشرةً.
طبقة تجريد الأجهزة الخاصة بالتأثيرات
يسرد الجدول التالي موقع مكوّنات Effects HAL المفيدة باستخدام HIDL:
| مكوّن HAL الخاص بالمؤثرات | الموقع الجغرافي |
|---|---|
| أحدث إصدار من واجهة برمجة التطبيقات | /hardware/interfaces/audio/effect/6.0/
|
| مخطط XSD لملف إعداد التأثير | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
لمزيد من المعلومات، راجِع نموذجًا لتنفيذ واجهة برمجة التطبيقات Effects HAL على /hardware/interfaces/audio/effect/all-versions/default/ وقسم تأثيرات الصوت.
Common HAL
تحتوي واجهة برمجة التطبيقات Common HAL API التي تستخدم HIDL على ما يلي:
- التعريفات (
/hardware/interfaces/audio/common/6.0/types.hal) المشترَكة بين واجهتَي Core API وEffect API - أدوات مساعدة (
/hardware/interfaces/audio/common/all-versions) تُستخدَم للمساعدة في كتابة الرموز البرمجية لواجهات برمجة تطبيقات HIDL من أجل عمليات التنفيذ والبرامج والعملاء والاختبارات.
تعديلات على الإصدار 7 من طبقة تجريد الأجهزة الصوتية
تتضمّن الإصدار 7 من طبقة تجريد الأجهزة (HAL) الخاصة بالصوت في Android 12 تغييرات مهمة موضّحة في هذا القسم. تنفيذ ما يلي في الإصدار 7 من طبقة تجريد الأجهزة (HAL) الخاصة بالصوت:
- توحيد نماذج البيانات التي يستخدمها إطار العمل وطبقة HAL
- يقلّل من الازدواجية بين أنواع بيانات HIDL (التعدادات) ومخطط XML المستخدَم في إعداد سياسة الصوت.
على وجه التحديد، تم إجراء تغييرات في المجالات التالية في الإصدار 7 من طبقة تجريد الأجهزة الصوتية:
تتم مناقشة هذه التغييرات بمزيد من التفصيل في الأقسام المعنية.
التعدادات
بدءًا من الإصدار 7 من طبقة تجريد الأجهزة الصوتية (HAL)، يتم تحديد الأنواع المُعدّدة المستخدَمة في ملف إعدادات سياسة الصوت في مخطّط XSD فقط وليس في HIDL.
في الإصدار 6 من Audio HAL، يتم أيضًا تحديد قيم أنواع التعداد (مثل AudioFormat) في types.hal في مخطط XSD لملف إعداد سياسة الصوت، ما يؤدي إلى تكرار. ولتجنُّب ذلك في الإصدار 7، تم تغيير أنواع التعداد إلى string وتم إدراج جميع قيم التعداد الممكنة في مخطط XSD بدلاً من ذلك.
يقارن الشكل 2 بعض التغييرات التي تم إجراؤها على نوع التعداد AudioFormat في الإصدار 7:
الشكل 2: مقارنة بين بعض التغييرات التي تم إجراؤها على تعداد AudioFormat
راجِع القائمة التالية لمعرفة أنواع التعداد التي تم تحويلها إلى string:
AudioChannelMaskAudioContentType-
AudioDevice: قابل للتوسيع من قِبل المورّد -
AudioFormat: المورّد قابل للتوسيع AudioGainModeAudioSourceAudioStreamTypeAudioUsage
إرسال قيم تعداد السلسلة
تُستخدَم قيم السلسلة لنقل المعلومات كقيم تعدادية عبر حدود واجهة HAL. يستخدم كلّ من إطار العمل وبرنامج تضمين HAL قيم تعداد عدد صحيح لتنفيذ منطق النشاط التجاري، ويستخدمان أسلوب التحويل الموضّح في الشكل 3:
الشكل 3: تمرير قيم تعداد السلسلة
على سبيل المثال، لتمرير قيمة نوع تنسيق الصوت من إطار العمل إلى المورّد، اتّبِع الخطوات التالية:
- يتم تحويل قيمة التعداد
AudioFormatإلى قيمة سلسلة فيlibaudiohalويتم تمريرها إلى طبقة تجريد الأجهزة (HAL). - من جهة طبقة تجريد الأجهزة (HAL)، يحوّل برنامج التغليف التلقائي السلسلة إلى قيمة تعدادية يتم تمريرها إلى طبقة تجريد الأجهزة القديمة.
تغييرات مخطط XML
إنّ توفُّر قوائم كاملة بقيم التعداد في تعريف مخطّط XML (XSD) يتيح لـ VTS إجراء عملية تدقيق أفضل لملف XML الخاص بإعدادات سياسة الصوت. أجرينا تغييرات في ملف إعدادات سياسة الصوت المستخدَم مع HAL V7 ليتوافق مع XSD.
في الإصدار 7، يتم استخدام الحرف ␣ (مسافة) العادي لتحديد قوائم القيم في السمات (مثل معدّلات أخذ العيّنات وأقنعة القنوات والعلامات)، بدلاً من الرمزين , (فاصلة) و| (خط عمودي) المستخدَمَين في الإصدار 6 والإصدارات الأقدم. كما هو موضّح في المثال التالي، يتم استخدام مسافة للفصل بين القيم في قائمة channelMasks:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
لإجراء تغييرات على الرموز، استخدِم نصًا برمجيًا للتحويل التلقائي يُسمى
update_audio_policy_config.sh. اطّلِع على الأمر التالي لتحويل ملف إعداد سياسة الصوت V6 إلى إصدار V7 لجهاز Pixel 5 (Redfin):
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
أنواع البيانات
أعدنا تعريف بعض هياكل البيانات في الإصدار 7 للحدّ من التعريفات المكرّرة. يتم تجميع الصفوف المتكررة من عناصر البيانات معًا في بنى قابلة لإعادة الاستخدام. تستخدم بنى البيانات هذه أحدث ميزات HIDL، مثل الاتحادات الآمنة.
على سبيل المثال، في الإصدار 6 والإصدارات الأقدم، يتم استخدام ثلاثة أضعاف <format, sampling rate, channel mask>
في واجهات HIDL وأنواعها. لإزالة هذا التكرار، يتم في الإصدار 7 تعريف AudioConfigBaseنوع البيانات وأنواع البيانات الأخرى على النحو التالي:
AudioConfigBase := <format, sampling rate, channel mask>AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>يتم استخدامها من قِبل
AudioConfigوAudioOffloadInfoوAudioPortConfigAudioProfile := <format, {sampling rates}, {channel masks}>يحلّ محلّ المجموعات غير المنظَّمة في
AudioPort/PortConfigAudioPortExtendedInfo := device | mix | sessionيحلّ محلّ الاتحادات في
AudioPort/PortConfig
علامات المورّدين
بالإضافة إلى أنواع الأجهزة وتنسيقاتها، يمكن للمورّدين إضافة علامات مخصّصة للبيانات الوصفية الخاصة بمقاطع الصوت.
بالنسبة إلى البيانات الوصفية لمسار التشغيل والتسجيل، يمكن للمورّدين تمرير علاماتهم الخاصة، والتي تُستخدَم لإضافة سمات إلى تدفقات إدخال/إخراج الصوت، من التطبيقات إلى طبقة تجريد الأجهزة (HAL).
تتم إضافة علامات المورِّد لبيانات وصفية لمسار التشغيل كما هو موضّح في المثال التالي:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
يتم تنفيذ بنية RecordTrackMetadata بطريقة مشابهة من خلال إضافة علامات خاصة ببيانات وصفية لمقطع التسجيل.
تحديد نطاق أسماء إضافات المورّدين
بدءًا من الإصدار 7 من طبقة تجريد الأجهزة (HAL)، تتطلّب إضافات المورّد بادئة {vendor} إضافية
غير مطلوبة في الإصدار 6. لكي يكون البادئة {vendor} صالحة، يجب أن تتألف من ثلاثة أحرف أبجدية رقمية أو أكثر.
استخدِم التنسيق التالي في الإصدار 7:
VX_{vendor}_{letters/numbers}
في ما يلي بعض الأمثلة على إضافات المورّدين الصالحة في الإصدار 7:
VX_GOOGLE_VRVX_QCI_AMBIENT_MIC
معلومات الإصدار
يسرد الجدول التالي رقم إصدار HAL لكل إصدار من إصدارات Android:
| إصدار Android | إصدار HIDL HAL |
|---|---|
| Android 13 | 7.1 |
| Android 12 | 7 |
| Android 11 | 6.0 |
| Android 10 | 5.0 |
| Android 9 | 4.0 |
| Android 8 | 2.0 |