
Android มีสแต็กบลูทูธเริ่มต้นที่รองรับทั้งบลูทูธคลาสสิกและบลูทูธพลังงานต่ำ อุปกรณ์ Android ใช้บลูทูธเพื่อสร้างเครือข่ายส่วนบุคคลเพื่อส่งและ รับข้อมูลกับอุปกรณ์บลูทูธที่อยู่ใกล้เคียง
ใน Android 4.3 ขึ้นไป สแต็กบลูทูธของ Android จะช่วยให้สามารถใช้ บลูทูธพลังงานต่ำ (BLE) ได้ หากต้องการใช้ BLE API อย่างเต็มรูปแบบ ให้ทำตาม ข้อกำหนด HCI ของบลูทูธใน Android อุปกรณ์ Android ที่มีชิปเซ็ตที่ผ่านการรับรองสามารถใช้บลูทูธแบบคลาสสิกหรือทั้งบลูทูธแบบคลาสสิกและ BLE ได้ BLE ไม่สามารถใช้งานร่วมกับชิปเซ็ตบลูทูธรุ่นเก่าได้
ใน Android 8.0 สแต็กบลูทูธมีคุณสมบัติครบถ้วนสำหรับบลูทูธ 5 หากต้องการใช้ฟีเจอร์บลูทูธ 5 ที่มี อุปกรณ์ต้องมีชิปเซ็ตที่ผ่านการรับรองบลูทูธ 5
สถาปัตยกรรม Android
แอปบลูทูธจะสื่อสารกับกระบวนการบลูทูธผ่าน Binder กระบวนการบลูทูธ ใช้ JNI เพื่อสื่อสารกับสแต็กบลูทูธ และให้สิทธิ์นักพัฒนาแอปเข้าถึง โปรไฟล์บลูทูธต่างๆ แผนภาพนี้แสดงโครงสร้างทั่วไปของสแต็ก Bluetooth
รูปที่ 1 สถาปัตยกรรมบลูทูธของ Android
- เฟรมเวิร์กแอป
-
ที่ระดับเฟรมเวิร์กของแอปคือโค้ดของแอป ซึ่งใช้
android.bluetooth
API เพื่อโต้ตอบกับฮาร์ดแวร์บลูทูธ ภายใน โค้ดนี้จะเรียกใช้กระบวนการ Bluetooth ผ่านกลไก Binder IPC - แอปบลูทูธ
-
แอปบลูทูธซึ่งอยู่ใน
packages/modules/Bluetooth/android/app
จะได้รับการแพ็กเกจเป็นแอป Android และใช้โปรไฟล์บลูทูธที่เลเยอร์เฟรมเวิร์ก Android แอปนี้จะเรียกใช้สแต็กบลูทูธผ่าน JNI - JNI
-
โค้ด JNI ที่เชื่อมโยงกับ android.bluetooth อยู่ใน
packages/modules/Bluetooth/android/app/jni
โค้ด JNI จะเรียกใช้สแต็กบลูทูธเมื่อมีการดำเนินการบลูทูธบางอย่าง เช่น เมื่อมีการค้นพบอุปกรณ์ - สแต็กบลูทูธ
-
สแต็ก Bluetooth เริ่มต้นมีอยู่ใน AOSP และอยู่ใน
packages/modules/Bluetooth/system
สแต็กจะใช้ HAL บลูทูธทั่วไป และปรับแต่งด้วยส่วนขยายและการเปลี่ยนแปลงการกำหนดค่า - การติดตั้งใช้งานของผู้ให้บริการ
- อุปกรณ์ของผู้ให้บริการจะโต้ตอบกับสแต็กบลูทูธโดยใช้ Hardware Interface Design Language (HIDL)
HIDL
HIDL กำหนดอินเทอร์เฟซระหว่าง
สแต็ก Bluetooth กับการติดตั้งของผู้ให้บริการ หากต้องการสร้างไฟล์ HIDL ของบลูทูธ ให้ส่ง
ไฟล์อินเทอร์เฟซบลูทูธไปยังเครื่องมือสร้าง HIDL ไฟล์อินเทอร์เฟซจะอยู่ใน
hardware/interfaces/bluetooth
การพัฒนาสแต็กบลูทูธ
สแต็กบลูทูธของ Android เป็นสแต็กบลูทูธที่สมบูรณ์ในตัวเอง รายการการรับรองจะอยู่ใน เว็บไซต์ของ Bluetooth SIG ในส่วน QDID 169365
สแต็กบลูทูธหลักอยู่ใน
packages/modules/Bluetooth
การพัฒนาเกิดขึ้นใน AOSP และเรายินดีรับการมีส่วนร่วม
สถาปัตยกรรมของ Android 7.x และต่ำกว่า
บริการระบบบลูทูธจะสื่อสารกับสแต็กบลูทูธผ่าน JNI และกับแอปผ่าน Binder IPC บริการของระบบช่วยให้นักพัฒนาแอปเข้าถึงโปรไฟล์บลูทูธต่างๆ ได้ แผนภาพนี้แสดงโครงสร้างทั่วไปของสแต็กบลูทูธ
รูปที่ 2 สถาปัตยกรรมบลูทูธของ Android 7.x และต่ำกว่า
- เฟรมเวิร์กแอป
-
ที่ระดับเฟรมเวิร์กของแอปคือโค้ดของแอป ซึ่งใช้
android.bluetooth
API เพื่อโต้ตอบกับฮาร์ดแวร์บลูทูธ ภายใน โค้ดนี้จะเรียกใช้กระบวนการ Bluetooth ผ่านกลไก Binder IPC - บริการของระบบบลูทูธ
-
บริการระบบบลูทูธซึ่งอยู่ใน
packages/apps/Bluetooth
จะได้รับการแพ็กเกจ เป็นแอป Android และใช้บริการและโปรไฟล์บลูทูธที่เลเยอร์เฟรมเวิร์ก Android แอปนี้เรียกใช้เลเยอร์ HAL ผ่าน JNI - JNI
-
โค้ด JNI ที่เชื่อมโยงกับ
android.bluetooth
อยู่ใน
packages/apps/Bluetooth/jni
โค้ด JNI จะเรียกเลเยอร์ HAL และรับการเรียกกลับจาก HAL เมื่อมีการดำเนินการบลูทูธบางอย่าง เช่น เมื่อค้นพบอุปกรณ์ - HAL
-
เลเยอร์การแยกฮาร์ดแวร์กำหนดอินเทอร์เฟซมาตรฐานที่
android.bluetooth
API และกระบวนการบลูทูธเรียกใช้ และคุณต้องใช้เพื่อให้ฮาร์ดแวร์บลูทูธทำงานได้อย่างถูกต้อง ไฟล์ส่วนหัวของ 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