1 oFono - Open Source Telephony
2 *****************************
7 The purpose of this document is to enumerate all major functionality areas
8 of oFono. In effect, this document will serve as the primary, up to date
9 source of oFono feature information. It is intended for developers, managers
10 and users alike to quickly gauge the progress of the project and feature
16 Supported Proactive Commands:
18 - Display Text proactive command support. Upon receiving the proactive
19 command notification oFono decodes it, including performing character
20 conversion from packed/unpacked GSM 7bit and UCS2 to UTF-8 encoded text.
21 The registered agent is then called using the DisplayText method on the
22 SimToolkitAgent interface to handle the user interaction aspects.
24 SIM-specified duration are handled. If immediate response to the SIM
25 is required, oFono sends a terminal response immediately. DisplayText
26 method is still executed normally, until a timeout occurs or a new
27 proactive command arrives from the SIM.
29 - Get Inkey proactive command support. When this command is received,
30 oFono decodes it and checks what "flavor" it is. Depending on this, the
31 SimToolkitAgent is called with a different method call:
32 * If the Get Inkey flavor indicates that this is a simple Yes/No
33 confirmation, then the RequestConfirmation method is called.
34 * If the Get Inkey flavor indicates that the SIM only expects digits,
35 then the RequestDigit method is called.
36 * Otherwise the RequestKey method is called
38 SIM specified durations are handled, if the user agent does not respond
39 in the time allowed, then the 'No Response' Terminal Response is generated
42 - Get Input proactive command support. When this command is received,
43 oFono decodes it and checks what "flavor" it is. Depending on this, the
44 SimToolkitAgent is called with a different method call:
45 * If the Get Input flavor indicates that the SIM only expects digits,
46 then the RequestDigits method is called.
47 * Otherwise the RequestInput method is called
49 - More Time proactive command support. This command is intended to notify
50 that the SIM is still busy processing a command. For oFono, this proactive
51 command is a no-op. It is always replied to successfully.
53 - Setup Menu proactive command support. When this command is received, oFono
54 parses the new main menu structure and updates its MainMenu and MainMenuTitle
55 properties which reflect the items, icons and the alpha text of the
56 proactive command. Soft key support and menu help system are ignored by
59 - Select Item proactive command support. When this command is received, oFono
60 decodes it and dispatches it to the SimToolkitAgent by calling the
61 RequestSelection method. This method is passed the menu selection title,
62 the selectable items and the default, if any.
64 - Timer Management proactive command support. oFono supports starting,
65 stopping and querying timer state flavors of this command. Up to eight
66 timers are supported. This proactive command is handled completely
67 inside oFono and no external user interaction is required.
69 - Set Up Idle Mode Text proactive command support. Whenever oFono receives
70 this proactive command, it updates the IdleText property on the main
71 SimToolkit interface. Indications that this property has changed are
72 handled by the usual means.
74 - Send DTMF proactive command. Whenever oFono receives the Send DTMF command,
75 it checks that there are calls in progress and DTMF is possible. If so,
76 DTMF characters are passed to the voicecall atom to be transmitted to the
77 modem. The appropriate terminal response is sent to the SIM once the DTMF
78 tones have been played or the call has been disconnected.
80 NOTE: This command can also be handled by the modem.
82 - Play Tone proactive command. Whenever oFono receives a Play Tone proactive
83 command it checks whether the tone is to be continuous/looped or played once.
84 It then calls the SimToolkitAgent PlayTone or LoopTone method as appropriate.
85 The sound that will be played will be determined based on the sound type
86 that is passed to the agent. It is up to the system integrator to provide
87 the appropriate sounds.
89 - Send USSD proactive command. Whenever oFono receives a Send USSD proactive
90 command it checks whether there are any USSD / SS operations in progress.
91 If an operation is in progress, the appropriate terminal response is sent
92 without performing the Send USSD operation. Otherwise the USSD string
93 is sent to the network, and the response is sent back to the SIM in the
96 NOTE: This command can also be handled by the modem.
98 - Language Notification proactive command. Whenever oFono receives a Language
99 Notification proactive command, it prints the language code and sends
100 terminal response to the SIM immediately.
102 - Provide Local Information proactive command. Whenever oFono receives a
103 Provide Local Information proactive command, it checks the type of the
104 information requested. If the information is about the time/date or the
105 language of the terminal, it responds to the command with the appropriate
106 terminal response. The time/date information is obtained using localtime().
107 The language information is obtained by checking the LANG environment
108 variable. All other information requests are expected to be handled by
111 - Send Short Message proactive command. Whenever oFono receives a Send SMS
112 proactive command, it parses the PDU and submits it to the outgoing SMS
113 queue. A terminal response is sent to the SIM When the raw PDU has been
114 sent, or failed to be sent.
116 NOTE: This command can also be handled by the modem.
118 - Set Up Call proactive command. When oFono receives a Set Up Call proactive
119 command, it checks whether the UICC has indicated that the user should be
120 informed. In this case the SimToolkitAgent is called with the
121 ConfirmCallSetup method. If the user has authorized the operation, or if
122 the user's confirmation was not indicated oFono will setup the call and
123 optionally inform the user. The information sent by the SIM will be
124 available on the resulting voice call object. The relevant properties are
125 Information and Icon.
127 NOTE: This command can also be handled by the modem.
129 - Refresh proactive command. The specification defines 7 types
132 - NAA File Change Notification
133 - NAA Initialization and File Change Notification
134 - NAA Initialization and Full File Change Notification
136 - NAA Application Reset (2G only)
137 - NAA Session Reset (3G only)
139 oFono can fully perform the the first four types of Refresh. The
140 remaining three must be handled by the modem or its driver with a
141 notification sent to ofono. Regardless of whether the command is
142 handled by the modem or not, oFono will check whether there are any
143 calls or ussd operations active. If there are, the appropriate
144 response will be sent (e.g. busy on call or screen busy terminal
145 response.) Otherwise a positive response will be sent to the driver.
146 In the case of a 'UICC Reset' the driver / modem can interpret this
147 that it is safe to reset the UICC.
149 Alternatively, the driver / modem can notify the core of the SIM removal
150 / SIM insertion events without using the Refresh proactive command. It
151 is up to the driver / modem to perform a warm reset. In particular, 3GPP
152 31.111 mandates that any change to EFimsi is done by using 'UICC Reset',
153 'NAA Application Reset' or 'NAA Session Reset'. Please see 3GPP 31.111
156 Other types are handled by oFono flushing the EF cache of the files
157 affected (or the entire SIM cache in case of Full File Change Notifications)
158 and re-reading the affected files. Any properties derived from these
159 Elementary Files will be updated and signaled using PropertyChanged.
161 NOTE: This command can also be handled by the modem.
163 - Sim icon support. oFono supports icons that are stored on the SIM. If the
164 SIM notifies oFono that an icon is available for a particular proactive
165 command, oFono passes this information to the UI. The UI is able to obtain
166 the icons by using GetIcon method on the SimManager interface. The icons
167 are read from the SIM and converted into XPM format.
169 - Text attribute support. Whenever oFono detects that text attributes have
170 been given to any text or alpha string, it applies them and converts the
171 resulting text to HTML. The UI is expected to be able to display such
176 - Timer Expiration envelope support. Whenever a timer expires (as started by
177 the Timer Management proactive command) oFono forwards, this envelope type
178 to the SIM. No external user interaction is required.
180 - Menu Selection envelope support. The user can initiate a proactive command
181 session by selecting something from the Sim Toolkit main menu. This is done
182 by using the SimToolkit's SelectItem method. As a result, oFono will send
183 the Menu Selection envelope to the SIM.
185 - CBS-PP Download envelope support. When oFono receives a cell broadcast
186 and on a channel listed in EFcbmid, it is dispatched to the SIM using the
187 CBS-PP Download envelope. No user interaction is required or signaled
188 whenever this occurs.
190 - SMS-PP Download envelope support. When oFono receives an sms message
191 addressed to the SIM, it is dispatched to the SIM using the SMS-PP Download
192 envelope. No user interaction is required or signaled whenever this occurs.
194 Please note that many current modems do not support returning RP-ACK and
195 RP-ERROR acknowledgement PDUs back to the network. This is required by the
196 CAT specification for SMS-PP Download. E.g. the sim response to the SMS-PP
197 Download Envelope is to be stored in an RP-ACK / RP-ERROR PDU and returned to
198 the network. It is thus anticipated that modems will transparently handle
199 this feature in the firmware.
201 The following commands are expected to be handled by the modem:
203 - Send SS proactive command. oFono does not explicitly support this proactive
204 command since AT modems do not provide the low level information necessary
205 for oFono to generate a valid response. The modem (or driver) shall handle
206 this command. Optionally the modem (or driver) can inform oFono that the
207 proactive command has been received and is being handled by the modem, as
208 well as when the terminal response has been sent by the modem. oFono will
209 display the necessary user information for this time period if this
210 information is included in the proactive command.
212 -----------------------------------------------------------------------
213 | Feature | Support | Implemented by |
215 -----------------------------------------------------------------------
216 |Profile Download | YES | BASEBAND |
218 -----------------------------------------------------------------------
219 |SMS-PP Data Download | YES | BASEBAND |
221 -----------------------------------------------------------------------
222 |Cell Broadcast data Download | YES | BASEBAND or ME |
224 -----------------------------------------------------------------------
225 |CALL CONTROL BY SIM | YES | BASEBAND |
227 -----------------------------------------------------------------------
228 |DISPLAY TEXT | YES | ME |
230 -----------------------------------------------------------------------
231 |GET INPUT | YES | ME |
233 -----------------------------------------------------------------------
234 |GET INKEY | YES | ME |
236 -----------------------------------------------------------------------
237 |MORE TIME | YES | ME |
239 -----------------------------------------------------------------------
240 |PLAY TONE | YES | ME |
242 -----------------------------------------------------------------------
243 |POLL INTERVAL | YES | BASEBAND |
245 -----------------------------------------------------------------------
246 |POLLING OFF | YES | BASEBAND |
248 -----------------------------------------------------------------------
249 |REFRESH | YES | BASEBAND-ME |
251 -----------------------------------------------------------------------
252 |SELECT ITEM | YES | ME |
254 -----------------------------------------------------------------------
255 |SEND SHORT MESSAGE | YES | BASEBAND-ME |
257 -----------------------------------------------------------------------
258 |SEND SS | YES | BASEBAND-ME |
260 -----------------------------------------------------------------------
261 |SEND USSD | YES | BASEBAND-ME |
263 -----------------------------------------------------------------------
264 |SET UP CALL | YES | BASEBAND-ME |
266 -----------------------------------------------------------------------
267 |SET UP MENU | YES | ME |
269 -----------------------------------------------------------------------
270 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
271 |(MCC, MNC, LAC, cellId & | | |
274 -----------------------------------------------------------------------
275 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
278 -----------------------------------------------------------------------
279 |SET UP EVENT LIST | YES | BASEBAND |
281 -----------------------------------------------------------------------
282 |EVENT: MT CALL | YES | BASEBAND |
284 -----------------------------------------------------------------------
285 |EVENT: CALL CONNECTED | YES | BASEBAND |
287 -----------------------------------------------------------------------
288 |EVENT: CALL DISCONNECTED | YES | BASEBAND |
290 -----------------------------------------------------------------------
291 |EVENT: LOCATION STATUS | YES | BASEBAND |
293 -----------------------------------------------------------------------
294 |EVENT: USER ACTIVITY | NO | |
296 -----------------------------------------------------------------------
297 |EVENT: IDLE SCREEN AVAILABLE | NO | |
299 -----------------------------------------------------------------------
300 |EVENT: CARD READER STATUS | NO | |
302 -----------------------------------------------------------------------
303 |EVENT: LANGUAGE SELECTION | NO | |
305 -----------------------------------------------------------------------
306 |EVENT: BROWSER TERMINATION | NO | |
308 -----------------------------------------------------------------------
309 |EVENT: DATA AVAILABLE | NO | |
311 -----------------------------------------------------------------------
312 |EVENT: CHANNEL STATUS | NO | |
314 -----------------------------------------------------------------------
315 |EVENT: ACCESS TECHNOLOGY | YES | BASEBAND |
317 -----------------------------------------------------------------------
318 |EVENT: DISPLAY PARAMETERS | NO | |
321 -----------------------------------------------------------------------
322 |EVENT: LOCAL CONNECTION | NO | |
324 -----------------------------------------------------------------------
325 |EVENT: NETWORK SEARCH MODE | YES | BASEBAND |
328 -----------------------------------------------------------------------
329 |POWER ON CARD | NO | |
331 -----------------------------------------------------------------------
332 |POWER OFF CARD | NO | |
334 -----------------------------------------------------------------------
335 |PERFORM CARD APDU | NO | |
337 -----------------------------------------------------------------------
338 |GET READER STATUS | NO | |
339 |(Card reader status) | | |
341 -----------------------------------------------------------------------
342 |GET READER STATUS | NO | |
343 |(Card reader identifier) | | |
345 -----------------------------------------------------------------------
346 |TIMER MANAGEMENT | YES | BASEBAND-ME |
348 -----------------------------------------------------------------------
349 |PROVIDE LOCAL INFORMATION | YES | ME |
350 |(Date, Time, & Time Zone) | | |
352 -----------------------------------------------------------------------
353 |SET UP IDLE MODE TEXT | YES | ME |
355 -----------------------------------------------------------------------
356 |RUN AT COMMAND | YES | BASEBAND |
358 -----------------------------------------------------------------------
359 |SEND DTMF | YES | BASEBAND-ME |
361 -----------------------------------------------------------------------
362 |PROVIDE LOCAL INFORMATION | YES | ME |
365 -----------------------------------------------------------------------
366 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
367 |(Timing Advance) | | |
369 -----------------------------------------------------------------------
370 |Language Notification | YES | ME |
372 -----------------------------------------------------------------------
373 |LAUNCH BROWSER | YES | ME |
375 -----------------------------------------------------------------------
376 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
377 |(ACCESS TECHNOLOGY) | | |
379 -----------------------------------------------------------------------
380 |OPEN CHANNEL | NO | |
382 -----------------------------------------------------------------------
383 |CLOSE CHANNEL | NO | |
385 -----------------------------------------------------------------------
386 |RECEIVE DATA | NO | |
388 -----------------------------------------------------------------------
391 -----------------------------------------------------------------------
392 |GET CHANNEL STATUS | NO | |
394 -----------------------------------------------------------------------
395 |SERVICE SEARCH | NO | |
397 -----------------------------------------------------------------------
398 |GET SERVICE INFORMATION | NO | |
400 -----------------------------------------------------------------------
401 |DECLARE SERVICE | NO | |
403 -----------------------------------------------------------------------
404 |Text Attributes | YES | ME |
406 -----------------------------------------------------------------------
409 -----------------------------------------------------------------------
410 |Bearer Independent Protocol | NO | |
412 -----------------------------------------------------------------------
413 |VARIABLE TIMEOUT | YES | ME |
415 -----------------------------------------------------------------------
416 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
419 -----------------------------------------------------------------------
420 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
421 |(SEARCH MODE CHANGE) | | |
423 -----------------------------------------------------------------------
424 |Extended Launch Browser | NO | |
427 -----------------------------------------------------------------------
428 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
429 |(battery state) | | |
431 -----------------------------------------------------------------------
432 |RETRIEVE MULTIMEDIA MESSAGE | NO | |
434 -----------------------------------------------------------------------
435 |SUBMIT MULTIMEDIA MESSAGE | NO | |
437 -----------------------------------------------------------------------
438 |DISPLAY MULTIMEDIA MESSAGE | NO | |
440 -----------------------------------------------------------------------
443 -----------------------------------------------------------------------
444 |GET FRAMES STATUS | NO | |
446 -----------------------------------------------------------------------
447 |PROVIDE LOCAL INFORMATION | YES | BASEBAND |
450 -----------------------------------------------------------------------
451 |USSD Data Download and | NO | |
452 |application mode | | |
454 -----------------------------------------------------------------------
455 |EVENT: BROWSING STATUS | NO | |
457 -----------------------------------------------------------------------
458 |EVENT: MMS TRANSFER STATUS | NO | |
460 -----------------------------------------------------------------------
465 - 'silent' modem reset. Sometimes modems get in a bad state and have to reset
466 itself. Now oFono can be notified when a reset happens and do proper work to
467 put the modem back to work restoring the state before the reset.
469 - Lockdown support. Through the Lockdown property on the Modem D-Bus API, one
470 can power down the modem and lock it disallowing any other application to
471 use that modem. Useful for firmware update and similar stuff.
473 Short Messaging Service
474 =======================
476 - Unique identifier for incoming and outgoing SMS messages. Whenever a
477 message is received or sent by oFono, a unique ID is generated for that
478 message. The id is relevant to all segments of an SMS and in the case of
479 incoming messages is only generated when the SMS is fully assembled. The
480 hash used is SHA1. This unique identifier is used to identify the SMS
481 message to history plugins as well.
483 - SMS Status Report support. oFono allows requesting of SMS Status Reports
484 via the MessageManager UseDeliveryReports property. If enabled, oFono
485 will set the SRR bit and process incoming status reports. oFono takes
486 care of collating the status reports for multi-fragment messages. Once all
487 status reports are received, the UI is notified either via DBus or history
490 - Source / Destination port addressing scheme from 3GPP 23.040. A special
491 header is used to indicate the source / destination port of the application
492 this SMS message belongs to. oFono provides a handler registration
493 framework where plugins can handle the reception of such messages. The
494 handler can be registered to receive messages which contain a specific
495 source and destination port, or a wildcard. When such messages are received,
496 they are matched against the registered handlers and dispatched appropriately.
498 oFono takes care of de-fragmentation of such SMS messages, so the handler
499 is informed only once the entire message has been received, and the data
500 payload has been extracted.
502 - Smart Messaging Service - vCard support. oFono provides the ability to send
503 and receive vCard objects through the SmartMessaging interface. vCards can
504 be sent using the SendBusinessCard method and received using the
505 SmartMessagingAgent framework.
507 - Smart Messaging Service - vCalendar support. oFono provides the ability to
508 send and receive vCalendar objects through the SmartMessaging interface.
509 vCalendars can be sent using the SendAppointment method and received using
510 the SmartMessagingAgent framework.
512 - WAP PUSH notification support. oFono allows the reception of WAP PUSH
513 messages via SMS through the use of the PushNotification interface and the
514 PushNotificationAgent framework.
516 - Persisting of outgoing SMS messages. Whenever oFono is asked to send an SMS
517 message, it adds it to an internal queue and persists it on disk. The queue
518 is persistent across reboots of oFono and allows to queue SMS messages even
519 while the modem is offline.
524 - GPRS suspension event support. The packet data service may be temporarily
525 suspended while a circuit switched service such as voice call or SMS is
528 - GPRS context protocol support. oFono supports the followig types of GPRS
532 - Dual Stack (IPv4 + IPv6)
537 - GPS support. Many modem manufacturers provide a GPS unit with their modem
538 hardware. Upon client request oFono can turn this unit on or off and pass a
539 file descriptor in which client may receive the desired location reporting
545 - Fixed Dialing support. oFono reads the necessary bits from the SIM to
546 check if FDN support is allocated and enabled in the SIM. If enabled,
547 oFono halts the SIM initialization procedure and the modem remains in the
548 PRESIM state. In this state oFono will only allow emergency calls.
550 - Barred Dialing support. oFono reads the necessary bits from the SIM to
551 check if BDN support is allocated and enabled in the SIM. If enabled,
552 oFono halts the SIM initialization procedure and the modem remains in the
553 PRESIM state. In this state oFono will only allow emergency calls.
555 - Read / Write EFcfis / EFcphs-cff. oFono reads EFcfis/EFcphs-cff SIM files
556 to check if VoiceUnconditional call forwarding rule is enabled. If enabled,
557 ForwardingFlagOnSim will be set and VoiceUnconditional may contain the
558 "forwarded to" number if the number is available.
560 - Support SIM retry counters. oFono exports all the retry counters available on
561 SIM, e.g., PIN, PIN2, PUK and PUK2. Whenever an action changes them, a signal
562 is sent with the updated values, so user can keep track of how many times
563 he/she can still give a wrong pin before the SIM locking down.
568 - Fast dormancy support. A fast dormancy feature can be enabled in the
569 cellular modem to conserve power when the end user is not actively
570 using the device but some networking applications are online using
573 - Frequency Band Selection support. This feature allows the user to limit the
574 frequency bands in which the cellular modem can operate.
579 - TTY (hearing impaired) support, also known as Cellular Text Modem (CTM).
580 In case it's supported by the modem, oFono allows the user to enabled
581 or disable it through the TextTelephony interface.
586 - Emergency number reporting. During SIM initialization phase oFono reads
587 EFecc in order to bootstrap the emergency calling codes provided by the SIM.
588 Emergency number list is exposed via the EmergencyNumbers property on the
589 VoicecallManager interface. If SIM is present, list is the union of default
590 emergency numbers(112, 911), numbers in EFecc and Network / Modem reported
591 emergency numbers. If SIM is not present or EFecc has not been read yet,
592 list is the union of default emergency numbers(112, 911) and emergency
593 numbers without SIM(119, 118, 999, 110, 08 and 000).
595 - Emergency call reporting. When a voicecall is made to a number present
596 on the EmergencyNumbers list it is automatically flagged as an emergency
597 call. This is done by setting the Emergency property on the Voicecall
600 - Emergency Mode. oFono supports a concept of an 'Emergency Mode'. This mode
601 is activated when any emergency procedure is ongoing and restricts certain
602 actions (e.g. setting the modem offline). Emergency procedures are e.g.
603 ongoing emergency calls, or network initiated location requests related to
604 the emergency call. The state of the emergency mode is exposed via the
605 Emergency property on the org.ofono.Modem interface. This property is
606 intended to be used by power management daemons and other entities which
607 need to be aware of the ongoing emergency operation.
609 Supplementary Services
610 ======================
612 - CNAP support. The Calling Name Presentation supplementary service is
613 supported by oFono. One can query whether the service is provisioned in the
614 network by using the CallSettings interface. If the network reports the
615 calling name, it is presented on the Voicecall interface using the Name
616 property. If no calling name is given, the Name is empty.
618 - CDIP support. The Called Line Presentation is supported by oFono. One can
619 query whether the service is provisioned in the network by using the
620 CallSettings interface. If the network supports this service, the number
621 dialed by the remote party is presented through the Voicecall interface using
622 the IncomingLine property.
627 - Long phone number support. oFono supports dialing of phone numbers up to
630 - Supplementary service notifications related to mobile originated (MO) and
631 mobile terminated (MT) calls. oFono supports certain supplementary service
632 notifications, typically reported by CSSU and CSSI, that are related to
634 - outgoing call has been forwarded (+CSSI: 2)
635 - outgoing calls are barred (+CSSI: 5)
636 - outgoing call barred due to call barring on remote party (+CSSI: 6)
637 - incoming call is a forwarded call (+CSSU: 0)
638 - call has been put on hold by the remote party (+CSSU: 2)
639 - call has been retrieved by the remote party (+CSSU: 3)
640 - call has been added to a mpty call by the remote party (+CSSU: 4)
645 - Flight Mode support. oFono uses the 'Online' property on the Modem interface
646 that controls the state of the radio. When Online state is False, all
647 interfaces that depend on the radio being on are removed. Other interfaces
648 enter reduced functionality mode where only certain actions are available
649 that do not depend on the radio. E.g. setting various settings on the local