移动4G插卡注网
本文根据插入移动4G单卡到注册4G网络过程的mtklog分析。
插卡动作:

从以上信息无法区分单卡还是双卡,通过ATR参数判断:

注网流程,此过程未开启4G数据连接:
[MS->NW] ESM_MSG_PDN_CONNECTIVITY_REQUEST (PTI:5, EBI:0)
[MS->NW] EMM_Attach_Request(EPS attach type="EMM_ATTACH_TYPE_COMBINED_ATTACH")
[NW->MS] ESM_MSG_ESM_INFORMATION_REQUEST (PTI:5, EBI:0)
[MS->NW] ESM_MSG_ESM_INFORMATION_RESPONSE (PTI:5, EBI:0)
[NW->MS] EMM_Attach_Accept(EPS attach result="EMM_ATTACH_RESULT_COMBINED_ATTACHED")
[NW->MS] ESM_MSG_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST (PTI:5, EBI:5)
[MS->NW] ESM_MSG_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT (PTI:0, EBI:5)
[MS->NW] EMM_Attach_Complete
上报信号强度事件(Ril.cpp):

RILJ 的处理函数(Ril.java):

mSignalStrengthRegistrant 对象的创建(BaseCommands.java):

setOnSignalStrengthUp() 函数在ServiceStateTracker 类的构造函数中调用:

通过传入this,EVENT_SIGNAL_STRENGTH_UPDATE消息由该类或其子类处理,该处理函数在GSMServiceStateTracker 类中:

mSignalStrengthChangedRegistrants 通知者对象的初始化:

向该通知者添加监听对象方法:

分析该方法暂未被调用,所以没有需通知的监听对象。
继续分析onSignalStrengthResult() 函数处理上报的信号:

setGsm() 设置phone标识;isGsm = true,代表Gsm、Lte;否则代表Cdma
函数validateInput() 对信号区间做一个判断:

notifySignalStrength() 更新信号强度:

判断当前信号强度与上次保留的信号强度值,获取信号强度等级:

继续分析PhoneBase 类的 notifySignalStrength() 函数:

mNotifer 是 PhoneNotifer 接口的对象,notifySignalStrength() 方法的实现在 DefaultPhoneNotifier 类中:

方法如下:

mRegistry 对象的创建:

类TelephonyRegistry 继承自 ITelephonyRegistry.Stub,作为Service运行在system_server进程中,它会通知注册者。
上面的DefaultPhoneNotifier运行在com.Android.phone进程中,当信号强度值变化时,通过Service进行通知(service被感兴趣的注册者调用了listen,添加了回调函数。

通知上层信号强度变化。
可参考:http://blog.csdn.net/feitian_666/article/details/52879929

浙公网安备 33010602011771号