Wi-Fi HAL

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 one STA and one interface of either NAN (Wi-Fi Aware) or P2P (Wi-Fi Direct) type (but not both). This would be expressed as:

[{STA} <= 1, {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: