数据业务激活流程
数据业务的激活流程是上网的前提,只有经过激活,网络分配了IP地址,DNS等参数,浏览器,Email等应用才能够访问网络
本文主要介绍数据业务的激活流程,通过阅读本文,可以理清从应用开启数据开关一直到发OTA消息到网络侧这一阶段是如何调用的,以及在各个方法的主要工作。
AP侧基于Android4.4,Modem基于高通的MSM8926,网络模式主要是基于UMTS的。因此阅读本文最好有代码,android的代码是开源的,可以从google的网址上下,高通的代码不是开源的,只有手机厂商才有部分权限。因此本文最适合手机厂商的协议开发工程师。因为要解决数据业务的问题,第一步检查的就是是否已经激活,如果不能激活,要查看在哪一步出现问题没有激活,。 对于非手机开发工程师,可以了解一下上网的流程。
要对数据业务架构,可以参考《android数据业务架构(qualcomm平台)》。
下面开始从设置界面点击数据开关开始,一步步说明激活流程的函数调用步骤:
Step1、 ConnectivityManager::setMobileDataEnabled
数据开关的接口,该接口是应用可以直接调用的,在setting里开关数据就是首先调用该接口。主要通过binder调用的是Server端的相应接口,见下一步
Step2、ConnectivityService::setMobileDataEnabled
首先检查权限,调用的进程是否声明了CHANGE_NETWORK_STATE的权限,最后发一个EVENT_SET_MOBILE_DATA的事件以便调用者不阻塞。
处理消息的是方法handleSetMobileData,调用MobileDataStateTracker的setUserDataEnable
Step3、MobileDataStateTracker::setUserDataEnable
通过AsyncChannel,发命令CMD_SET_USER_DATA_ENABLE到dcTrackerBase,在开始初始化的时候就进行关联
Step4、DcTrackerBase::onSetUserDataEnabled
收到发过来的命令,会在DcTrackerBase:handleMessage里处理,然后调用的是onSetUserDataEnable,在这里会保存数据库,通知MobileDataStateTracker apn已经available了,如果是开启数据业务,下一步是调用onTrySetupData
Step5、DcTracker::onTrySetupData
这里调用setupDataOnConnectableApns,而在setupDataOnConnectableApns里,首先变量所有的ApnContext,首先如果状态是FAIL的,则改为IDLE。然后检查ApnContext是否是Connectable,根据当然的状态来判断,如果是已经CONNECTED或者是CONNECTING就不能再请求了;接下来检查DataProfile,并添加到总的列表中,以便后面能找到, 接下来是trySetupData. trySetupData,这里处理单PDP的情况,要先把当前激活的不能处理请求的apn类型,则把低优先级的关闭,如果高优先级的处于激活状态,那么低优先级的不能请求激活;判断是否满足条件发激活请求,满足的话调setupData. setupData, 找到DcAsyncChannel,调用其bringup
step6、DcAsyncChannel::bingup
主要发命令EVENT_CONNECT给DataConnection,DataConnection是一个状态机,会发给对应状态处理函数