Bluetooth

סמל Android Bluetooth HAL

אנדרואיד מספקת ערימת Bluetooth ברירת מחדל התומכת גם ב-Bluetooth Classic וגם ב-Bluetooth Low Energy. באמצעות Bluetooth, מכשירי אנדרואיד יכולים ליצור רשתות אזוריות אישיות כדי לשלוח ולקבל נתונים עם מכשירי Bluetooth קרובים.

באנדרואיד 4.3 ואילך, ערימת ה-Android Bluetooth מספקת את היכולת ליישם Bluetooth Low Energy (BLE). כדי למנף את ממשקי ה-API של BLE, פעל לפי דרישות Android Bluetooth HCI . מכשירי אנדרואיד עם ערכת שבבים מוסמכת יכולים ליישם גם Bluetooth קלאסי או גם Bluetooth קלאסי וגם BLE. BLE אינו תואם לאחור עם ערכות שבבי Bluetooth ישנות יותר.

באנדרואיד 8.0, ערימת ה-Bluetooth המקורית מתאימה לחלוטין ל-Bluetooth 5. כדי להשתמש בתכונות הזמינות של Bluetooth 5, ההתקן צריך להיות בעל ערכת שבבים מוסמכת ל-Bluetooth 5.

ארכיטקטורת אנדרואיד

אפליקציית Bluetooth מתקשרת עם תהליך ה-Bluetooth באמצעות Binder. תהליך ה-Bluetooth משתמש ב-JNI כדי לתקשר עם ערימת ה-Bluetooth ומספק למפתחים גישה לפרופילי Bluetooth שונים. תרשים זה מציג את המבנה הכללי של ערימת ה-Bluetooth:

ארכיטקטורת Bluetooth של אנדרואיד
איור 1. ארכיטקטורת Bluetooth של אנדרואיד
מסגרת יישום
ברמת מסגרת היישום נמצא קוד יישום, המשתמש בממשקי ה-API של android.bluetooth כדי ליצור אינטראקציה עם חומרת ה-Bluetooth. באופן פנימי, קוד זה קורא לתהליך ה-Bluetooth באמצעות מנגנון Binder IPC.
אפליקציית בלוטות'
אפליקציית ה-Bluetooth, הממוקמת packages/modules/Bluetooth/android/app , ארוזה כאפליקציית אנדרואיד ומיישמת את פרופילי ה-Bluetooth בשכבת ה-framework של אנדרואיד. אפליקציה זו מתקשרת לערימת ה-Bluetooth המקורית דרך JNI.
JNI
קוד JNI המשויך ל-android.bluetooth נמצא packages/modules/Bluetooth/android/app/jni . קוד JNI מתקשר לערימת ה-Bluetooth כאשר מתרחשות פעולות מסוימות של Bluetooth, כגון כאשר מתגלים מכשירים.
ערימת בלוטות'
מחסנית ה-Bluetooth המוגדרת כברירת מחדל מסופקת ב-AOSP וממוקמת packages/modules/Bluetooth/system . המחסנית מיישמת את ה-Bluetooth HAL הגנרית ומתאימה אותו אישית עם הרחבות ושינויי תצורה.
יישום ספק
התקני הספק מקיימים אינטראקציה עם ערימת ה-Bluetooth באמצעות שפת עיצוב ממשק החומרה (HIDL).

HIDL

HIDL מגדיר את הממשק בין מחסנית ה-Bluetooth לבין יישום הספק. כדי ליצור את קבצי ה-Bluetooth HIDL, העבירו את קבצי ממשק ה-Bluetooth לכלי יצירת HIDL. קבצי הממשק ממוקמים בחומרה hardware/interfaces/bluetooth .

פיתוח ערימת בלוטות'

ערימת Bluetooth של אנדרואיד היא ערימת Bluetooth מוסמכת לחלוטין. רישום ההסמכה נמצא באתר Bluetooth SIG תחת QDID 169365 .

מחסנית ה-Bluetooth הליבה נמצאת packages/modules/Bluetooth . הפיתוח מתרחש ב-AOSP, ותרומות יתקבלו בברכה.

ארכיטקטורת אנדרואיד 7.x ומעלה

שירות מערכת בלוטות' מתקשר עם ערימת ה-Bluetooth דרך JNI ועם יישומים דרך Binder IPC. שירות המערכת מספק למפתחים גישה לפרופילי בלוטות' שונים. תרשים זה מציג את המבנה הכללי של ערימת ה-Bluetooth:

ארכיטקטורת Bluetooth של אנדרואיד
איור 2. ארכיטקטורת Bluetooth 7.x ומעלה
מסגרת יישום
ברמת מסגרת היישום נמצא קוד יישום, המשתמש בממשקי ה-API של android.bluetooth כדי ליצור אינטראקציה עם חומרת ה-Bluetooth. באופן פנימי, קוד זה קורא לתהליך ה-Bluetooth באמצעות מנגנון Binder IPC.
שירות מערכת בלוטות'
שירות מערכת ה-Bluetooth, הממוקם packages/apps/Bluetooth , ארוז כאפליקציית אנדרואיד ומיישם את שירות ה-Bluetooth והפרופילים בשכבת ה-framework של אנדרואיד. אפליקציה זו מתקשרת לשכבת HAL דרך JNI.
JNI
קוד JNI המשויך ל- android.bluetooth נמצא packages/apps/Bluetooth/jni . קוד JNI מתקשר לשכבת HAL ומקבל התקשרות חוזרת מה-HAL כאשר מתרחשות פעולות מסוימות של בלוטות', כגון כאשר מתגלים מכשירים.
HAL
שכבת הפשטת החומרה מגדירה את הממשק הסטנדרטי שאליו מתקשרים ממשקי ה-API של android.bluetooth ותהליך ה-Bluetooth ושאתה חייב ליישם כדי שחומרת ה-Bluetooth שלך תפעל כהלכה. קובץ הכותרת של ה-Bluetooth HAL הוא hardware/libhardware/include/hardware/bluetooth.h . בנוסף, סקור את כל קבצי hardware/libhardware/include/hardware/bt_*.h
ערימת בלוטות'
ערימת ה-Bluetooth המוגדרת כברירת מחדל מסופקת עבורך וממוקמת ב- system/bt . המחסנית מיישמת את ה-Bluetooth HAL הגנרית ומתאימה אותו אישית עם הרחבות ושינויי תצורה.
הרחבות ספקים
כדי להוסיף הרחבות מותאמות אישית ושכבת HCI למעקב, אתה יכול ליצור מודול libt-ספק ולציין רכיבים אלה.

יישום ה-HAL

ה-Bluetooth HAL ממוקם ב- /hardware/libhardware/include/hardware/bluetooth.h . הקובץ bluetooth.h מכיל את הממשק הבסיסי עבור מחסנית ה-Bluetooth, ועליכם ליישם את הפונקציות שלו.

קבצים ספציפיים לפרופיל ממוקמים באותה ספרייה. לפרטים, עיין בהפניה לקובץ HAL .