Wi-Fi フレームワークには、3 つの異なるインターフェースで表される 3 つの Wi-Fi HAL サーフェスがあります。 Android 14 以降を搭載したデバイスの場合、3 つのインターフェースはすべて、安定版の AIDL パッケージとして提供されています。 以前は、HIDL を使用してこれらのインターフェースを定義していました。
- Vendor HAL: Android 固有のコマンドの HAL サーフェスです。AIDL ファイルは
hardware/interfaces/aidl
にあり、HIDL ファイルはhardware/interfaces/wifi/1.x
にあります。 - Supplicant HAL: wpa_supplicant の HAL サーフェスです。AIDL ファイルは
hardware/interfaces/supplicant/aidl
にあり、HIDL ファイルはhardware/interfaces/supplicant/1.x
にあります。 - Hostapd HAL: hostapd の HAL サーフェスです。AIDL ファイルは
hardware/interfaces/hostapd/aidl
にあり、HIDL ファイルはhardware/interfaces/hostapd/1.x
にあります。
ベンダー HAL
Vendor HAL は、Android 固有のコマンドを提供します。インフラストラクチャの Station(STA)モードと Soft AP(SAP)モードが機能するためのオプションであり、必須ではありません。ただし、Wi-Fi Aware と Wi-Fi RTT サービスに対しては必須です。
Android 14 以降では、AIDL を使用してベンダー HAL インターフェースを定義します。Android 13 以前では、HIDL を使用してベンダー HAL インターフェースを定義します。
HIDL より前(Android 8.0 より前)の Android では、今はレガシー HAL と呼ばれている HAL メカニズムが使用されていました。現在では、Android ソースコードは、レガシー HAL 上で実行される shim を使用して AIDL や HIDL のデフォルトの実装を提供します。
レガシー HAL のヘッダーは hardware/libhardware_legacy/include/hardware_legacy/
にあります。レガシー HAL ベースの実装は、AIDL 用は hardware/interfaces/wifi/aidl/default
に、HIDL 用は hardware/interfaces/wifi/1.x/default
にあります。
Supplicant HAL
Supplicant HAL は、wpa_supplicant デーモンにインターフェースを提供します。Android 13 以降では、このインターフェースは AIDL を HAL の定義に使用します。Android 13 より前のリリースでは、インターフェースとベンダー パーティションは HIDL を使用します。
wpa_supplicant のソースコードは external/wpa_supplicant_8/wpa_supplicant
にあります。リファレンス実装では AIDL インターフェースが aidl
サブディレクトリに実装されています。
Hostapd HAL
Hostapd HAL は、hostapd デーモンにインターフェースを提供します。Android 13 以降では、このインターフェースは AIDL を HAL の定義に使用します。Android 13 より前のリリースでは、インターフェースとベンダー パーティションは HIDL を使用します。
hostapd のソースコードは external/wpa_supplicant_8/hostapd
にあります。
リファレンス実装では AIDL インターフェースが aidl
サブディレクトリに実装されています。
Wi-Fi マルチインターフェースの同時実行
さまざまな Android デバイスで Wi-Fi インターフェースの異なる組み合わせを同時にサポートできます。サポートされる組み合わせは HAL で定義され、フレームワークに公開されます。仕様の形式は、AIDL Wi-Fi HAL では hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl
、Wi-Fi HAL 1.6 では android/hardware/interfaces/wifi/1.6/IWifiChip.hal
、Wi-Fi HAL 1.5 以前では android/hardware/interfaces/wifi/1.0/IWifiChip.hal
で定義されています。
Android 14 以降で利用可能な AIDL HAL、および Android 13 で利用可能な Wi-Fi HAL バージョン 1.6 では、ブリッジ接続された AP インターフェース(デュアルバンド同時接続)を明示的な組み合わせアイテムとして指定する機能が追加されています。
同時実行の指定形式はフレキシブルかつ一般的なものであり、フレームワークでまだサポートされていない組み合わせを記述できます。特定の組み合わせを構成するには、device/<oem>/<device>/BoardConfig-common.mk
にある WIFI_HAL_INTERFACE_COMBINATIONS
ビルドフラグを使用します。
たとえば、デバイスは 2 つの STA と、NAN(Wi-Fi Aware)または P2P(Wi-Fi Direct)のインターフェースのいずれか 1 つ(両方は不可)をサポートできます。これは device/<oem>/<device>/BoardConfig-common.mk
で次のように表現されます。
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}
もう一つの例として、単一の AP か、他のインターフェースなしでブリッジ接続された AP(デュアルバンド同時接続)で 1 つの STA をサポートするデバイスがあります。これは次のように表現されます。
WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}
また、リファレンス HAL には、(従来の)ビルドフラグでアクティブ化できる複数の組み合わせのための構成があります。構成手順については、以下をご覧ください。