上层调用流程:
com.android.server.wifi.WifiNative#disconnect 到
ISupplicantStaIface.disconnect
ISupplicantStaIface.aidl定义在:
hardware/interfaces/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantStaIface.aidl ,
对应于HIDL接口是 :
/hardware/interfaces/wifi/supplicant/1.0/ISupplicantStaIface.hal 。
它的实现类是 :
external/wpa_supplicant_8/wpa_supplicant/aidl/sta_iface.cpp
主动断开网络的流程:
com.android.server.wifi.WifiNative#disconnect 到
ISupplicantStaIface.disconnect
StaIface::disconnect
StaIface::disconnectInternal(),
在这里通过以下函数取得这个ifname_对应的wpa_supplicant ,
wpa_supplicant *StaIface::retrieveIfacePtr()
{
return wpa_supplicant_get_iface(wpa_global_, ifname_.c_str());
}
然后继续
wpas_request_disconnection
wpa_supplicant_deauthenticate
wpa_driver_nl80211_disconnect
在wpa_driver_nl80211_mlme函数中发给驱动 NL80211_CMD_DISCONNECT:
回调通知上层:
hardware/interfaces/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl
wpa_supplicant_deauthenticate
wpas_event_deauth
wpas_event_disconnect
wpa_supplicant_event_disassoc_finish
wpas_notify_disconnect_reason
wpas_hidl_notify_disconnect_reason
HidlManager::notifyDisconnectReason 调用 aidl接口
ISupplicantStaIface.onDisconnected :