MMI Code介绍

时间:2024-04-11 16:26:48

MMI是Man-Machine-Interface的缩写:

从功能上来看,有一些从拨号盘拨出去的字符串,它的实际作用不是为了建立一个通话而是为了完成某种服务,这个就是MMI;从格式上来看,每一个从拨号盘输入的字符串,如果包含有*或者#,都可以称之为MMI.

MMI串通常以*,#,*#,**,##等开头,以#结束。各个部分间以*隔开。

MMI包括具体包括SS, USSD,Manufacturer defined MMI codes, SIM control codes等四种。

1.Manufacturer defined MMI codes

一些嵌在手机里的服务码,属于手机制造商自己定义的指令码。比如你要查询一个手机的IMEI号码,你可以在拨号键盘输入*#06#,手机的IMEI码会自动弹出来。

对安卓手机,在拨号键盘中输入*#*#4636#*#*后进入工程模式,可以查看今天手机信息,电池信息,使用各个应用的时间次数和WLAN信息。

MMI Code介绍

2.SIM control codes

比如用来修改SIM卡PIN码的命令,在拨号键盘输入**04*1234*6789*6789#,这将会将SIM卡的PIN码从1234修改成为6789.

3.SS

Supplementary Service,补充服务,比如控制号码显示,呼叫转移等服务的号码串。这些号码串是每部GSM/UMTS/LTE手机中的固定服务号码,运营商是不能对它进行修改的。当手机系统接受到这些服务号码后,先在手机内部进行处理后,再传给网络。比如你随便拿个手机,在拨号盘输入*21*123456789#然后点击发送,这个时候你所有的来电都会直接转移到123456789。使用##002#则可以取消所有的呼叫转移。

4.USSD

与SS相对应的是Unstructured Supplementary Service Data。从字面上看,是非结构化的补充字符,曾经我以为字符串格式上的不同是SS和USSD间最大的区别,后来发现自己大错特错了:单从字符串格式上是没法区分的。那他俩到底有啥区别?一,USSD基本都是运营商根据自己的服务自己定制的,而SS就像上面说的是每个手机固有的;二,SS在发送给网络前,手机首先会自己处理一下,而USSD是完全透明的传送给网络。

MMI Code介绍

 

差异和区别:

SS和USSD都必须点击发送后才能生效,而Manufacturer defined MMI codes和SIM control codes都不需要点击,输入后直接生效。

MMI格式

手机支持如下格式的MMI。

Activation : *SC*SI#

Deactivation : #SC*SI#

Interrogation : *#SC*SI#

Registration :  *SC*SI# and **SC*SI#

Erasure : ##SC*SI#

Action:*,#,*#,**,##。

SC: Service Code, 由2-3位数字组成

SI:  Supplementary Information。

MMI Code介绍

案例分析:

1.Dial *#100# and get the DUTs MSISDN information
Qcom:

From Telephony code and logs shared we see that *#100# is processed as MMI code.

07-07 15:30:46.069 2062 2062 D ImsPhone: [0] dialInternal: dialing w/ mmi 'ImsPhoneMmiCode {State=PENDING action=*# sc=100 poundString=[8qDQ_0i0TCe3Z5FwnZELVVhX-rA]}'...

Once MMI code is processed, Telephony sends USSD request to RIL with same data "*#100# ".

07-07 15:30:46.088 2062 2062 D RILJ : [4540]> SEND_USSD ussd = ******* [SUB0]
07-07 15:30:46.263 2062 2062 D CallManager: registerForMmiComplete

 

RIL shall process the USSD request and sending the ORIG_USSD request to modem with input as "*#100# "

16:26:22.107 [0x1390] QMI Link 2 RX PDU
IFType = 1
QmiLength = 23
QmiCtlFlags = 0
QmiType = VOICE
Service_Voice {
ClientId = 1
SduCtlFlags = REQ
TxId = 41
MsgType = QMI_VOICE_ORIG_USSD
MsgLength = 11
Service_Voc_V2 {
Tlv[0] {
Type = 1
Length = 8
USSInfo {
USSDcs = ASCII coding scheme
UssLen = 6
UssData = { 42, 35, 49, 48, 48, 35 } ---> data corresponds to *#100#
}
}
}
}

We see that modem is responding

16:26:27.021 [0x1391] QMI Link 2 TX PDU
IFType = 1
QmiLength = 35
QmiCtlFlags = 128
QmiType = VOICE
Service_Voice {
ClientId = 1
SduCtlFlags = RSP
TxId = 41
MsgType = QMI_VOICE_ORIG_USSD
MsgLength = 23
Service_Voc_V2 {
Tlvs[0] {
Type = 2
Length = 4
ResultCode {
QmiResult = QMI_RESULT_SUCCESS
QmiError = QMI_ERROR_NONE
}
}
Tlvs[1] {
Type = 18
Length = 13
USSDDataFromNetwork {
USSDcs = ASCII
UssLen = 11
UssData = {
48, 55, 55, 52, 49, 55, 56, 56,
51, 53, 51 --> number is 07741788353
}
}
}
}
}


// Same number 07741788353 is displayed on UI
07-07 15:31:33.540 2062 2062 D GsmMmiCode: onUssdFinished: ussdMessage=07741788353


We see that this is expected behavior from AP side as "07741788353" is received as response from Modem in USSD request.

MMI Code介绍

MMI Code介绍

MMI Code介绍