2021-06-03

wifi 连接流程记录

connectToUserSelectNetwork 包括请求连接的netid号,请求的app uid ,已经是否是属于已经保存的app hasCredentialChanged

case WifiManager.CONNECT_NETWORK:
     if (!connectToUserSelectNetwork(
          netId, message.sendingUid, hasCredentialChanged))
		      mWifiConfigManager.getConfiguredNetwork(netId)//从config中获取netId的配置
			if (!mWifiConfigManager.enableNetwork(netId, true, uid)
                || !mWifiConfigManager.checkAndUpdateLastConnectUid(netId, uid)) //启动netId,并且保证netId与上一次
		else
		   mWifiConnectivityManager.setUserConnectChoice(netId);//记录用户选择的Uid,下次可以直接连接

forceReconnect 表示 如果已经连接到network,就不必重新连接,因此此时forceReconnect = false。若没有连接到则需要重新连接

 if (!forceReconnect && mWifiInfo.getNetworkId() == netId) {
              // We're already connected to the user specified network, don't trigger a
              // reconnection unless it was forced.
            logi("connectToUserSelectNetwork already connecting/connected=" + netId);
            } else {
              mWifiConnectivityManager.prepareForForcedConnection(netId);
              startConnectToNetwork(netId, uid, SUPPLICANT_BSSID_ANY);
            }

wifiConfigManager.java中enable过程需要完成哪些操作

		if (!doesUidBelongToCurrentUser(uid)) {//属于当前用户
		WifiConfiguration config = getInternalConfiguredNetwork(networkId);可以获取到config
		if (!canModifyNetwork(config, uid, ALLOW_LOCKDOWN_CHECK_BYPASS))能够修改net参数
		
		config.lastConnectUid = uid;//保存当前设置的uid
		
		if (!updateNetworkSelectionStatus(
            networkId, WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE))//更新选择状态
		if (disableOthers) { setLastSelectedNetwork(networkId);
		saveToStore(true);//保存信息

状态机原理:在某一状态下,该状态的所有消息都是在同一process方法上处理的,只是线程不同而已。Process是主线程,其余sendmessege是分线程

		connectToUserSelectNetwork
		   ->  startConnectToNetwork
		      -> sendMessage(CMD_START_CONNECT, networkId, uid, bssid);
			  handle机制
			  connectmodestate 的case CMD_START_CONNECT:
			     -> if (mWifiNative.connectToNetwork(config)) {//调用了native 的connectToNetwork方法
				    ->mSupplicantStaIfaceHal.connectToNetwork(configuration) //调用supplicantStaIfaceHal的接口
					   ->if (!mCurrentNetworkRemoteHandle.select())//这个是SupplicantStaNetworkHal的接口
					      ->mISupplicantStaNetwork.select();  //在往下就是AIDL方式调用的接口
		->android.hardware.wifi.supplicant.V1_0.SupplicantStatus;HAL层

HAL层接口hardware/interfaces/wifi/supplicant/1.0/* 里面都是HIDL的接口函数,再往下就是supplicant的库函数了,暂时没有找到在哪里

同理回调函数也是先到supplicantStaNetworkHal中的stu子类中,然后通过handle机制,一步一步往上传递消

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值