MSTAR的进入工程模式的指令,以及如何修改

2011-08-16 15:03

在 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。

 

你可能感兴趣的:(MSTAR的进入工程模式的指令,以及如何修改)