Interfejs HAL sieci Wi-Fi

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.

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 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 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: