Wi-Fi HAL

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

שכבת הפשטת חומרה של ספק

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

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

לפני HIDL (כלומר, לפני Android 8.0), מערכת Android השתמשה במנגנון HAL שנקרא legacy 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

ה-HAL של בקשת האימות מספק ממשק לדימון wpa_supplicant. החל מ-Android 13, הממשק משתמש ב-AIDL להגדרת HAL. בגרסאות קודמות ל-Android 13, ממשקי API ומחיצות ספקים משתמשים ב-HIDL.

קוד המקור של wpa_supplicant נמצא ב-external/wpa_supplicant_8/wpa_supplicant. הטמעה לדוגמה מספקת ממשק AIDL, שמוטמע בספריית המשנה aidl.

Hostapd HAL

‫Hostapd HAL מספק ממשק לדימון 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 מגשר (דו-פס סימולטני) כפריט שילוב מפורש.

פורמט המפרט של הבו-זמניות (concurrency) הוא גמיש וכללי, והוא יכול לבטא שילובים שעדיין לא נתמכים על ידי ה-framework. כדי להגדיר שילוב מסוים, משתמשים בדגל WIFI_HAL_INTERFACE_COMBINATIONS build. הדגל נמצא ב-device/<oem>/<device>/BoardConfig-common.mk.

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