Bluetooth

סמל של Android Bluetooth HAL

‫Android מספקת מחסנית Bluetooth שמוגדרת כברירת מחדל ותומכת גם ב-Bluetooth קלאסי וגם ב-Bluetooth עם צריכת אנרגיה נמוכה (BLE). באמצעות Bluetooth, מכשירי Android יכולים ליצור רשתות אזור אישיות כדי לשלוח ולקבל נתונים עם מכשירי Bluetooth בקרבת מקום.

ב-Android מגרסה 4.3 ואילך, מחסנית ה-Bluetooth של Android מספקת את היכולת להטמיע 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 משתמש ב-Java Native Interface ‏ (JNI) כדי לתקשר עם מחסנית ה-Bluetooth, ומספק למפתחים גישה לפרופילי Bluetooth שונים. הדיאגרמה הזו מציגה את המבנה הכללי של מחסנית Bluetooth:

דיאגרמה שמציגה את השכבות של מחסנית Bluetooth ב-Android.

איור 1. ארכיטקטורת Bluetooth ב-Android.

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

HIDL

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

פיתוח של Bluetooth stack

מקבץ הפיצ'רים של Bluetooth ב-Android הוא מקבץ פיצ'רים מלא של Bluetooth. רשימת ההסמכות מופיעה באתר Bluetooth SIG (נדרשת כניסה) בקטע QDID 169365.

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