
Android מספקת מחסנית Bluetooth שמוגדרת כברירת מחדל ותומכת ב-Bluetooth קלאסי וב-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:
איור 1. ארכיטקטורת Bluetooth ב-Android.
- app framework
-
ברמת מסגרת האפליקציה נמצא קוד האפליקציה, שמשתמש בממשקי ה-API
android.bluetooth
כדי ליצור אינטראקציה עם חומרת ה-Bluetooth. באופן פנימי, הקוד הזה מפעיל את תהליך ה-Bluetooth באמצעות מנגנון ה-IPC של Binder. - אפליקציית Bluetooth
-
אפליקציית ה-Bluetooth, שנמצאת ב-
packages/modules/Bluetooth/android/app
, מגיעה כחבילה של אפליקציית Android ומיישמת את פרופילי ה-Bluetooth בשכבת מסגרת Android. האפליקציה הזו קוראת למערך Bluetooth דרך 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 באמצעות שפת Hardware Interface Design (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, ואנחנו מקבלים בברכה הצעות לשיפורים.
ארכיטקטורה של Android מגרסה 7.x ומטה
שירות מערכת Bluetooth מתקשר עם מחסנית Bluetooth באמצעות JNI ועם אפליקציות באמצעות Binder IPC. שירות המערכת מספק למפתחים גישה לפרופילי Bluetooth שונים. הדיאגרמה הזו מציגה את המבנה הכללי של מחסנית Bluetooth:
איור 2. ארכיטקטורת Bluetooth ב-Android מגרסה 7.x ומטה.
- app framework
-
ברמת מסגרת האפליקציה נמצא קוד האפליקציה, שמשתמש בממשקי ה-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
-
שכבת הפשטת החומרה מגדירה את הממשק הסטנדרטי שאליו מתבצעת קריאה בתהליך Bluetooth על ידי ממשקי ה-API של
android.bluetooth, ושצריך להטמיע כדי שהחומרה של Bluetooth תפעל בצורה תקינה. קובץ הכותרת של Bluetooth HAL הוא
hardware/libhardware/include/hardware/bluetooth.h
. בנוסף, כדאי לבדוק את כל הקבצים בתיקייהhardware/libhardware/include/hardware/bt_*.h
. - Bluetooth stack
-
מקבץ ברירת המחדל של Bluetooth מסופק לכם ונמצא ב-
system/bt
. המקבץ מיישם את ה-HAL הגנרי של Bluetooth ומבצע בו התאמה אישית באמצעות תוספים ושינויים בהגדרות. - תוספים של ספקים
- כדי להוסיף תוספים בהתאמה אישית ושכבת HCI למעקב, אפשר ליצור מודול libbt-vendor ולציין את הרכיבים האלה.
הטמעה של HAL
שכבת ה-HAL של Bluetooth נמצאת בתיקייה
/hardware/libhardware/include/hardware/bluetooth.h
. הקובץ bluetooth.h
מכיל את הממשק הבסיסי למערך Bluetooth, וחובה להטמיע את הפונקציות שלו.
קבצים ספציפיים לפרופיל נמצאים באותה ספרייה. פרטים נוספים מופיעים במאמר בנושא הפניה לקובץ HAL.