بلوتوث

رمز Android Bluetooth HAL

يوفر Android حزمة Bluetooth افتراضية تدعم كلاً من Classic Bluetooth و Bluetooth Low Energy. باستخدام Bluetooth ، يمكن لأجهزة Android إنشاء شبكات منطقة شخصية لإرسال البيانات واستلامها باستخدام أجهزة Bluetooth القريبة.

في Android 4.3 والإصدارات الأحدث ، توفر مكدس Android Bluetooth القدرة على تنفيذ Bluetooth Low Energy (BLE). للاستفادة الكاملة من واجهات برمجة تطبيقات BLE ، اتبع متطلبات Android Bluetooth HCI . يمكن لأجهزة Android المزودة بمجموعة شرائح مؤهلة تنفيذ إما Classic Bluetooth أو كلاسيك Bluetooth و BLE. لا يتوافق BLE مع شرائح البلوتوث القديمة.

في Android 8.0 ، تكون حزمة Bluetooth الأصلية مؤهلة تمامًا لـ Bluetooth 5. لاستخدام ميزات Bluetooth 5 المتاحة ، يحتاج الجهاز إلى مجموعة شرائح مؤهلة لـ Bluetooth 5.

هندسة Android

يتواصل تطبيق Bluetooth مع عملية Bluetooth من خلال Binder. تستخدم عملية Bluetooth JNI للتواصل مع مكدس Bluetooth وتزويد المطورين بإمكانية الوصول إلى ملفات تعريف Bluetooth المختلفة. يوضح هذا الرسم التخطيطي الهيكل العام لمكدس البلوتوث:

هندسة Android Bluetooth
الشكل 1. هندسة Android Bluetooth
إطار تطبيق
على مستوى إطار التطبيق ، يوجد رمز التطبيق ، والذي يستخدم واجهات برمجة التطبيقات android.bluetooth للتفاعل مع أجهزة Bluetooth. داخليًا ، يستدعي هذا الرمز عملية Bluetooth من خلال آلية Binder IPC.
خدمة نظام البلوتوث
يتم تجميع خدمة نظام Bluetooth ، الموجودة في packages/apps/Bluetooth ، كتطبيق Android وتنفذ خدمات Bluetooth وملفات التعريف في طبقة إطار عمل Android. يستدعي هذا التطبيق مكدس Bluetooth الأصلي عبر JNI.
JNI
يوجد كود JNI المرتبط بـ android.bluetooth في packages/apps/Bluetooth/jni . يستدعي رمز JNI مكدس Bluetooth عند حدوث عمليات Bluetooth معينة ، مثل اكتشاف الأجهزة.
حزمة بلوتوث
يتم توفير مكدس Bluetooth الافتراضي في AOSP ويقع في system/bt . يقوم المكدس بتنفيذ Bluetooth HAL العام وتخصيصه بالامتدادات وتغييرات التكوين.
تنفيذ البائع
تتفاعل أجهزة البائع مع مكدس Bluetooth باستخدام لغة تصميم واجهة الأجهزة (HIDL).

HIDL

يحدد HIDL الواجهة بين مكدس Bluetooth وتنفيذ البائع. لإنشاء ملفات Bluetooth HIDL ، قم بتمرير ملفات واجهة Bluetooth إلى أداة إنشاء HIDL. توجد ملفات الواجهة في hardware/interfaces/bluetooth .

تطوير مكدس البلوتوث

مكدس Android Bluetooth عبارة عن مكدس Bluetooth مؤهل بالكامل. قائمة المؤهلات موجودة على موقع Bluetooth SIG على الويب تحت QDID 169365 .

مكدس البلوتوث الأساسي موجود في system/bt . يحدث التطوير في AOSP ، والمساهمات مرحب بها.

Android 7.x والبنية الأقدم

تتواصل خدمة نظام Bluetooth مع مكدس Bluetooth من خلال JNI ومع التطبيقات من خلال Binder IPC. توفر خدمة النظام للمطورين إمكانية الوصول إلى ملفات تعريف Bluetooth المتنوعة. يوضح هذا الرسم التخطيطي الهيكل العام لمكدس البلوتوث:

هندسة Android Bluetooth
الشكل 2. Android 7.x وهندسة البلوتوث الأقدم
إطار تطبيق
على مستوى إطار التطبيق ، يوجد رمز التطبيق ، والذي يستخدم واجهات برمجة التطبيقات android.bluetooth للتفاعل مع أجهزة Bluetooth. داخليًا ، يستدعي هذا الرمز عملية Bluetooth من خلال آلية Binder IPC.
خدمة نظام البلوتوث
يتم تجميع خدمة نظام Bluetooth ، الموجودة في packages/apps/Bluetooth ، كتطبيق Android وتنفذ خدمة Bluetooth وملفات التعريف في طبقة إطار عمل Android. يستدعي هذا التطبيق طبقة HAL عبر JNI.
JNI
يوجد كود JNI المرتبط بـ android.bluetooth في packages/apps/Bluetooth/jni . يستدعي رمز JNI طبقة HAL ويستقبل عمليات الاسترجاعات من HAL عند حدوث عمليات Bluetooth معينة ، مثل اكتشاف الأجهزة.
هال
تحدد طبقة تجريد الأجهزة الواجهة القياسية التيتستدعيها واجهات برمجةتطبيقات android.bluetooth وعملية Bluetooth والتي يجب عليك تنفيذها للحصول على وظيفة أجهزة Bluetooth الخاصة بك بشكل صحيح. ملف الرأس الخاص بـ Bluetooth HAL هو hardware/libhardware/include/hardware/bluetooth.h . بالإضافة إلى ذلك ، hardware/libhardware/include/hardware/bt_*.h جميع ملفات hardware/libhardware/include/hardware/bt_*.h .
حزمة بلوتوث
يتم توفير مكدس Bluetooth الافتراضي لك وهو موجود في system/bt . يقوم المكدس بتنفيذ Bluetooth HAL العام وتخصيصه بالامتدادات وتغييرات التكوين.
امتدادات البائعين
لإضافة امتدادات مخصصة وطبقة HCI للتتبع ، يمكنك إنشاء وحدة libbt-vendor وتحديد هذه المكونات.

تنفيذ HAL

يوجد Bluetooth HAL في /hardware/libhardware/include/hardware/bluetooth.h . يحتوي ملف bluetooth.h على الواجهة الأساسية لمكدس Bluetooth ويجب عليك تنفيذ وظائفه.

توجد الملفات الخاصة بملف التعريف في نفس الدليل. للحصول على التفاصيل ، راجع مرجع ملف HAL .