بلوتوث

نماد بلوتوث HAL اندروید

اندروید یک پشته بلوتوث پیش‌فرض ارائه می‌کند که از بلوتوث کلاسیک و بلوتوث کم انرژی پشتیبانی می‌کند. با استفاده از بلوتوث، دستگاه‌های Android می‌توانند شبکه‌های منطقه‌ای شخصی برای ارسال و دریافت داده‌ها با دستگاه‌های بلوتوث نزدیک ایجاد کنند.

در اندروید 4.3 و بالاتر، پشته بلوتوث اندروید توانایی اجرای بلوتوث کم انرژی (BLE) را فراهم می کند. برای استفاده کامل از APIهای BLE، الزامات Android Bluetooth HCI را دنبال کنید. دستگاه‌های اندرویدی با چیپست واجد شرایط می‌توانند بلوتوث کلاسیک یا بلوتوث کلاسیک و BLE را پیاده‌سازی کنند. BLE با چیپست های بلوتوث قدیمی سازگار نیست.

در Android 8.0، پشته بلوتوث بومی کاملاً برای بلوتوث 5 واجد شرایط است. برای استفاده از ویژگی‌های بلوتوث 5 موجود، دستگاه باید دارای یک چیپست واجد شرایط بلوتوث 5 باشد.

معماری اندروید

یک برنامه بلوتوث از طریق Binder با فرآیند بلوتوث ارتباط برقرار می کند. فرآیند بلوتوث از JNI برای برقراری ارتباط با پشته بلوتوث استفاده می کند و به توسعه دهندگان امکان دسترسی به پروفایل های مختلف بلوتوث را می دهد. این نمودار ساختار کلی پشته بلوتوث را نشان می دهد:

معماری بلوتوث اندروید
شکل 1. معماری بلوتوث اندروید
چارچوب برنامه
در سطح چارچوب برنامه، کد برنامه قرار دارد که از API های android.bluetooth برای تعامل با سخت افزار بلوتوث استفاده می کند. در داخل، این کد فرآیند بلوتوث را از طریق مکانیزم Binder IPC فراخوانی می کند.
برنامه بلوتوث
برنامه بلوتوث، واقع در packages/modules/Bluetooth/android/app ، به عنوان یک برنامه اندروید بسته بندی شده است و پروفایل های بلوتوث را در لایه چارچوب اندروید پیاده سازی می کند. این برنامه از طریق JNI به پشته بلوتوث بومی فراخوانی می کند.
JNI
کد JNI مرتبط با android.bluetooth در packages/modules/Bluetooth/android/app/jni قرار دارد. کد JNI هنگامی که عملیات بلوتوث خاصی رخ می دهد، مانند زمانی که دستگاه ها کشف می شوند، به پشته بلوتوث فراخوانی می شود.
پشته بلوتوث
پشته بلوتوث پیش‌فرض در AOSP ارائه شده است و در packages/modules/Bluetooth/system قرار دارد. پشته HAL بلوتوث عمومی را پیاده سازی می کند و آن را با برنامه های افزودنی و تغییرات پیکربندی سفارشی می کند.
پیاده سازی فروشنده
دستگاه های فروشنده با استفاده از زبان طراحی رابط سخت افزاری (HIDL) با پشته بلوتوث تعامل دارند.

HIDL

HIDL رابط بین پشته بلوتوث و پیاده سازی فروشنده را تعریف می کند. برای تولید فایل های بلوتوث HIDL، فایل های رابط بلوتوث را به ابزار تولید HIDL منتقل کنید. فایل های رابط در hardware/interfaces/bluetooth قرار دارند.

توسعه پشته بلوتوث

پشته بلوتوث Android یک پشته بلوتوث کاملاً واجد شرایط است. لیست صلاحیت در وب سایت Bluetooth SIG تحت QDID 169365 قرار دارد.

پشته بلوتوث هسته در packages/modules/Bluetooth قرار دارد. توسعه در AOSP اتفاق می‌افتد و از مشارکت‌ها استقبال می‌شود.

اندروید 7.x و معماری قبلی

یک سرویس سیستم بلوتوث با پشته بلوتوث از طریق JNI و با برنامه ها از طریق Binder IPC ارتباط برقرار می کند. سرویس سیستم به توسعه دهندگان امکان دسترسی به پروفایل های مختلف بلوتوث را می دهد. این نمودار ساختار کلی پشته بلوتوث را نشان می دهد:

معماری بلوتوث اندروید
شکل 2. اندروید 7.x و معماری بلوتوث قبلی
چارچوب برنامه
در سطح چارچوب برنامه، کد برنامه قرار دارد که از API های android.bluetooth برای تعامل با سخت افزار بلوتوث استفاده می کند. در داخل، این کد فرآیند بلوتوث را از طریق مکانیزم Binder IPC فراخوانی می کند.
خدمات سیستم بلوتوث
سرویس سیستم بلوتوث، واقع در packages/apps/Bluetooth ، به‌عنوان یک برنامه اندروید بسته‌بندی شده است و سرویس بلوتوث و پروفایل‌ها را در لایه چارچوب Android پیاده‌سازی می‌کند. این برنامه از طریق JNI به لایه HAL فراخوانی می کند.
JNI
کد JNI مرتبط با android.bluetooth در packages/apps/Bluetooth/jni قرار دارد. کد JNI با لایه HAL تماس می گیرد و زمانی که عملیات بلوتوث خاصی رخ می دهد، مانند زمانی که دستگاه ها کشف می شوند، از HAL تماس دریافت می کند.
HAL
لایه انتزاعی سخت افزار، رابط استانداردی را تعریف می کند که API های android.bluetooth و فرآیند بلوتوث به آن فراخوانی می کنند و باید آن را پیاده سازی کنید تا سخت افزار بلوتوث خود به درستی کار کند. فایل هدر برای HAL بلوتوث hardware/libhardware/include/hardware/bluetooth.h است. علاوه بر این، همه فایل‌های hardware/libhardware/include/hardware/bt_*.h را مرور کنید.
پشته بلوتوث
پشته بلوتوث پیش فرض برای شما ارائه شده است و در system/bt قرار دارد. پشته HAL بلوتوث عمومی را پیاده سازی می کند و آن را با برنامه های افزودنی و تغییرات پیکربندی سفارشی می کند.
پسوند فروشنده
برای افزودن پسوندهای سفارشی و یک لایه HCI برای ردیابی، می‌توانید یک ماژول libbt-vendor ایجاد کنید و این مؤلفه‌ها را مشخص کنید.

اجرای HAL

HAL بلوتوث در /hardware/libhardware/include/hardware/bluetooth.h قرار دارد. فایل bluetooth.h شامل رابط اصلی برای پشته بلوتوث است و شما باید عملکردهای آن را پیاده سازی کنید.

فایل های مخصوص نمایه در همان دایرکتوری قرار دارند. برای جزئیات، به مرجع فایل HAL مراجعه کنید.