本文共 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/