Wi-Fi HAL

למסגרת ה-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 (קודמים). להוראות להגדרה: