系列文章目录
第一章 国内下载AOSP最新源码的方法
第二章 下载AOSP WiFi相关的代码
第三章 将源码导入Android Studio(无需编译idegen)
前言
Wi-Fi连接分为下面几种过程,每种的流程都有些许差异:
- 手动连接
- 自动连接
- 在BSS之间漫游
- Passpoint热点连接
一、Wi-Fi连接是什么?
Wi-Fi连接是指STA(手机)连接到AP(无线路由器)的过程,这个过程分为链路关联和接入认证,接人认证就跟AP端设置的加密方式有关,不同的加密方式接人认证的过程不一样,这个接入认证过程都是wpa_supplicant里面通过对应加密方式的状态机跟AP交互。开放热点是指AP没有设置密码,这种又分为Portal认证和非Portal认证的开放热点。
二、Wi-Fi连接的过程
1. 手动连接
ClientModeImpl:
// CHECKSTYLE:OFF IndentationCheck
addState(mDefaultState);
addState(mConnectModeState, mDefaultState);
addState(mL2ConnectedState, mConnectModeState);
addState(mObtainingIpState, mL2ConnectedState);
addState(mConnectedState, mL2ConnectedState);
addState(mRoamingState, mL2ConnectedState);
addState(mDisconnectingState, mConnectModeState);
addState(mDisconnectedState, mConnectModeState);
// CHECKSTYLE:ON IndentationCheck
setInitialState(mDefaultState);
message:
ClientModeImpl:
ConnectModeState
CMD_CONNECT_NETWORK
CMD_START_CONNECT
function:
ClientModeImpl:
connectToUserSelectNetwork
startConnectToNetwork
connectToNetwork(config)
mWifiNative.connectToNetwork(mInterfaceName, config)
mSupplicantStaIfaceHal.connectToNetwork(ifaceName, configuration)
mSupplicantStaIfaceHal.addNetworkAndSaveConfig(ifaceName, configuration) =>SupplicantStaNetworkHal network = addNetwork(ifaceName)
network.setVendorStaNetwork(getVendorNetwork(ifaceName, network.getNetworkId()));
network.saveWifiConfiguration(config)
SupplicantStaNetworkHal.select()
supplicant-