doc: Describe the handling of MMI codes with oFono
[platform/upstream/ofono.git] / doc / mmi-codes.txt
1 Man-Machine Interface (MMI) Codes and oFono
2 ===========================================
3
4 1.0 Introduction
5
6 3GPP 22.030 describes the structure of MMI codes for User Equipment.  All user
7 equipment that wishes to be compliant with the Global Certification Forum
8 (GCF) must recognize such codes in the dialer application.  This document
9 describes the basic design principles for how to handle MMI codes with oFono.
10
11
12 2.0 Basic MMI structure
13
14 The MMI codes fall into two broad categories: codes that are followed by
15 <SEND> and standalone codes.  oFono handles all codes that are followed by
16 <SEND> while the UI is expected to handle standalone codes.
17
18 2.1 Supplementary Service Control Codes
19
20 The following codes are followed by <SEND> and are handled by oFono.  The
21 general structure of the codes is as follows:
22
23 * Activation    - '*SC*SI#'
24 * Registration  - '*SC*SI#' and '**SC*SI#'
25 * Erasure       - '##SC*SI#'
26 * Deactivation  - '#SC*SI#'
27 * Interrogation - '*#SC*SI#'
28
29 Please refer to 3GPP 22.030 for detailed explanation of the structure of SI
30 and SC.  oFono currently handles the following SCs:
31
32 * 33 - Call Barring - All Outgoing
33 * 331 - Call Barring - Outgoing International
34 * 332 - Call Barring - Outgoing International except Home Country
35 * 35 - Call Barring - All Incoming
36 * 351 - Call Barring - All Incoming when Roaming
37 * 330 - Call Barring - All Barrring Services
38 * 333 - Call Barring - All Outgoing Services (e.g. 33, 331, 332)
39 * 335 - Call Barring - All Incoming Services (e.g. 35, 351)
40
41 * 21 - Unconditional Call Forwarding
42 * 67 - Call Forwarding on Busy
43 * 61 - Call Forwarding on No Reply
44 * 62 - Call Forwarding on Unreachable
45 * 002 - Call Forwarding All Conditional
46 * 004 - Call Forwarding All
47
48 * 30 - CLIP
49 * 31 - CLIR
50 * 76 - COLP
51 * 77 - COLR
52 * 43 - Call Waiting
53 * 300 - CNAP
54
55 2.2 Registration of a new password
56
57 The following password change strings are followed by <SEND> and are recognized
58 by oFono:
59
60 * 03 * ZZ * OLD_PASSWORD * NEW_PASSWORD * NEW_PASSWORD #
61 ** 03 * ZZ * OLD_PASSWORD * NEW_PASSWORD * NEW_PASSWORD #
62 * 03 ** OLD_PASSWORD * NEW_PASSWORD * NEW_PASSWORD #
63 ** 03 ** OLD_PASSWORD * NEW_PASSWORD * NEW_PASSWORD #
64
65 NOTE: ZZ is the Call Barring supplementary service code.
66
67 2.3 Chane of PIN/PIN2
68
69 The following string allows the user to change the PIN:
70
71 PIN1: **04*OLD_PIN*NEW_PIN*NEW_PIN#
72 PIN2: **042*OLD-PIN2*NEW_PIN2*NEW_PIN2#
73
74 The following string allows the user to unblock the PIN:
75
76 PIN1: **05*PIN_UNBLOCKING_KEY*NEW_PIN*NEW_PIN#
77 PIN2: **052*PIN2_UNBLOCKING_KEY*NEW_PIN2*NEW_PIN2#
78
79 Please note that this procedure is not followed by <SEND>.  It is up to the
80 dialer to recognize this string and act accordingly by using the appropriate
81 method on the SimManager interface.
82
83 2.4 IMEI Display
84
85 The following string can be used to obtain the IMEI:
86
87 *#06#
88
89 Please note that this procedure is not followed by <SEND>.  It is up to the
90 dialer to recognize this string and display the SerialNumber property of the
91 Modem Interface.
92
93 3.0 General Application Guidelines
94
95 When the application is taking user input it is expected to match the input
96 against all possible strings that are not to be followed by <SEND>.  At a
97 minimum the PIN change or unlock and the IMEI display strings must be handled
98 by the application.  Any additional manufacturer-specific strings are also to
99 be handled by the application.
100
101 Once the user presses <SEND> the request should be sent to the
102 SupplementaryServices.Initiate() method.  If the string is recognized as a
103 control string, then the return value will be interpreted according to
104 structure specified in doc/supplementaryservices-api.txt.  If the error
105 NotRecognized is returned, then the string is not recognized as a
106 supplementary service string and should be treated as a call setup request
107 instead.  In this case the application should forward the string to
108 VoiceCallManager.Dial() method.