Bluetooth

סמל HAL של Bluetooth ב-Android

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:

הארכיטקטורה של Bluetooth ב-Android
איור 1. הארכיטקטורה של Bluetooth ב-Android
מסגרת אפליקציה
ברמת מסגרת האפליקציה נמצא קוד האפליקציה, שמשתמש בממשקי ה-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:

הארכיטקטורה של Bluetooth ב-Android
איור 2. ארכיטקטורת Bluetooth ב-Android מגרסה 7.x ומטה
מסגרת אפליקציה
ברמת מסגרת האפליקציה נמצא קוד האפליקציה, שמשתמש בממשקי ה-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.