למסגרת ה-Wi-Fi יש שלוש פלטפורמות HAL של Wi-Fi שמיוצגות על ידי שלושה ממשקים שונים. במכשירים עם Android מגרסה 14 ומעלה, כל שלושת הממשקים זמינים כחבילות AIDL יציבות. בעבר, הממשקים האלה הוגדרו באמצעות HIDL.
- Vendor HAL: ממשק HAL לפקודות ספציפיות ל-Android. קבצי ה-AIDL נמצאים בתיקייה
hardware/interfaces/wifi/aidl
. - Supplicant HAL: שכבת HAL עבור wpa_supplicant. קבצי ה-AIDL נמצאים ב-
hardware/interfaces/wifi/supplicant/aidl
. - Hostapd HAL: משטח HAL ל-hostapd. קבצי ה-AIDL נמצאים ב-
hardware/interfaces/wifi/hostapd/aidl
.
שכבת הפשטת חומרה של ספק
Vendor HAL מספק פקודות ספציפיות ל-Android. הוא אופציונלי (לא נדרש) כדי שמצבי התשתית של תחנת הבסיס (STA) ונקודת הגישה הווירטואלית (SAP) יפעלו. עם זאת, היא חובה בשירותים Wi-Fi Aware ו-Wi-Fi RTT.
ב-Android מגרסה 14 ואילך, ממשק Vendor HAL מוגדר באמצעות AIDL. ב-Android מגרסה 13 ומטה, ממשק Vendor HAL מוגדר באמצעות HIDL.
ב-Android בגרסאות שלפני HIDL (כלומר לפני Android 8.0), נעשה שימוש במנגנון HAL שנקרא עכשיו legacy HAL. קוד המקור של Android מספק כרגע הטמעה של AIDL או HIDL כברירת מחדל, באמצעות shim שפועל על HAL מדור קודם.
הכותרות של HAL מדור קודם נמצאות ב-hardware/libhardware_legacy/include/hardware_legacy/
. הטמעת HAL מדור קודם מבוססת-AIDL נמצאת ב-hardware/interfaces/wifi/aidl/default
, והטמעת HAL מדור קודם מבוססת-HIDL נמצאת ב-hardware/interfaces/wifi/1.x/default
.
Supplicant HAL
ה-HAL של ה-Supplicant מספק ממשק לדימון wpa_supplicant. החל מ-Android 13, הממשק משתמש ב-AIDL להגדרת HAL. בגרסאות קודמות ל-Android 13, ממשקי API ומחיצות של ספקים משתמשים ב-HIDL.
קוד המקור של wpa_supplicant נמצא ב-external/wpa_supplicant_8/wpa_supplicant
. ההטמעה לדוגמה מספקת ממשק AIDL, שמוטמע בספריית המשנה aidl
.
Hostapd HAL
ה-HAL של Hostapd מספק ממשק לדימון hostapd. החל מ-Android 13, הממשק משתמש ב-AIDL להגדרת HAL. בגרסאות קודמות ל-Android 13, ממשקי API ומחיצות של ספקים משתמשים ב-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 מגשר (דו-פס סימולטני) כפריט שילוב מפורש.
הפורמט של מפרט המקבילות הוא גמיש וכללי. הוא יכול לבטא שילובים שעדיין לא נתמכים על ידי המסגרת. כדי להגדיר שילוב מסוים, משתמשים בדגל הבנייה WIFI_HAL_INTERFACE_COMBINATIONS
שנמצא ב-device/<oem>/<device>/BoardConfig-common.mk
.
לדוגמה, מכשיר יכול לתמוך בשתי תחנות STA ובממשק אחד מסוג 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 (מדגמי build מדור קודם). הוראות להגדרה: