The Wi-Fi framework has three Wi-Fi HAL surfaces represented by three different HIDL packages:
- Vendor HAL: A HAL surface for Android-specific commands. The HIDL files are
in
hardware/interfaces/wifi/1.x
. - Supplicant HAL: A HAL surface for wpa_supplicant. The HIDL files are in
hardware/interfaces/supplicant/1.x
. - Hostapd HAL: A HAL surface for hostapd. The HIDL files are in
hardware/interfaces/hostapd/1.x
.
Vendor HAL
The Vendor HAL provides Android-specific commands. It is optional (not required) for infrastructure Station (STA) and Soft AP (SAP) modes to function. However, it is mandatory for Wi-Fi Aware and for Wi-Fi RTT services.
Pre-HIDL (i.e. pre-Android 8.0) Android used a HAL mechanism now called legacy HAL. The Android source code currently provides a default implementation of HIDL using a shim running on top of the legacy HAL.
The legacy HAL headers are located in
hardware/libhardware_legacy/include/hardware_legacy/
. The legacy HAL based
implementation is located in hardware/interfaces/wifi/1.x/default
.
Supplicant HAL
The Supplicant HAL provides a HIDL interface for the wpa_supplicant daemon.
The wpa_supplicant source code is located in
external/wpa_supplicant_8/wpa_supplicant
. The wpa_supplicant code providing
the HIDL interface is located in the hidl
sub-directory.
Hostapd HAL
The Hostapd HAL provides a HIDL interface for the hostapd daemon.
The hostapd source code is located in external/wpa_supplicant_8/hostapd
. The
hostapd code providing the HIDL interface is located in the hidl
sub-directory.
Wi-Fi multi-interface concurrency
Different Android devices can support different combinations of Wi-Fi interfaces
concurrently. The supported combinations are defined in the HAL and are exposed
to the framework. The specification format is defined in
android/hardware/interfaces/wifi/1.0/IWifiChip.hal
. For example, a device may
support two STAs and one interface of either NAN
(Wi-Fi Aware)
or P2P
(Wi-Fi Direct)
type (but not both). This would be expressed as:
[{STA} <= 2, {NAN,P2P} <= 1]
The concurrency specification format is flexible and generic. It can express
combinations that are not yet supported by the framework. To configure a
particular combination, use the WIFI_HAL_INTERFACE_COMBINATIONS
build flag located in device/<oem>/<device>/BoardConfig-common.mk
.
Alternatively, the reference HAL has configurations for several combinations
that may be activated with (legacy) build flags. For configuration
instructions, see: