Interfejs HAL sieci Wi-Fi

Struktura Wi-Fi ma 3 platformy HAL Wi-Fi reprezentowane przez 3 różne interfejsy. W przypadku urządzeń z Androidem 14 lub nowszym wszystkie 3 interfejsy są dostępne jako stabilne pakiety Android Interface Definition Language (AIDL). Te interfejsy były wcześniej zdefiniowane za pomocą języka HIDL (Hardware Interface Definition Language).

Interfejs HAL dostawcy

Warstwa HAL dostawcy udostępnia polecenia specyficzne dla Androida. Jest to opcjonalne (nie jest wymagane) w przypadku trybów infrastruktury STA i SAP. Jest to jednak obowiązkowe w przypadku usług Wi-Fi AwareWi-Fi RTT.

W Androidzie 14 i nowszych interfejs HAL dostawcy jest zdefiniowany za pomocą AIDL. W Androidzie 13 i starszych wersjach interfejs HAL dostawcy jest zdefiniowany za pomocą HIDL.

W systemie Android w wersji wcześniejszej niż 8.0 (czyli przed wprowadzeniem HIDL) używano mechanizmu HAL o nazwie starszy HAL. Kod źródłowy Androida zawiera domyślną implementację AIDL lub HIDL. Ta implementacja korzysta z warstwy shim działającej na starszej warstwie HAL.

Starsze nagłówki HAL znajdują się w folderze hardware/libhardware_legacy/include/hardware_legacy/. Starsza implementacja oparta na HAL znajduje się w hardware/interfaces/wifi/aidl/default w przypadku AIDL i hardware/interfaces/wifi/1.x/default w przypadku HIDL.

Supplicant HAL

Warstwa HAL klienta zapewnia interfejs dla demona wpa_supplicant. Od Androida 13 interfejs używa AIDL do definiowania HAL. W przypadku wersji starszych niż Android 13 interfejsy i partycje dostawców korzystają z HIDL.

Kod źródłowy wpa_supplicant znajduje się w katalogu external/wpa_supplicant_8/wpa_supplicant. Implementacja referencyjna udostępnia interfejs AIDL, który jest zaimplementowany w podkatalogu aidl.

Hostapd HAL

Hostapd HAL udostępnia interfejs dla demona hostapd. Od Androida 13 interfejs używa AIDL do definiowania HAL. W przypadku wersji starszych niż Android 13 interfejsy i partycje dostawców korzystają z HIDL.

Kod źródłowy hostapd znajduje się w external/wpa_supplicant_8/hostapd. Implementacja referencyjna udostępnia interfejs AIDL, który jest zaimplementowany w podkatalogu aidl.

Współbieżność wielu interfejsów Wi-Fi

Różne urządzenia z Androidem mogą obsługiwać różne kombinacje interfejsów Wi-Fi jednocześnie. Obsługiwane kombinacje są zdefiniowane w HAL i udostępniane platformie. Format specyfikacji jest zdefiniowany w tych dokumentach: hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl w przypadku AIDL Wi-Fi HAL, android/hardware/interfaces/wifi/1.6/IWifiChip.hal w przypadku Wi-Fi HAL 1.6 i android/hardware/interfaces/wifi/1.0/IWifiChip.hal w przypadku Wi-Fi HAL 1.5 i starszych.

Interfejs HAL AIDL, dostępny w Androidzie 14 i nowszych, oraz interfejs HAL Wi-Fi w wersji 1.6, dostępny w Androidzie 13, umożliwiają określenie interfejsu połączonego punktu dostępu (dwupasmowego jednoczesnego) jako elementu kombinacji.

Format specyfikacji współbieżności jest elastyczny i ogólny. Może wyrażać kombinacje, które nie są jeszcze obsługiwane przez platformę. Aby skonfigurować konkretną kombinację, użyj flagi kompilacji WIFI_HAL_INTERFACE_COMBINATIONS. Flaga znajduje się w device/<oem>/<device>/BoardConfig-common.mk.

Na przykład urządzenie może obsługiwać 2 stacje STA i 1 interfejs typu NAN (Wi-Fi Aware) lub P2P (Wi-Fi Direct), ale nie oba jednocześnie. Możesz to wyrazić w atrybucie device/<oem>/<device>/BoardConfig-common.mk:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}

Innym przykładem jest urządzenie obsługujące STA z jednym punktem dostępu lub połączony punkt dostępu (dwupasmowy, działający jednocześnie) bez innych interfejsów. Jest to przedstawione w ten sposób:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}

Alternatywnie referencyjna warstwa HAL ma konfiguracje dla kilku kombinacji, które można aktywować za pomocą (starszych) flag kompilacji. Instrukcje konfiguracji znajdziesz w tych artykułach: