前记:
这是我好多年前写的一个文档了。有一年没有做modem侧了,最近一直在做AP原生拨号盘和框架。发现自己原来比较喜欢看协议文档,也喜欢对着协议看代码实现。看一个协议的过程中,总是发现原来还有更多相关协议需要了解。一个还没看完,待看列表却已经越变越长。就像是一个一个散落丝,等待着织成一个网。
整个科技社会中,我就是一个渺小的蚂蚁,提不出创新。但是我仍然尽力学着别人发明创造的东西,尽可能的实现或优化这庞然高塔的某个细小螺丝。
后面陆续将自己之前的一些文档传上来吧。也算是自己的心血了。
正文开始:
1.Ril侧
Android侧通过如下ril命令通知终端获取当前网络列表:
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 此命令发出后等待cm ph 时间:
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。这个事件会列举当前网络列表。
然后此ril命令变为
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 状态。
见下图:
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 此ril命令远程调用modem侧的
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 函数。
要等到ril侧收到
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 cm事件,此ril命令才完成。
2.Modem侧收到
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
通过此函数发出
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,最终处理此命令的是函数
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。此函数会调用mmoc模块的
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 函数。
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 函数发出命令
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,type为
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。
3.Mmoc模块处理
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 函数处理命令
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,当为
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 时,调用
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ------>
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 函数通过
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,发送
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 给 SD模块 。
4.SD模块处理
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 的枚举值是9,下面的log显示出sd模块对此event的处理
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 从上图看出,SD脚本查找到脚本73符合要求。在中
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,第73个脚本是
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 脚本的入口的条件是
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。即
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 5.SD脚本调用
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 6.
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 对
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 的处理
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 从脚本里取一行一行的cons处理。有个
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 循环,一般cons的处理都回返回
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,所以脚本会一行一行的执行。
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 函数 处理到
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 时, 调用
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。然后
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 调用
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 中最后如下:
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 当return为
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,则是指去脚本的下一个cons,在当前脚本中为
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。
不过
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 的处理是,返回了
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,
不满足while循环条件,即脚本不继续执行,而是产生了一个action给sd engine。退出函数
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,返回
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 。
5.
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 处理
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 实际上是在
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 里的一个死循环里,
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 但是
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 会退出死循环,
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 7.最终函数一步步回退到
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 双卡时,每个卡各有自己的stack,即sdss_eng_stack_s实例。即各有自己的sd脚本处理堆栈。
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 之前的流程简单说一下:
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 发送命令,cm的
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 处理命令。
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 调用
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 函数,发送mmoc命令。Mmoc通过
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 处理
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 命令。
到了
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ,开始进入sd模块。这个没有命令的转发了,是函数的层层调用。我们看看sd的函数调用层次:
---------------------------------------------------------------
1.
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ------------------------------------------------------------------
2
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ----------------------------------------------------------------------
3
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ----------------------------------------------------------------------------------------------
4
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ---------------------------------------------------------------------------------------------
5
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 ---------------------------------------------------------------------------------------------------------
6
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 整个执行流程我画了一个图:
如下:
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 SD是个脚本和数据库的组合。脚本的执行基于栈的原理,脚本的每行执行相当于压栈,一个脚本执行完了,就会将脚本从栈里弹出。
目前我知道的是新脚本的执行是事件触发的。因为每个脚本的第一行都是对event的判断,那个event匹配了,这个脚本就会被压栈并执行。
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件 特列是:dssscr_called_tbl,这个组里面的脚本是被其他脚本调用的脚本,这些脚本不对event进行判断。
脚本是分组排序的,总共有如下几组脚本:
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件
从高通手动搜网代码流程看sd脚本的执行1.Ril侧2.Modem侧收到3.Mmoc模块处理4.SD模块处理事件