บลูทูธ

ไอคอน Android บลูทูธ HAL

Android มีสแต็กบลูทูธเริ่มต้นที่รองรับทั้งบลูทูธแบบคลาสสิกและบลูทูธพลังงานต่ำ การใช้บลูทูธ อุปกรณ์ Android สามารถสร้างเครือข่ายพื้นที่ส่วนบุคคลเพื่อส่งและรับข้อมูลด้วยอุปกรณ์บลูทูธที่อยู่ใกล้เคียง

ใน Android 4.3 และใหม่กว่า สแต็ก Bluetooth ของ Android มอบความสามารถในการใช้งาน Bluetooth Low Energy (BLE) หากต้องการใช้ประโยชน์จาก BLE API อย่างเต็มที่ ให้ปฏิบัติตาม ข้อกำหนด Android Bluetooth HCI อุปกรณ์ Android ที่มีชิปเซ็ตที่ผ่านการรับรองสามารถใช้ Classic Bluetooth หรือทั้ง Classic Bluetooth และ BLE ได้ BLE ไม่สามารถใช้งานร่วมกับชิปเซ็ต Bluetooth รุ่นเก่าได้

ใน Android 8.0 Bluetooth Stack ดั้งเดิมมีคุณสมบัติครบถ้วนสำหรับ Bluetooth 5 หากต้องการใช้คุณสมบัติ Bluetooth 5 ที่มีให้ อุปกรณ์จะต้องมีชิปเซ็ตที่มีคุณสมบัติ Bluetooth 5

สถาปัตยกรรม Android

แอปพลิเคชัน Bluetooth สื่อสารกับกระบวนการ Bluetooth ผ่าน Binder กระบวนการ Bluetooth ใช้ JNI เพื่อสื่อสารกับสแต็ก Bluetooth และช่วยให้นักพัฒนาสามารถเข้าถึงโปรไฟล์ Bluetooth ต่างๆ แผนภาพนี้แสดงโครงสร้างทั่วไปของสแต็ก Bluetooth:

สถาปัตยกรรมบลูทูธ Android
รูปที่ 1 สถาปัตยกรรม Android Bluetooth
กรอบการใช้งาน
ที่ระดับเฟรมเวิร์กแอปพลิเคชันคือโค้ดแอปพลิเคชัน ซึ่งใช้ android.bluetooth API เพื่อโต้ตอบกับฮาร์ดแวร์ Bluetooth ภายใน โค้ดนี้จะเรียกกระบวนการ Bluetooth ผ่านกลไก Binder IPC
แอปพลิเคชั่นบลูทูธ
แอปพลิเคชัน Bluetooth ซึ่งอยู่ใน packages/modules/Bluetooth/android/app ได้รับการบรรจุเป็นแอป Android และใช้โปรไฟล์ Bluetooth ที่เลเยอร์เฟรมเวิร์ก Android แอปนี้เรียกเข้าสู่สแต็ก Bluetooth ดั้งเดิมผ่าน JNI
เจเอ็นไอ
รหัส JNI ที่เกี่ยวข้องกับ android.bluetooth อยู่ใน packages/modules/Bluetooth/android/app/jni รหัส JNI จะเรียกใช้สแต็ก Bluetooth เมื่อการทำงานของ Bluetooth บางอย่างเกิดขึ้น เช่น เมื่อค้นพบอุปกรณ์
สแต็คบลูทูธ
สแตก Bluetooth เริ่มต้นมีให้ใน AOSP และอยู่ใน packages/modules/Bluetooth/system สแต็กใช้ Bluetooth HAL ทั่วไปและปรับแต่งด้วยส่วนขยายและการเปลี่ยนแปลงการกำหนดค่า
การดำเนินการของผู้ขาย
อุปกรณ์ของผู้จำหน่ายโต้ตอบกับสแต็ค Bluetooth โดยใช้ภาษาการออกแบบอินเทอร์เฟซฮาร์ดแวร์ (HIDL)

เอชดีแอล

HIDL กำหนดอินเทอร์เฟซระหว่างสแต็ก Bluetooth และการใช้งานของผู้ขาย หากต้องการสร้างไฟล์ Bluetooth HIDL ให้ส่งไฟล์อินเทอร์เฟซ Bluetooth ไปยังเครื่องมือสร้าง HIDL ไฟล์อินเทอร์เฟซอยู่ใน hardware/interfaces/bluetooth

การพัฒนาสแต็คบลูทูธ

สแตก Bluetooth ของ Android คือสแต็ก Bluetooth ที่มีคุณสมบัติครบถ้วน รายการคุณสมบัติอยู่ในเว็บไซต์ Bluetooth SIG ภายใต้ QDID 169365

สแต็ก Bluetooth หลักอยู่ใน packages/modules/Bluetooth การพัฒนาเกิดขึ้นใน AOSP และยินดีต้อนรับการมีส่วนร่วม

Android 7.x และสถาปัตยกรรมรุ่นก่อนหน้า

บริการระบบ Bluetooth สื่อสารกับสแต็ค Bluetooth ผ่าน JNI และกับแอปพลิเคชันผ่าน Binder IPC บริการของระบบช่วยให้นักพัฒนาสามารถเข้าถึงโปรไฟล์ Bluetooth ต่างๆ ได้ แผนภาพนี้แสดงโครงสร้างทั่วไปของสแต็ก Bluetooth:

สถาปัตยกรรมบลูทูธ Android
รูปที่ 2 สถาปัตยกรรม Android 7.x และบลูทูธรุ่นก่อนหน้า
กรอบการใช้งาน
ที่ระดับเฟรมเวิร์กแอปพลิเคชันคือโค้ดแอปพลิเคชัน ซึ่งใช้ android.bluetooth API เพื่อโต้ตอบกับฮาร์ดแวร์ Bluetooth ภายใน โค้ดนี้จะเรียกกระบวนการ Bluetooth ผ่านกลไก Binder IPC
บริการระบบบลูทูธ
บริการระบบ Bluetooth ซึ่งอยู่ใน packages/apps/Bluetooth ได้รับการบรรจุเป็นแอป Android และใช้บริการและโปรไฟล์ Bluetooth ที่เลเยอร์เฟรมเวิร์ก Android แอปนี้เรียกเข้าสู่เลเยอร์ HAL ผ่าน JNI
เจเอ็นไอ
รหัส JNI ที่เกี่ยวข้องกับ android.bluetooth อยู่ใน packages/apps/Bluetooth/jni รหัส JNI เรียกเข้าสู่เลเยอร์ HAL และรับการเรียกกลับจาก HAL เมื่อการทำงานของ Bluetooth บางอย่างเกิดขึ้น เช่น เมื่อค้นพบอุปกรณ์
ฮาล
เลเยอร์นามธรรมของฮาร์ดแวร์กำหนดอินเทอร์เฟซมาตรฐานที่ android.bluetooth API และกระบวนการ Bluetooth เรียกใช้ และคุณต้องนำไปใช้เพื่อให้ฮาร์ดแวร์ Bluetooth ของคุณทำงานได้อย่างถูกต้อง ไฟล์ส่วนหัวสำหรับ Bluetooth HAL คือ hardware/libhardware/include/hardware/bluetooth.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 Stack และคุณต้องใช้ฟังก์ชันต่างๆ ของไฟล์

ไฟล์เฉพาะโปรไฟล์จะอยู่ในไดเร็กทอรีเดียวกัน สำหรับรายละเอียด โปรดดู การอ้างอิงไฟล์ HAL