למסגרת ה-Wi-Fi יש שלושה משטחי HAL של Wi-Fi שמיוצגים על ידי שלושה ממשקים שונים. במכשירים עם Android מגרסה 14 ואילך, כל שלושת הממשקים זמינים בחבילות AIDL יציבות. ממשקי ה-HAL האלה הוגדרו בעבר באמצעות HIDL.
- HAL של ספק: ממשק HAL לפקודות ספציפיות ל-Android. קובצי ה-AIDL נמצאים בתיקייה
hardware/interfaces/aidl
וקובצי ה-HIDL נמצאים בתיקייהhardware/interfaces/wifi/1.x
. - Supplicant HAL: ממשק HAL ל-wpa_supplicant. קובצי ה-AIDL נמצאים בתיקייה
hardware/interfaces/supplicant/aidl
וקובצי ה-HIDL נמצאים בתיקייהhardware/interfaces/supplicant/1.x
. - Hostapd HAL: ממשק HAL ל-hostapd. קובצי ה-AIDL נמצאים בתיקייה
hardware/interfaces/hostapd/aidl
וקובצי ה-HIDL נמצאים בתיקייהhardware/interfaces/hostapd/1.x
.
HAL של הספק
Vendor HAL מספק פקודות ספציפיות ל-Android. זהו רכיב אופציונלי (לא חובה) שמאפשר את הפעולה של המצבים 'תחנת תשתית (STA)' ו'נקודת גישה תוכנה (SAP)'. עם זאת, היא חובה לשירותי Wi-Fi Aware ולשירותי Wi-Fi RTT.
ב-Android מגרסה 14 ואילך, ממשק ה-HAL של הספק מוגדר באמצעות AIDL. ב-Android מגרסה 13 ומטה, ממשק ה-HAL של הספק מוגדר באמצעות HIDL.
לפני HIDL (כלומר לפני Android 8.0), מערכת Android השתמשה במנגנון HAL שנקרא עכשיו HAL מדור קודם. קוד המקור של Android מספק כרגע הטמעה שמוגדרת כברירת מחדל של AIDL או HIDL באמצעות תוסף שמריץ מעל HAL הקודם.
כותרות ה-HAL מדור קודם נמצאות ב-hardware/libhardware_legacy/include/hardware_legacy/
. ההטמעה המבוססת על HAL מדור קודם נמצאת ב-hardware/interfaces/wifi/aidl/default
עבור AIDL וב-hardware/interfaces/wifi/1.x/default
עבור HIDL.
Supplicant HAL
Supplicant HAL מספק ממשק לדימון (daemon) wpa_supplicant. החל מ-Android 13, הממשק משתמש ב-AIDL להגדרת ה-HAL. בגרסאות לפני Android 13, ממשקים ומחיצות של ספקים משתמשים ב-HIDL.
קוד המקור של wpa_supplicant נמצא ב-external/wpa_supplicant_8/wpa_supplicant
. הטמעת העזרה מספקת ממשק AIDL, שמוטמע בספריית המשנה aidl
.
Hostapd HAL
Hostapd HAL מספק ממשק לדימון (daemon) hostapd. החל מ-Android 13, הממשק משתמש ב-AIDL להגדרת ה-HAL. בגרסאות לפני Android 13, ממשקים ומחיצות של ספקים משתמשים ב-HIDL.
קוד המקור של hostapd נמצא ב-external/wpa_supplicant_8/hostapd
.
הטמעת העזרה מספקת ממשק AIDL, שמוטמע בספריית המשנה aidl
.
בו-זמניות במספר ממשקים של Wi-Fi
מכשירי Android שונים יכולים לתמוך בו-זמנית בשילובים שונים של ממשקי Wi-Fi. השילובים הנתמכים מוגדרים ב-HAL וחשופים למסגרת. פורמט המפרט מוגדר ב-hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl
עבור AIDL Wi-Fi HAL, ב-android/hardware/interfaces/wifi/1.6/IWifiChip.hal
עבור Wi-Fi HAL 1.6 וב-android/hardware/interfaces/wifi/1.0/IWifiChip.hal
עבור Wi-Fi HAL 1.5 וגרסאות ישנות יותר.
ב-AIDL HAL, שזמין ב-Android 14 ואילך, וב-Wi-Fi HAL בגרסה 1.6, שזמין ב-Android 13, נוספה האפשרות לציין ממשק AP שמקושר (תדר כפול בו-זמנית) כפריט שילוב מפורש.
הפורמט של מפרט התזמון הוא גמיש וגנרלי. הוא יכול לבטא שילובים שעדיין לא נתמכים במסגרת. כדי להגדיר שילוב מסוים, משתמשים בדגל ה-build WIFI_HAL_INTERFACE_COMBINATIONS
שנמצא ב-device/<oem>/<device>/BoardConfig-common.mk
.
לדוגמה, מכשיר יכול לתמוך בשני STAs ובממשק אחד מסוג NAN (Wi-Fi Aware) או מסוג P2P (Wi-Fi Direct) (אבל לא בשניהם). הביטוי הזה מופיע ב-device/<oem>/<device>/BoardConfig-common.mk
בתור:
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}
דוגמה נוספת היא מכשיר שתומך ב-STA עם נקודת AP אחת, או נקודת AP במצב גשר (תדרים כפולים בו-זמנית) ללא ממשקים אחרים. הביטוי הזה מיוצג בתור:
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}
לחלופין, ב-HAL לדוגמה יש הגדרות למספר שילובים שאפשר להפעיל באמצעות דגלי build (קודמים). להוראות להגדרה: