您的位置:首页 > 其它

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

2012-08-12 10:51 387 查看
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_J***A;

}

}

/* *#*#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_W***ECOM_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_W***ECOM_SPECIFIC;

}

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

样是非“#”字母,并且字串的长度仍然为 5,那么只要在上面代码中把原有的字母替换成新的字母,这是最

简单的;如果新的字串末尾为“#”,或者字串长度有变化,那么只要模仿图中代码的设计思路,对字串中

第一个、某尾等字母以及字串的长度等进行判断,如果完全符合就返回 COMMON_SEQ_W***ECOM_SPECIFIC。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: