博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MSTAR的进入工程模式的指令,以及如何修改
阅读量:2222 次
发布时间:2019-05-08

本文共 2236 字,大约阅读时间需要 7 分钟。

在 XMMI 平台,有两种方式进入工模,分别为:

1 输入“*#*#1705#”,再按“拨号键”,可以进入研发手机测试模式,用于研发人员对手机进行相关测试。
比如,第1项(Customer software version)是软件版本,其最后是变异日期和时间;第12项(EMMI Debug)
下面的“Enable USB menu“和”Disable USB menu“可以切换USB模式和串口(COM)模式。

2 输入“*#*0*” ,再按“拨号键”,可以进入工厂产品测试模式,用于生产线上对手机进行相关测试。

但是,这两个口令并不是固定的,可以根据需要自定义设定。本文的主要内容就是讲述如何更改这两个口
令。

 

修改“*#*#1705#”

在 mmi_common_util.c 文件里,MMI_Common_ParseGsmSeq()有这样的接口,这个接口的主要作用是对输入的
各种口令进行解析,然后根据不同的口令,返回对应的返回值,进而启动对应的程序。
首先,先了解“*#*#1705#”是如何被设置的。在 MMI_Common_ParseGsmSeq()有这样一段代码,它的作用就
是如何判断用户输入的是否是为“*#*#1705#”。 在这里,代码会先去判断输入的字串中,第一个和第二个是否
为*#,最后一个字母是否为“#”,然后再进一步判断第三、四个字串是否为“*#”及字串长度,最后再判断是否
为“1705”,如果输入的字串全部符合,返回值COMMON_SEQ_SPECIFIC 将会被送出,然后调用
MMI_Common_ParseGsmSeq()的地方会根据得到的返回值启动进入工模的程序。下图是设置“*#*#1705#”的代码。
        /*  *#.......#  */
        if(
            (*Sequence     == COMMON_STAR) &&
            (*(Sequence+1) == COMMON_HASH) &&
            ( *(Sequence+length-1) == COMMON_HASH )
          )
        {
            /* INTEROGATE SEQUENCE */
            ptr = (u8 *)Sequence+2;

            if (length == 7 && send)

            {
                if (*(ptr) == '8' &&
                    *(ptr + 1) == '0' &&
                    *(ptr + 2) == '8' &&
                    *(ptr + 3) == '0')
                {
     return COMMON_SEQ_INSTALL_JAVA;
                }
            }
            /* *#*#XXXX#S    */
            if(
                ( length == 9 )    &&
                 (*ptr == COMMON_STAR) &&
                (*(ptr+1) == COMMON_HASH) &&
                send
              )
            {
                /* *#*#1705# */
                if(
                    ( *(ptr+2) == '1' ) &&
                    ( *(ptr+3) == '7' ) &&
                    ( *(ptr+4) == '0' ) &&
                    ( *(ptr+5) == '5' )
                  )
                {
                    /*
                    ** --------------
                    ** SPECIFIC MENU
                    ** --------------
                    */
                    return COMMON_SEQ_SPECIFIC;
                }

其次,如果要更换“*#*#1705#”口令,对上面的Code进行修改就可以了。例如:如果只想修改“1705”,

只要在代码中替换掉这几个数字就可以,这是最简单的;但是如果要改变“*#*#1705#”整个口令,只要模仿图中
代码的设计思路,对字串中第一个、某尾等字母以及字串的长度等进行判断,如果完全符合就返回

 

修改“*#*0*”

 首先,“*#*0*”有对应的 Code,也是在MMI_Common_ParseGsmSeq()里面。由于“*#*0*”与
“*#*#1705#”的两个字串的末尾字母是不同的,因此“*#*0*”的代码会有去判断末尾字母是否为非
“#”,然后再判断首字母、字串的长度等是否完全符合,如果符合就返回COMMON_SEQ_WAVECOM_SPECIFIC。
如下图所示:

        else if( (*(Sequence+length-1) != COMMON_HASH ) && (*Sequence == COMMON_STAR) && (!IsIDCall) )

        {
            /* "*#*0*" used for EM production test*/
            if( length == 5                       &&
                (*(Sequence+1) == COMMON_HASH) &&
                (*(Sequence+2) == COMMON_STAR) &&
                (*(Sequence+3) == '0') &&
                ( *(Sequence+4) == COMMON_STAR )
                )
            {
                return COMMON_SEQ_WAVECOM_SPECIFIC;
            }

其次,如果需要修改口令,也是对上面的 Code 进行修改就可以了。例如:如果要采用的新字串末尾同

样是非“#”字母,并且字串的长度仍然为 5,那么只要在上面代码中把原有的字母替换成新的字母,这是最
简单的;如果新的字串末尾为“#”,或者字串长度有变化,那么只要模仿图中代码的设计思路,对字串中
第一个、某尾等字母以及字串的长度等进行判断,如果完全符合就返回 COMMON_SEQ_WAVECOM_SPECIFIC。

转载地址:http://jbifb.baihongyu.com/

你可能感兴趣的文章
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>