บลูทูธ

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

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

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

ใน Android 8.0 สแต็กบลูทูธแบบเนทีฟจะรองรับบลูทูธ 5 อย่างเต็มรูปแบบ หากต้องการใช้ฟีเจอร์บลูทูธ 5 ที่พร้อมใช้งาน อุปกรณ์จะต้องมีชิปเซ็ตที่ผ่านการรับรองบลูทูธ 5

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

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

สถาปัตยกรรมบลูทูธของ Android
รูปที่ 1 สถาปัตยกรรมบลูทูธของ Android
เฟรมเวิร์กแอป
ที่ระดับเฟรมเวิร์กแอปคือโค้ดแอป ซึ่งใช้ android.bluetooth API เพื่อโต้ตอบกับฮาร์ดแวร์บลูทูธ โค้ดนี้จะเรียกใช้กระบวนการบลูทูธผ่านกลไก IPC ของ Binder ภายใน
แอปบลูทูธ
แอปบลูทูธที่อยู่ใน packages/modules/Bluetooth/android/app ได้รับการบรรจุเป็นแอป Android และใช้โปรไฟล์บลูทูธที่เลเยอร์เฟรมเวิร์ก Android แอปนี้เรียกใช้สแต็กบลูทูธแบบเนทีฟผ่าน 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 และเรายินดีรับการมีส่วนร่วม

สถาปัตยกรรม Android 7.x และต่ำกว่า

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

สถาปัตยกรรมบลูทูธของ Android
รูปที่ 2 สถาปัตยกรรมบลูทูธของ Android 7.x และต่ำกว่า
เฟรมเวิร์กแอป
ที่ระดับเฟรมเวิร์กแอปคือโค้ดแอป ซึ่งใช้ android.bluetooth API เพื่อโต้ตอบกับฮาร์ดแวร์บลูทูธ โค้ดนี้จะเรียกใช้กระบวนการบลูทูธผ่านกลไก IPC ของ Binder ภายใน
บริการระบบบลูทูธ
บริการระบบบลูทูธที่อยู่ใน 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