Wi-Fi HAL

Wi-Fi フレームワークには、3 つの異なるインターフェースで表される 3 つの Wi-Fi HAL サーフェスがあります。3 つのインターフェースには HIDL 定義があり、そのうち 2 つは安定版の AIDL パッケージとして提供されています。

  • Vendor HAL: Android 固有のコマンドの HAL サーフェスです。HIDL ファイルは hardware/interfaces/wifi/1.x にあります。
  • Supplicant HAL: wpa_supplicant の HAL サーフェスです。HIDL ファイルは hardware/interfaces/supplicant/1.x にあり、AIDL ファイルは hardware/interfaces/supplicant/aidl にあります。
  • Hostapd HAL: hostapd の HAL サーフェスです。HIDL ファイルは hardware/interfaces/hostapd/1.x にあり、AIDL ファイルは hardware/interfaces/hostapd/aidl にあります。

ベンダー HAL

Vendor HAL は、Android 固有のコマンドを提供します。インフラストラクチャの Station(STA)モードと Soft AP(SAP)モードが機能するためのオプションであり、必須ではありません。ただし、Wi-Fi AwareWi-Fi RTT サービスに対しては必須です。

HIDL より前(Android 8.0 より前)の Androidでは、今日レガシー HAL と呼ばれる HAL メカニズムが使用されていました。現在では、Android ソースコードは、レガシー HAL 上で実行される shim を使用して HIDL のデフォルトの実装を提供します。

レガシー HAL のヘッダーは hardware/libhardware_legacy/include/hardware_legacy/ にあります。レガシー HAL ベースの実装は 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 で定義され、フレームワークに公開されます。仕様の形式は、Wi-Fi HAL 1.5 以前では android/hardware/interfaces/wifi/1.0/IWifiChip.hal、Wi-Fi HAL 1.6 以降では android/hardware/interfaces/wifi/1.6/IWifiChip.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 には、(従来の)ビルドフラグでアクティブ化できる複数の組み合わせのための構成があります。構成手順については、以下をご覧ください。