אנדרואיד מספקת ערימת 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:
- מסגרת יישום
- ברמת מסגרת היישום נמצא קוד יישום, המשתמש בממשקי ה-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:
- מסגרת יישום
- ברמת מסגרת היישום נמצא קוד יישום, המשתמש בממשקי ה-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 .