WebAPI/WebSTK: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
Line 94: Line 94:
** MozStkResponse
** MozStkResponse


In both MozStkCommand and MozStkCommand, we expose the content of 'Command Details' as:
In both MozStkCommand and MozStkResponse, we expose the content of 'Command Details' as:
* commandNumber
* number
* typeOfCommand
* type
* commandQualifier
* qualifier
So when a webapp tries to create a MozStkResponse, the webapp needs to create exactly the same 'Command Details' as it got from MozStkCommand.
So when a webapp tries to create a MozStkResponse, the webapp needs to create exactly the same 'Command Details' as it got from MozStkCommand.


Line 163: Line 163:
{
{
   /**
   /**
   * Command number is the number of command issued by ICC. And it is assigned  
   * The number of command issued by ICC. And it is assigned  
   * by ICC may take any hexadecimal value betweean '01' and 'FE'.
   * by ICC may take any hexadecimal value betweean '01' and 'FE'.
   *
   *
   * @see TS 11.14, clause 6.5.1
   * @see TS 11.14, clause 6.5.1
   */  
   */  
   readonly attribute unsigned short commandNumber;
   readonly attribute unsigned short number;


   /**
   /**
   * One of nsIDOMMozStkProactiveCommand.
   * One of CMD_*
   */   
   */   
   readonly attribute unsigned short typeOfCommand;  
   readonly attribute unsigned short type;  


   /**
   /**
   * Qualifiers specific to the command.
   * Qualifiers specific to the command.
   */  
   */  
   readonly attribute unsigned short commandQualifier;
   readonly attribute unsigned short qualifier;
    
    
   /**
   /**
   * Used when typeOfCommand in nsIDOMMozStkCommand is  
   * Used when type in nsIDOMMozStkCommand is  
   * DISPLAY_TEXT, SET_UP_IDLE_MODE_TEXT, REFRESH and SEND_*.
   * DISPLAY_TEXT, SET_UP_IDLE_MODE_TEXT, REFRESH and SEND_*.
   */
   */
   readonly attribute nsIDOMMozStkTextMessage textMessage;
   readonly attribute nsIDOMMozStkTextMessage textMessage;
   
   
   /**
   /**
   * Used when typeOfCommand in nsIDOMMozStkCommand is  
   * Used when type in nsIDOMMozStkCommand is  
   * SELECT_ITEM or SET_UP_MENU.
   * SELECT_ITEM or SET_UP_MENU.
   */   
   */   
Line 194: Line 193:


   /**
   /**
   * Used when typeOfCommand in nsIDOMMozStkCommand is  
   * Used when type in nsIDOMMozStkCommand is  
   * GET_INKEY or GET_INPUT.
   * GET_INKEY or GET_INPUT.
   */  
   */  
Line 200: Line 199:
   
   
   /**
   /**
   * Used when typeOfCommand in nsIDOMMozStkCommand is  
   * Used when type in nsIDOMMozStkCommand is  
   * LAUNCH_BROWSER.
   * LAUNCH_BROWSER.
   */  
   */  
Line 206: Line 205:
   
   
   /**
   /**
   * Used when typeOfCommand in nsIDOMMozStkCommand is  
   * Used when type in nsIDOMMozStkCommand is  
   * SET_UP_CALL.
   * SET_UP_CALL.
   */  
   */  
   readonly attribute nsIDOMMozStkSetUpCall setup;
   readonly attribute nsIDOMMozStkSetUpCall call;
};
};
</pre>
</pre>
Line 480: Line 479:
{
{
   /**
   /**
   * Command number from MozStkCommand..
   * number from MozStkCommand..
   *
   *
   * @see nsIDOMMozStkCommand.commandNumber
   * @see nsIDOMMozStkCommand.number
   */  
   */  
   readonly attribute unsigned short commandNumber;
   readonly attribute unsigned short number;


   /**
   /**
   * One of nsIDOMMozStkProactiveCommand.
   * One of nsIDOMMozStkCommand.type
   *
   *
   * @see nsIDOMMozStkCommand.typeOfCommand
   * @see nsIDOMMozStkCommand.type
   */   
   */   
   readonly attribute unsigned short typeOfCommand;  
   readonly attribute unsigned short type;  


   /**
   /**
   * Qualifiers specific to the command.
   * Qualifiers specific to the command.
   *
   *
   * @see nsIDOMMozStkCommand.commandQualifier
   * @see nsIDOMMozStkCommand.qualifier
   */  
   */  
   readonly attribute unsigned short commandQualifier;
   readonly attribute unsigned short qualifier;


   /**
   /**
   * One of nsIDOMMozStkResultCode.
   * One of RESULT_*
   */  
   */  
   attribute unsigned short resultCode;
   attribute unsigned short resultCode;
Line 557: Line 556:
  * @see TS 11.14, clause 13.4
  * @see TS 11.14, clause 13.4
  */
  */
interface nsIDOMMozStkProactiveCommand : nsISupports
partial interface nsIDOMMozStkCommand : nsISupports
{
{
   const unsigned short REFRESH               = 0x01;
  /**
   const unsigned short SET_UP_CALL           = 0x10;
  * STK Proactive commands.
   const unsigned short SEND_SS               = 0x11;
  *
   const unsigned short SEND_USSD             = 0x12;
  * @see TS 11.14, clause 13.4
   const unsigned short SEND_SMS             = 0x13;
  */
   const unsigned short SEND_DTMF             = 0x14;
   const unsigned short CMD_REFRESH               = 0x01;
   const unsigned short LAUNCH_BROWSER       = 0x15;
   const unsigned short CMD_SET_UP_CALL           = 0x10;
   const unsigned short DISPLAY_TEXT         = 0x21;
   const unsigned short CMD_SEND_SS               = 0x11;
   const unsigned short GET_INKEY             = 0x22;
   const unsigned short CMD_SEND_USSD             = 0x12;
   const unsigned short GET_INPUT             = 0x23;
   const unsigned short CMD_SEND_SMS             = 0x13;
   const unsigned short SELECT_ITEM           = 0x24;
   const unsigned short CMD_SEND_DTMF             = 0x14;
   const unsigned short SET_UP_MENU           = 0x25;
   const unsigned short CMD_LAUNCH_BROWSER       = 0x15;
   const unsigned short SET_UP_IDLE_MODE_TEXT = 0x28;
   const unsigned short CMD_DISPLAY_TEXT         = 0x21;
};
   const unsigned short CMD_GET_INKEY             = 0x22;
   const unsigned short CMD_GET_INPUT             = 0x23;
   const unsigned short CMD_SELECT_ITEM           = 0x24;
   const unsigned short CMD_SET_UP_MENU           = 0x25;
   const unsigned short CMD_SET_UP_IDLE_MODE_TEXT = 0x28;
}


/**
/**
Line 579: Line 583:
  * @see TS 11.14, clause 12.12
  * @see TS 11.14, clause 12.12
  */
  */
interface nsIDOMMozStkResultCode : nsISupports
partial interface nsIDOMMozStkResponse : nsISupports
{
{
  /**
  * STK Result code.
  *
  * @see TS 11.14, clause 12.12
  */
   /**
   /**
   * Results '0X' and '1X' indicate that the command has been performed.
   * Results '0X' and '1X' indicate that the command has been performed.
   */
   */
   /** Command performed successfully */
   /** Command performed successfully */
   const unsigned short OK                               = 0x00;
   const unsigned short RESULT_OK                               = 0x00;


   /** Command performed with partial comprehension */
   /** Command performed with partial comprehension */
   const unsigned short PRFRMD_WITH_PARTIAL_COMPREHENSION = 0x01;
   const unsigned short RESULT_PRFRMD_WITH_PARTIAL_COMPREHENSION = 0x01;


   /** Command performed, with missing information */
   /** Command performed, with missing information */
   const unsigned short PRFRMD_WITH_MISSING_INFO         = 0x02;
   const unsigned short RESULT_PRFRMD_WITH_MISSING_INFO         = 0x02;


   /** REFRESH performed with additional EFs read */
   /** REFRESH performed with additional EFs read */
   const unsigned short PRFRMD_WITH_ADDITIONAL_EFS_READ   = 0x03;
   const unsigned short RESULT_PRFRMD_WITH_ADDITIONAL_EFS_READ   = 0x03;
 
  /** Command performed, but modified by call control by NAA */
  const unsigned short PRFRMD_MODIFIED_BY_NAA            = 0x05;


   /** Command performed successfully, limited service */
   /** Command performed successfully, limited service */
   const unsigned short PRFRMD_LIMITED_SERVICE           = 0x06;
   const unsigned short RESULT_PRFRMD_LIMITED_SERVICE           = 0x06;
 
  /** Command performed with modification */
  const unsigned short PRFRMD_WITH_MODIFICATION          = 0x07;
 
  /** REFRESH performed but indicated NAA was not active */
  const unsigned short PRFRMD_NAA_NOT_ACTIVE            = 0x08;


   /** Proactive UICC session terminated by the user */
   /** Proactive UICC session terminated by the user */
   const unsigned short UICC_SESSION_TERM_BY_USER         = 0x10;
   const unsigned short RESULT_UICC_SESSION_TERM_BY_USER         = 0x10;


   /** Backward move in the proactive UICC session requested by the user */
   /** Backward move in the proactive UICC session requested by the user */
   const unsigned short BACKWARD_MOVE_BY_USER             = 0x11;
   const unsigned short RESULT_BACKWARD_MOVE_BY_USER             = 0x11;


   /** No response from user */
   /** No response from user */
   const unsigned short NO_RESPONSE_FROM_USER             = 0x12;
   const unsigned short RESULT_NO_RESPONSE_FROM_USER             = 0x12;


   /** Help information required by the user */
   /** Help information required by the user */
   const unsigned short HELP_INFO_REQUIRED               = 0x13;
   const unsigned short RESULT_HELP_INFO_REQUIRED               = 0x13;


   /** USSD or SS transaction terminated by the user */
   /** USSD or SS transaction terminated by the user */
   const unsigned short USSD_SS_SESSION_TERM_BY_USER     = 0x14;
   const unsigned short RESULT_USSD_SS_SESSION_TERM_BY_USER     = 0x14;


   /*
   /**
   * Results '2X' indicate to the UICC that it may be worth re-trying the
   * Results '2X' indicate to the UICC that it may be worth re-trying the
   * command at a later opportunity.
   * command at a later opportunity.
   */
   */
   /** Terminal currently unable to process command */
   /** Terminal currently unable to process command */
   const unsigned short TERMINAL_CRNTLY_UNABLE_TO_PROCESS = 0x20;
   const unsigned short RESULT_TERMINAL_CRNTLY_UNABLE_TO_PROCESS = 0x20;


   /** Network currently unable to process command */
   /** Network currently unable to process command */
   const unsigned short NETWORK_CRNTLY_UNABLE_TO_PROCESS = 0x21;
   const unsigned short RESULT_NETWORK_CRNTLY_UNABLE_TO_PROCESS = 0x21;


   /** User did not accept the proactive command */
   /** User did not accept the proactive command */
   const unsigned short USER_NOT_ACCEPT                   = 0x22;
   const unsigned short RESULT_USER_NOT_ACCEPT                   = 0x22;


   /** User cleared down call before connection or network release */
   /** User cleared down call before connection or network release */
   const unsigned short USER_CLEAR_DOWN_CALL             = 0x23;
   const unsigned short RESULT_USER_CLEAR_DOWN_CALL             = 0x23;
 
  /** Action in contradiction with the current timer state */
  const unsigned short CONTRADICTION_WITH_TIMER          = 0x24;
 
  /** Interaction with call control by NAA, temporary problem */
  const unsigned short NAA_CALL_CONTROL_TEMPORARY        = 0x25;


   /** Launch browser generic error code */
   /** Launch browser generic error code */
   const unsigned short LAUNCH_BROWSER_ERROR             = 0x26;
   const unsigned short RESULT_LAUNCH_BROWSER_ERROR             = 0x26;


   /*
   /**
   * Results '3X' indicate that it is not worth the UICC re-trying with an
   * Results '3X' indicate that it is not worth the UICC re-trying with an
   * identical command, as it will only get the same response. However, the
   * identical command, as it will only get the same response. However, the
Line 654: Line 649:
   */
   */
   /** Command beyond terminal's capabilities */
   /** Command beyond terminal's capabilities */
   const unsigned short BEYOND_TERMINAL_CAPABILITY       = 0x30;
   const unsigned short RESULT_BEYOND_TERMINAL_CAPABILITY       = 0x30;
    
    
   /** Command type not understood by terminal */
   /** Command type not understood by terminal */
   const unsigned short CMD_TYPE_NOT_UNDERSTOOD           = 0x31;
   const unsigned short RESULT_CMD_TYPE_NOT_UNDERSTOOD           = 0x31;


   /** Command data not understood by terminal */
   /** Command data not understood by terminal */
   const unsigned short CMD_DATA_NOT_UNDERSTOOD           = 0x32;
   const unsigned short RESULT_CMD_DATA_NOT_UNDERSTOOD           = 0x32;


   /** Command number not known by terminal */
   /** Command number not known by terminal */
   const unsigned short CMD_NUM_NOT_KNOWN                 = 0x33;
   const unsigned short RESULT_CMD_NUM_NOT_KNOWN                 = 0x33;


   /** SS Return Error */
   /** SS Return Error */
   const unsigned short SS_RETURN_ERROR                   = 0x34;
   const unsigned short RESULT_SS_RETURN_ERROR                   = 0x34;


   /** SMS RP-ERROR */
   /** SMS RP-ERROR */
   const unsigned short SMS_RP_ERROR                     = 0x35;
   const unsigned short RESULT_SMS_RP_ERROR                     = 0x35;


   /** Error, required values are missing */
   /** Error, required values are missing */
   const unsigned short REQUIRED_VALUES_MISSING           = 0x36;
   const unsigned short RESULT_REQUIRED_VALUES_MISSING           = 0x36;


   /** USSD Return Error */
   /** USSD Return Error */
   const unsigned short USSD_RETURN_ERROR                 = 0x37;
   const unsigned short RESULT_USSD_RETURN_ERROR                 = 0x37;


   /** MultipleCard commands error */
   /** MultipleCard commands error */
   const unsigned short MULTI_CARDS_CMD_ERROR             = 0x38;
   const unsigned short RESULT_MULTI_CARDS_CMD_ERROR             = 0x38;


   /**
   /**
Line 684: Line 679:
   * USIM, permanent problem
   * USIM, permanent problem
   */
   */
   const unsigned short USIM_CALL_CONTROL_PERMANENT       = 0x39;
   const unsigned short RESULT_USIM_CALL_CONTROL_PERMANENT       = 0x39;


   /** Bearer Independent Protocol error */
   /** Bearer Independent Protocol error */
   const unsigned short BIP_ERROR                         = 0x3a;
   const unsigned short RESULT_BIP_ERROR                         = 0x3a;
 
  /** Access Technology unable to process command */
  const unsigned short ACCESS_TECH_UNABLE_TO_PROCESS    = 0x3b;
 
  /** Frames error */
  const unsigned short FRAMES_ERROR                      = 0x3c;
};
};
</pre>
</pre>


Line 703: Line 690:
<pre>
<pre>
mozIcc.onstkcommand = function (command) {
mozIcc.onstkcommand = function (command) {
   switch (command.typeOfCommand) {
   switch (command.type) {
     case mozIcc.proac.SET_UP_MENU:
     case MozStkCommand.SET_UP_MENU:
       var menu = command.menu;
       var menu = command.menu;
       // create a Menu-like UI according to 'menu'
       // create a Menu-like UI according to 'menu'
Line 723: Line 710:
// 'command' is got from onstkcommand
// 'command' is got from onstkcommand
// and assume it's a Select Item command.
// and assume it's a Select Item command.
var response = new mozIcc.MozStkResponse(command);
var response = new MozStkResponse(command);
response.resultCode = MozStkResultCode.RESULT_OK;
response.resultCode = MozStkResponse.RESULT_OK;
// 'id' is got from the chosen item identifier (menu.item[].identifier)
// 'id' is got from the chosen item identifier (menu.item[].identifier)
response.itemIdentifier = id;
response.itemIdentifier = id;
Line 733: Line 720:
<pre>
<pre>
mozIcc.onstkcommand = function (command) {
mozIcc.onstkcommand = function (command) {
   switch (command.typeOfCommand) {
   switch (command.type) {
     case MozStkProactiveCommand.GET_INPUT:
     case MozStkCommand.GET_INPUT:
       var input = command.input;
       var input = command.input;
       // create a TextInput-like UI according to 'input'
       // create a TextInput-like UI according to 'input'
Line 744: Line 731:
function onTextInput(input) {
function onTextInput(input) {
   var response = new MozStkResponse(command);
   var response = new MozStkResponse(command);
   response.resultCode = MozStkResultCode.RESULT_OK;
   response.resultCode = MozStkResponse.RESULT_OK;
   response.input = input;
   response.input = input;
   mozIcc.sendStkResponse(response);
   mozIcc.sendStkResponse(response);
Line 753: Line 740:
<pre>
<pre>
mozIcc.onstkcommand = function (command) {
mozIcc.onstkcommand = function (command) {
   switch (command.typeOfCommand) {
   switch (command.type) {
     case MozStkProactiveCommand.SET_UP_CALL:
     case MozStkCommand.SET_UP_CALL:
       var setup = command.param.setup;
       var call = command.call;
       // create a Text Message UI to ask user confirmation  
       // create a Text Message UI to ask user confirmation  
       // for make the MO call.
       // for make the MO call.
Line 765: Line 752:
function onUserConfirm(confirm) {
function onUserConfirm(confirm) {
   var response = new MozStkResponse(command);
   var response = new MozStkResponse(command);
   response.resultCode = MozStkResultCode.RESULT_OK;
   response.resultCode = MozStkResponse.RESULT_OK;
   response.confirmation = confirm;
   response.confirmation = confirm;
   mozIcc.sendStkResponse(response);
   mozIcc.sendStkResponse(response);

Revision as of 13:53, 28 June 2012

Overview

To provide DOM API for the STK(SIM Toolkit), or CAT (Card Application Toolkit), which allows web contents can interact with SIM applications.

Interface

  • These interface will be added in MozIccManager

Event handlers for receiving messages from ICC to ME

These event handlers will be invoked when there are proactive commands or session end notification sent from ICC.

Proactive Command

  /**
   * The 'stkcommand' event is notified whenever STK Proactive Command is
   * issued from ICC.
   */ 
  attribute nsIDOMEventListener onstkcommand;

Session End Notificaiton

  /**
   * 'stksessionend' event is notified whenever STK Session is terminated by 
   * ICC.
   */ 
  attribute nsIDOMEventListener onstksessionend;

Send Message from ME to ICC

There are two kinds of messages will be sent from ME to ICC

  • Terminal Response
    • Once the ME has made its attempt to execute a proactive command from the ICC, the ME shall inform the ICC of the success or otherwise of that command, by using TERMINAL RESPONSE.
  • Envelope command
    • Envelope command is used to transfer STK information from ME to ICC.

Send Terminal Response

  /**
   * Send the response back to ICC after an attempt to execute STK Proactive 
   * Command.
   */ 
  void sendStkResponse(in nsIDOMMozStkResponse response);

Send Envelope Command

Currently only support "Menu Selection"

  /**
   * Send the "Menu Selection" Envelope command to ICC for menu selection.
   *
   * @param itemIdentifier
   *        The identifier of the item selected by user.
   * @param helpRequested
   *        true if user requests to provide help information, false otherwise.
   *        
   */ 
  void sendStkMenuSelection(in unsigned short itemIdentifier, in boolean helpRequested);

STK message format

  • TS 102.223, Annex C for the structure of STK communications

The specification of the message received from ICC and sent to ICC.

Basically, a STK message is of a BER-TLV object, which contains several Comprehension-TLV objects (TLV : Tag-Length-Value)

                      ----- ----- ------------------------------------
            BER-TLV  |  T  |  L  |  V - Several Comprehension-TLVs    |
                      ----- ----- ------------------------------------
                                 /                                     \
                                /                                       \
                                ----- ----- -----       ----- ----- -----
Comprehension-TLV              |  T  |  L  |  V  | ... |  T  |  L  |  V  |
                                ----- ----- -----       ----- ----- -----

Each STK message consists of at least two mandatory Comprehension-TLVs

  • Command Details
  • Device Identities

The remaining Comprehension-TLVs varies according to different type of STK message.


For the "Command Details" data object,
this data object shall be identical to the command details data object (including the comprehension required flag) given by the UICC in the proactive command to which the terminal is giving the result.

And there two kinds of STK messages

  • From ICC to ME
    • MozStkCommand
  • From ME to ICC
    • MozStkResponse

In both MozStkCommand and MozStkResponse, we expose the content of 'Command Details' as:

  • number
  • type
  • qualifier

So when a webapp tries to create a MozStkResponse, the webapp needs to create exactly the same 'Command Details' as it got from MozStkCommand.

From ICC to ME

The STK message sent from ICC to ME called 'Proactive Command'. And we use MozStkCommand to represent 'Proactive Command'.
For example, a Proactive Command SET_UP_MENU whose Comprehension-TLVs will be looked like

   ---------------- -------------- ------------- ----------       ----------
  | CmdDetails-TLV | DeviceId-TLV | AlphaId-TLV | Item-TLV | ... | Item-TLV |
   ---------------- -------------- ------------- ----------       ----------
  • CmdDetails - Details of this proactive command.
    • typeOfCommand is SET_UP_MENU
  • DeviceId - The source and destination of this proactive command.
  • AlphaId - The title of this menu
  • Item - The items in this menu

In designing this message format, we wrap up the Comprehension-TLVs other than "Command Details" and "Device Identities" to a more high level UI component according to the typeOfCommand.

   ---------------- -------------- --------------
  | CmdDetails-TLV | DeviceId-TLV | UI Component |
   ---------------- -------------- --------------

The UI componet includes

  • Text Message
  • Menu
  • Input
  • Call set up
  • Launch Browser

So web apps can parse the UI componet according to the typeOfCommand.

In this case, web apps can display a Menu-like UI according to this UI component.

   --------
  | Title  |
   --------
  | Item 1 |
   --------
  | Item 2 |
   --------

STK Command Event

StkCommandEvent will be the parameter passed in onstkcommand handler

interface nsIDOMMozStkCommandEvent : nsIDOMEvent 
{
  readonly attribute nsIDOMMozStkCommand command;
};

STK command

interface nsIDOMMozStkCommand : nsISupports
{
  /**
   * The number of command issued by ICC. And it is assigned 
   * by ICC may take any hexadecimal value betweean '01' and 'FE'.
   *
   * @see TS 11.14, clause 6.5.1
   */ 
  readonly attribute unsigned short number;

  /**
   * One of CMD_*
   */  
  readonly attribute unsigned short type; 

  /**
   * Qualifiers specific to the command.
   */ 
  readonly attribute unsigned short qualifier;
  
  /**
   * Used when type in nsIDOMMozStkCommand is 
   * DISPLAY_TEXT, SET_UP_IDLE_MODE_TEXT, REFRESH and SEND_*.
   */
  readonly attribute nsIDOMMozStkTextMessage textMessage;
 
  /**
   * Used when type in nsIDOMMozStkCommand is 
   * SELECT_ITEM or SET_UP_MENU.
   */  
  readonly attribute nsIDOMMozStkMenu menu;

  /**
   * Used when type in nsIDOMMozStkCommand is 
   * GET_INKEY or GET_INPUT.
   */ 
  readonly attribute nsIDOMMozStkInput input;
 
  /**
   * Used when type in nsIDOMMozStkCommand is 
   * LAUNCH_BROWSER.
   */ 
  readonly attribute nsIDOMMozStkBrowserSetting setting;
 
  /**
   * Used when type in nsIDOMMozStkCommand is 
   * SET_UP_CALL.
   */ 
  readonly attribute nsIDOMMozStkSetUpCall call;
};

UI parts - The UI Component contained in MozStkCommand

Text Message
interface nsIDOMMozStkTextMessage : nsISupports
{
  /**
   * Text String.
   *
   * @see TS 11.14, clause 12.15, Text String.
   */ 
  readonly attribute DOMString text;

  /**
   * Indicate this text message is high priority or normal priority.
   *
   * @see TS 11.14, clause 12.6, Command Qualifier, Display Text, bit 1.
   *
   * High priority text shall be displayed on the screen immediately, except if 
   * there is a conflict of priority level of alerting such as incoming calls 
   * or a low battery warning. In that situation, the resolution is left to 
   * the terminal. If the command is rejected in spite of the high priority, 
   * the terminal shall inform the ICC with resultCode is
   * TERMINAL_CRNTLY_UNABLE_TO_PROCESS in MozStkResponse.
   *
   * true: high priority
   * false: normal priority
   */ 
  readonly attribute boolean isHighPriority;

  /**
   * Need to wait for user to clear message or not.
   *
   * @see TS 11.14, clause 12.6, Command Qualifier, Display Text, bit 8.
   *
   * If this attribute is true, but user doesn't give any input within a period
   * of time(said 30 secs), the terminal shall inform the ICC with resultCode 
   * is NO_RESPONSE_FROM_USER in MozStkResponse.
   *
   * true: Wait for user to clear message.
   * false: clear message after a delay.
   */ 
  readonly attribute boolean userClear;

  /**
   * Need to response immediately or not.
   *
   * @see TS 11.14, clause 12.43, Immediate response.
   *
   * When this attribute is true, the terminal shall immediately send 
   * MozStkResponse with resultCode is OK.
   *
   * true: The terminal shall send response immediately.
   * false: otherwise.
   */
  readonly attribute boolean responseNeeded;
};
Menu
interface nsIDOMMozStkItem : nsISupports
{
  /**
   * Identifier of item.
   *
   * The identifier is a single byte between '01' and 'FF'. Each item shall 
   * have a unique identifier within an Item list.
   */ 
  readonly attribute unsigned short identifier;
  
  /**
   * Text string of item.
   */ 
  readonly attribute DOMString text;
};
interface nsIDOMMozStkMenu : nsISupports
{
  /**
   * STK Menu Presentation types.
   */
  const unsigned short TYPE_NOT_SPECIFIED      = 0x00;
  const unsigned short TYPE_DATA_VALUES        = 0x01;
  const unsigned short TYPE_NAVIGATION_OPTIONS = 0x03;

  /**
   * Array of nsIDOMMozStkItem.
   *
   * @see TS 11.14, clause 12.9
   */ 
  readonly attribute jsval items; // nsIDOMMozStkItem[]

  /**
   * Presentation type, one of TYPE_*.
   */ 
  readonly attribute unsigned short presentationType;
  
  /**
   * Title of the menu.
   */ 
  readonly attribute DOMString title;

  /**
   * Default item identifier of the menu.
   */ 
  readonly attribute unsigned short defaultItem;

  /**
   * Help information available or not.
   * 
   * @see TS 11.14, clause 12.6, Command Qualifier, SET UP MENU, bit 8.
   *
   * true: help information available.
   * false: no help information available.
   */ 
  readonly attribute boolean isHelpAvailable;
};
Input
interface nsIDOMMozStkInput : nsISupports
{
  /**
   * Text for the ME to display in conjunction with asking the user to respond.
   */ 
  readonly attribute DOMString text;

  /**
   * Minimum length of response.
   */ 
  readonly attribute unsigned short minLength;

  /**
   * Maximum length of response.
   */  
  readonly attribute unsigned short maxLength;

  /**
   * Text for the ME to display, corresponds to a default text string offered 
   * by the ICC.
   */ 
  readonly attribute DOMString defaultText;

  /**
   * Input format.
   *
   * @see TS 11.14, clause 12.6, Command Qualifier, GET INPUT, bit 1.
   *
   * true: Alphabet set.
   * false: Digits only.
   */ 
  readonly attribute boolean isAlphabet;

  /**
   * Alphabet encoding.
   *
   * @see TS 11.14, clause 12.6, Command Qualifier, GET INPUT, bit 2.
   *
   * true: UCS2 alphabet.
   * false: default SMS alphabet.
   */ 
  readonly attribute boolean isUCS2;
  
  /**
   * Visibility of input.
   *
   * @see TS 11.14, clause 12.6, Command Qualifier, GET INPUT, bit 3.
   *
   * true: User input shall not be revealed in any way.
   * false: ME may echo user input on the display.
   */ 
  readonly attribute boolean hideInput;
  
  /**
   * Yes/No response is requested.
   *
   * @see TS 11.14, clause 12.6, Command Qualifier, GET INKEY, bit 3.
   *
   * true: Yes/No response is requested.
   * false: Character sets (Alphabet set and UCS2) are enabled.
   */ 
  readonly attribute boolean yesNo;

  /**
   * User input in Packed or unpacked format.
   *
   * @see TS 11.14, clause 12.6, Command Qualifier, GET INPUT, bit 4.
   *
   * true: User input to be in SMS packed format.
   * false: User input to be in unpacked format.
   */ 
  readonly attribute boolean isPacked;

  /**
   * Help information available or not.
   * 
   * @see TS 11.14, clause 12.6, Command Qualifier, GET INPUT/GET INKEY, bit 8.
   *
   * true: help information available.
   * false: no help information available.
   */ 
  readonly attribute boolean isHelpAvailable;
};
Browser Settings
interface nsIDOMMozStkBrowserSetting : nsISupports
{
  /**
   * Browser launch mode.
   */ 
  const unsigned short MODE_LAUNCH_IF_NOT_ALREADY_LAUNCHED = 0x00;
  // 0x01 is not used.
  const unsigned short MODE_USING_EXISTING_BROWSER         = 0x02;
  const unsigned short MODE_USING_NEW_BROWSER              = 0x03;

  /**
   * Confirm message to launch browser.
   */ 
  readonly attribute nsIDOMMozStkTextMessage confirmMessage;

  /**
   * The URL to be opened by browser.
   */ 
  readonly attribute DOMString url;

  /**
   * One of MODE_*.
   */ 
  readonly attribute unsigned short mode;
};
Call Set Up
interface nsIDOMMozStkSetUpCall : nsISupports
{
  /**
   * The Dialling number.
   */ 
  readonly attribute DOMString address;

  /**
   * The text message used in user confirmation phase.
   */ 
  readonly attribute nsIDOMMozStkTextMessage confirmMessage;

  /**
   * The text message used in call set up phase.
   */ 
  readonly attribute nsIDOMMozStkTextMessage callMessage;
};

From ME to ICC

  • Terminal Response
  • Envelope Command

STK response

[Constructor (nsIDOMMozStkCommand)]
interface nsIDOMMozStkResponse : nsISupports
{
  /**
   * number from MozStkCommand..
   *
   * @see nsIDOMMozStkCommand.number
   */ 
  readonly attribute unsigned short number;

  /**
   * One of nsIDOMMozStkCommand.type
   *
   * @see nsIDOMMozStkCommand.type
   */  
  readonly attribute unsigned short type; 

  /**
   * Qualifiers specific to the command.
   *
   * @see nsIDOMMozStkCommand.qualifier
   */ 
  readonly attribute unsigned short qualifier;

  /**
   * One of RESULT_*
   */ 
  attribute unsigned short resultCode;

  /**
   * The identifier of the item selected by user.
   *
   * @see nsIDOMMozStkItem.identifier
   */ 
  attribute unsigned short itemIdentifier;

  /**
   * User input.
   */ 
  attribute DOMString input;

  /**
   * Alphabet encoding.
   *
   * @see nsIDOMMozStkInput.isUCS2
   */ 
  attribute boolean isUCS2;

  /**
   * YES/NO response.
   *
   * @see nsIDOMMozStkInput.yesNo
   */ 
  attribute boolean yesNo;

  /**
   * Packed or unpacked format.
   *
   * @see nsIDOMMozStkInput.isPacked
   */ 
  attribute boolean isPacked;

  /**
   * User has accepted or rejected the call during STK_CMD_CALL_SET_UP.
   * 
   * @see RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM
   *
   * true: Confirmed by User.
   * false: Rejected by User.
   */ 
  attribute boolean confirmation;
};

STK constants

/**
 * STK Proactive commands.
 *
 * @see TS 11.14, clause 13.4
 */
partial interface nsIDOMMozStkCommand : nsISupports
{
  /**
   * STK Proactive commands.
   *
   * @see TS 11.14, clause 13.4
   */
  const unsigned short CMD_REFRESH               = 0x01;
  const unsigned short CMD_SET_UP_CALL           = 0x10;
  const unsigned short CMD_SEND_SS               = 0x11;
  const unsigned short CMD_SEND_USSD             = 0x12;
  const unsigned short CMD_SEND_SMS              = 0x13;
  const unsigned short CMD_SEND_DTMF             = 0x14;
  const unsigned short CMD_LAUNCH_BROWSER        = 0x15;
  const unsigned short CMD_DISPLAY_TEXT          = 0x21;
  const unsigned short CMD_GET_INKEY             = 0x22;
  const unsigned short CMD_GET_INPUT             = 0x23;
  const unsigned short CMD_SELECT_ITEM           = 0x24;
  const unsigned short CMD_SET_UP_MENU           = 0x25;
  const unsigned short CMD_SET_UP_IDLE_MODE_TEXT = 0x28;
}

/**
 * STK Result code.
 *
 * @see TS 11.14, clause 12.12
 */
partial interface nsIDOMMozStkResponse : nsISupports
{
  /**
   * STK Result code.
   *
   * @see TS 11.14, clause 12.12
   */

  /**
   * Results '0X' and '1X' indicate that the command has been performed.
   */
  /** Command performed successfully */
  const unsigned short RESULT_OK                                = 0x00;

  /** Command performed with partial comprehension */
  const unsigned short RESULT_PRFRMD_WITH_PARTIAL_COMPREHENSION = 0x01;

  /** Command performed, with missing information */
  const unsigned short RESULT_PRFRMD_WITH_MISSING_INFO          = 0x02;

  /** REFRESH performed with additional EFs read */
  const unsigned short RESULT_PRFRMD_WITH_ADDITIONAL_EFS_READ   = 0x03;

  /** Command performed successfully, limited service */
  const unsigned short RESULT_PRFRMD_LIMITED_SERVICE            = 0x06;

  /** Proactive UICC session terminated by the user */
  const unsigned short RESULT_UICC_SESSION_TERM_BY_USER         = 0x10;

  /** Backward move in the proactive UICC session requested by the user */
  const unsigned short RESULT_BACKWARD_MOVE_BY_USER             = 0x11;

  /** No response from user */
  const unsigned short RESULT_NO_RESPONSE_FROM_USER             = 0x12;

  /** Help information required by the user */
  const unsigned short RESULT_HELP_INFO_REQUIRED                = 0x13;

  /** USSD or SS transaction terminated by the user */
  const unsigned short RESULT_USSD_SS_SESSION_TERM_BY_USER      = 0x14;

  /**
   * Results '2X' indicate to the UICC that it may be worth re-trying the
   * command at a later opportunity.
   */
  /** Terminal currently unable to process command */
  const unsigned short RESULT_TERMINAL_CRNTLY_UNABLE_TO_PROCESS = 0x20;

  /** Network currently unable to process command */
  const unsigned short RESULT_NETWORK_CRNTLY_UNABLE_TO_PROCESS  = 0x21;

  /** User did not accept the proactive command */
  const unsigned short RESULT_USER_NOT_ACCEPT                   = 0x22;

  /** User cleared down call before connection or network release */
  const unsigned short RESULT_USER_CLEAR_DOWN_CALL              = 0x23;

  /** Launch browser generic error code */
  const unsigned short RESULT_LAUNCH_BROWSER_ERROR              = 0x26;

  /**
   * Results '3X' indicate that it is not worth the UICC re-trying with an
   * identical command, as it will only get the same response. However, the
   * decision to retry lies with the application.
   */
  /** Command beyond terminal's capabilities */
  const unsigned short RESULT_BEYOND_TERMINAL_CAPABILITY        = 0x30;
  
  /** Command type not understood by terminal */
  const unsigned short RESULT_CMD_TYPE_NOT_UNDERSTOOD           = 0x31;

  /** Command data not understood by terminal */
  const unsigned short RESULT_CMD_DATA_NOT_UNDERSTOOD           = 0x32;

  /** Command number not known by terminal */
  const unsigned short RESULT_CMD_NUM_NOT_KNOWN                 = 0x33;

  /** SS Return Error */
  const unsigned short RESULT_SS_RETURN_ERROR                   = 0x34;

  /** SMS RP-ERROR */
  const unsigned short RESULT_SMS_RP_ERROR                      = 0x35;

  /** Error, required values are missing */
  const unsigned short RESULT_REQUIRED_VALUES_MISSING           = 0x36;

  /** USSD Return Error */
  const unsigned short RESULT_USSD_RETURN_ERROR                 = 0x37;

  /** MultipleCard commands error */
  const unsigned short RESULT_MULTI_CARDS_CMD_ERROR             = 0x38;

  /**
   * Interaction with call control by USIM or MO short message control by
   * USIM, permanent problem
   */
  const unsigned short RESULT_USIM_CALL_CONTROL_PERMANENT       = 0x39;

  /** Bearer Independent Protocol error */
  const unsigned short RESULT_BIP_ERROR                         = 0x3a;
};

Examples

Show STK menu

mozIcc.onstkcommand = function (command) {
  switch (command.type) {
    case MozStkCommand.SET_UP_MENU:
      var menu = command.menu;
      // create a Menu-like UI according to 'menu'
    break;
  }
};

Menu Selection

function menuSelection(id, helpRequested) {
  mozIcc.sendMenuSelection(id, helpRequested);
}

Select Item

// 'command' is got from onstkcommand
// and assume it's a Select Item command.
var response = new MozStkResponse(command);
response.resultCode = MozStkResponse.RESULT_OK;
// 'id' is got from the chosen item identifier (menu.item[].identifier)
response.itemIdentifier = id;
mozIcc.sendStkResponse(response);

Get Input

mozIcc.onstkcommand = function (command) {
  switch (command.type) {
    case MozStkCommand.GET_INPUT:
      var input = command.input;
      // create a TextInput-like UI according to 'input'
    break;
  }
};

// onTextInput is the callback when user inputs complete.
function onTextInput(input) {
  var response = new MozStkResponse(command);
  response.resultCode = MozStkResponse.RESULT_OK;
  response.input = input;
  mozIcc.sendStkResponse(response);
}

Set Up Call

mozIcc.onstkcommand = function (command) {
  switch (command.type) {
    case MozStkCommand.SET_UP_CALL:
      var call = command.call;
      // create a Text Message UI to ask user confirmation 
      // for make the MO call.
    break;
  }
};

// onUserConfirm is the callback when user confirms the call.
function onUserConfirm(confirm) {
  var response = new MozStkResponse(command);
  response.resultCode = MozStkResponse.RESULT_OK;
  response.confirmation = confirm;
  mozIcc.sendStkResponse(response);
}

TODO

  • Icon
  • Duration
  • Tone
  • Command Qualifier in CALL_SET_UP
  • multi-SIM

Reference