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。