前言:
这也是我的一篇很老的技术积累了。里面的6085平台是比较老的高通平台。到现在代码肯定有改动,但是搜索脚本的框架还是没有变,仍然可以作为参考。
如何抓取搜网流程SD的LOG
本文使用的嵌入端软件是6085平台的33701基线.不同基线的脚本内容会有差异.
2 从SD的LOG看终端使用了那些脚本
这个比较简单,通过关键字“SCR=”MACTH LOG。
比如如下的抓图是MATCH的开机LOG,并且终端处在无信号的环境下。
这些打印语句基本在)函数中打印。
以第一行为例,打印的信息为“User scr=1,line=1,cons=56”
“User”指出脚本所在的组,“SCR=1”指出是所在组的第几个脚本,“line=1”指出当前执行脚本的第几行,“cons=56”指出这一行的CONSRTUCTURE是多少。
总共有多少个组,从如下的枚举确定:
每个组对应的脚本集合在如下的函数中可以确定:
再回头看一下“User scr=1,line=1,cons=56”。
“User”代表,对应的脚本组为。如下图:
“SCR=1”指出是上述组的第一个脚本,即。
“line=1”指出目前在执行脚本的那一行。行数从0开始算起。目前执行:
“cons=56”指出目前行的行为,CONSTRUCT是多少。其值为定义。
当前执行的第一行扩展开如下:
。即当前的CONS为,其枚举值即为56。
3 简单描述一下ACT_SCR宏的含义
会调用
组即的一个脚本.
仍然以开机LOG为例:
按照ACT_SCR宏,实际上扩展为:
值为1,实际上是调用的第一个脚本,即.
通过下面的打印语句也可以证明:即执行的第一行后,转而执行的第0行.
4. 简单描述一下PRE_SCR宏的含义
仍然以开机LOG为例:
即执行的第一行后,转而执行的第0行.
当执行到第四行遇到PREV_SCR,则会返回原来的脚本,继续执行.原来执行到第一行,则现在执行第2行.
如下图的LOG抓图:
5. 简单描述一下PROC_EVT宏的含义
ACT_SCR用于调用CALLED组,即的脚本.
其他还有多个组,如下图:
通过PROC_EVT,可以调用除CALLED组以外,其他组的脚本. 的入参是类型。枚举值被分成若干组,每一组对应上面的一组脚本。这些组如下:
下面的函数确定一个EVENT对应哪个组
最终确定执行哪个脚本在函数中。中有一个循环,从事件对应的脚本组中从第0个脚本开始判断,遇到的一个符合条件的脚本则被执行。
仍然以开机LOG为例. 最后调用了另一个脚本.
代码和LOG如下:
调用了CALLED 组的第三个脚本,即.
抛出了一个事件。属于组。事件组对应脚本组。
则会遍历脚本组。其第0个脚本为:
前面三个判断条件,第二个条件就不符合要求,CDMA下只有自动模式。所以不会最调用。最终遍历到脚本,符合条件,然后被执行。见如下LOG:
从上面的描述可以看到,在脚本组里同一个事件在不同条件可以触发不同的脚本,若两个脚本均符合条件,则在前面的脚本被执行。可见脚本的顺序也是比较关键的。
5. 添加一个脚本的示例
此例子用于向组添加一个脚本。
首先定义一个脚本,如下:
然后将其添加到最后:
然后在最后添加一个枚举值:
最后若在一个脚本里调用这个新脚本则添加如下这句话: