Struktura Wi-Fi ma 3 platformy HAL Wi-Fi reprezentowane przez 3 różne interfejsy. Na urządzeniach z Androidem 14 lub nowszym wszystkie 3 interfejsy są dostępne jako stabilne pakiety AIDL. Te interfejsy były wcześniej zdefiniowane za pomocą HIDL.
- HAL dostawcy: powierzchnia HAL dla poleceń specyficznych dla Androida. Pliki AIDL znajdują się w folderze
hardware/interfaces/wifi/aidl
. - Supplicant HAL: interfejs HAL dla programu wpa_supplicant. Pliki AIDL znajdują się w folderze
hardware/interfaces/wifi/supplicant/aidl
. - Hostapd HAL: interfejs HAL dla hostapd. Pliki AIDL znajdują się w folderze
hardware/interfaces/wifi/hostapd/aidl
.
Interfejs HAL dostawcy
Warstwa HAL dostawcy udostępnia polecenia specyficzne dla Androida. Jest to opcjonalne (nie jest wymagane) w przypadku trybów infrastruktury stacji (STA) i miękkiego punktu dostępu (SAP). Jest to jednak obowiązkowe w przypadku usług Wi-Fi Aware i Wi-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 Androidzie w wersji wcześniejszej niż 8.0 (przed HIDL) używano mechanizmu HAL, który obecnie nazywa się starszym HAL-em. Kod źródłowy Androida zawiera obecnie domyślną implementację AIDL lub HIDL, która korzysta z warstwy pośredniej 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.
Warstwa HAL klienta
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
znajdującej 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: