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.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.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