
Android מספק סטאק Bluetooth שמוגדר כברירת מחדל ותומך גם ב-Bluetooth Classic וגם ב-Bluetooth עם צריכת אנרגיה נמוכה. באמצעות Bluetooth, מכשירי Android יכולים ליצור רשתות אזור אישיות כדי לשלוח ולקבל נתונים עם מכשירי Bluetooth בקרבת מקום.
ב-Android 4.3 ואילך, סטאק ה-Bluetooth של Android מאפשר להטמיע Bluetooth עם צריכת אנרגיה נמוכה (BLE). כדי לנצל את ממשקי ה-API של BLE במלואם, צריך לפעול לפי הדרישות של Android Bluetooth HCI. מכשירי Android עם שבב מתאים יכולים ליישם Bluetooth קלאסי או גם Bluetooth קלאסי וגם BLE. BLE לא תואם לאחור לכרטיסי שבבים ישנים יותר של Bluetooth.
ב-Android 8.0, סטאק ה-Bluetooth המקורי עומד בדרישות המלאות של Bluetooth 5. כדי להשתמש בתכונות הזמינות של Bluetooth 5, למכשיר צריך להיות צ'יפסט עם אישור ל-Bluetooth 5.
הארכיטקטורה של Android
אפליקציית Bluetooth מתקשרת עם תהליך ה-Bluetooth דרך Binder. התהליך של Bluetooth משתמש ב-JNI כדי לתקשר עם סטאק Bluetooth, ומספק למפתחים גישה לפרופילים שונים של Bluetooth. בתרשים הזה מוצג המבנה הכללי של סטאק Bluetooth:

- מסגרת אפליקציה
- ברמת מסגרת האפליקציה נמצא קוד האפליקציה, שמשתמש בממשקי ה-API של android.bluetooth כדי לקיים אינטראקציה עם חומרת ה-Bluetooth. באופן פנימי, הקוד הזה קורא לתהליך Bluetooth דרך מנגנון ה-IPC של Binder.
- אפליקציית Bluetooth
-
אפליקציית ה-Bluetooth, שנמצאת ב-
packages/modules/Bluetooth/android/app
, נארזת כאפליקציית Android ומטמיעה את פרופילי ה-Bluetooth בשכבת המסגרת של Android. האפליקציה הזו קוראת ל-JNI כדי להפעיל את סטאק ה-Bluetooth המקורי. - JNI
-
קוד ה-JNI שמשויך ל-android.bluetooth נמצא ב-
packages/modules/Bluetooth/android/app/jni
. קוד ה-JNI מבצע קריאה ל-Bluetooth stack כשמתרחשות פעולות מסוימות ב-Bluetooth, למשל כשמתגלים מכשירים. - מקבץ Bluetooth
-
סטאק ברירת המחדל של Bluetooth מסופק ב-AOSP וממוקם ב-
packages/modules/Bluetooth/system
. במקבץ מוטמעת ה-HAL הגנרית של Bluetooth, והוא מותאם אישית באמצעות תוספים ושינויים בהגדרות. - הטמעה של הספק
- מכשירים של ספקים יוצרים אינטראקציה עם סטאק ה-Bluetooth באמצעות שפת תכנון ממשק החומרה (HIDL).
HIDL
HIDL מגדיר את הממשק בין סטאק ה-Bluetooth להטמעה של הספק. כדי ליצור את קובצי ה-HIDL של Bluetooth, מעבירים את קובצי הממשק של Bluetooth לכלי ליצירת HIDL. קובצי הממשק נמצאים ב-hardware/interfaces/bluetooth
.
פיתוח של סטאק Bluetooth
מקבץ ה-Bluetooth של Android הוא מקבץ Bluetooth מוסמך במלואו. רשימת ההסמכות מופיעה באתר של Bluetooth SIG בקטע QDID 169365.
סטאק הליבה של Bluetooth נמצא ב-
packages/modules/Bluetooth
. הפיתוח מתבצע ב-AOSP, ומומלץ לשלוח הצעות קוד.
ארכיטקטורה של Android מגרסה 7.x ומטה
שירות מערכת Bluetooth מתקשר עם סטאק ה-Bluetooth דרך JNI, ועם אפליקציות דרך Binder IPC. שירות המערכת מספק למפתחים גישה למגוון פרופילים של Bluetooth. בתרשים הזה מוצג המבנה הכללי של סטאק ה-Bluetooth:

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