Wi-Fi HAL

למסגרת ה-Wi-Fi יש שלוש פלטפורמות HAL של Wi-Fi שמיוצגות על ידי שלושה ממשקים שונים. במכשירים עם Android מגרסה 14 ואילך, כל שלושת הממשקים זמינים כחבילות AIDL יציבות. הממשקים האלה הוגדרו בעבר באמצעות HIDL.

  • HAL של הספק: ממשק HAL לפקודות ספציפיות ל-Android. קובצי ה-AIDL נמצאים בתיקייה hardware/interfaces/aidl וקובצי ה-HIDL נמצאים בתיקייה hardware/interfaces/wifi/1.x.
  • 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 של הספק

ממשק ה-HAL של הספק מספק פקודות ספציפיות ל-Android. הוא אופציונלי (לא נדרש) כדי שהמצבים 'תחנת תשתית (STA)' ו'נקודת גישה תוכנה (SAP)' יפעלו. עם זאת, היא חובה לשירותי Wi-Fi Aware ולשירותי Wi-Fi RTT.

ב-Android 14 ואילך, ממשק ה-HAL של הספק מוגדר באמצעות AIDL. ב-Android מגרסה 13 ומטה, ממשק ה-HAL של הספק מוגדר באמצעות HIDL.

מערכת Android טרום-HIDL (כלומר, לפני Android 8.0) השתמשה במנגנון HAL שנקרא עכשיו HAL מדור קודם. כרגע, קוד המקור של Android מאפשר הטמעת ברירת מחדל של AIDL או HIDL באמצעות ספריית shim שפועלת על גבי 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.

לדוגמה, מכשיר יכול לתמוך בשתי בקשות STA ובממשק אחד מסוג NAN (Wi-Fi Aware) או מסוג P2P (Wi-Fi ישיר) (אבל לא בשניהם). הביטוי הזה מופיע ב-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 (קודמים). להוראות להגדרה: