WebAPI/WebMobileConnection/Multi-SIM: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 107: Line 107:
   nsIDOMDOMRequest selectNetwork(in unsigned long clientId, in nsIDOMWindow window, in nsIDOMMozMobileNetworkInfo network);
   nsIDOMDOMRequest selectNetwork(in unsigned long clientId, in nsIDOMWindow window, in nsIDOMMozMobileNetworkInfo network);
   nsIDOMDOMRequest selectNetworkAutomatically(in unsigned long clientId, in nsIDOMWindow window);
   nsIDOMDOMRequest selectNetworkAutomatically(in unsigned long clientId, in nsIDOMWindow window);
 
 
   nsIDOMDOMRequest setRoamingPreference(in unsigned long clientId, in nsIDOMWindow window, in DOMString mode);
   nsIDOMDOMRequest setRoamingPreference(in unsigned long clientId, in nsIDOMWindow window, in DOMString mode);
   nsIDOMDOMRequest getRoamingPreference(in unsigned long clientId, in nsIDOMWindow window);
   nsIDOMDOMRequest getRoamingPreference(in unsigned long clientId, in nsIDOMWindow window);
 
 
   nsIDOMDOMRequest setVoicePrivacyMode(in unsigned long clientId, in nsIDOMWindow window, in bool enabled);
   nsIDOMDOMRequest setVoicePrivacyMode(in unsigned long clientId, in nsIDOMWindow window, in bool enabled);
   nsIDOMDOMRequest getVoicePrivacyMode(in unsigned long clientId, in nsIDOMWindow window);
   nsIDOMDOMRequest getVoicePrivacyMode(in unsigned long clientId, in nsIDOMWindow window);
 
 
   nsIDOMDOMRequest sendMMI(in unsigned long clientId, in nsIDOMWindow window, in DOMString mmi);
   nsIDOMDOMRequest sendMMI(in unsigned long clientId, in nsIDOMWindow window, in DOMString mmi);
   nsIDOMDOMRequest cancelMMI(in unsigned long clientId, in nsIDOMWindow window);
   nsIDOMDOMRequest cancelMMI(in unsigned long clientId, in nsIDOMWindow window);
 
 
   nsIDOMDOMRequest getCallForwardingOption(in unsigned long clientId, in nsIDOMWindow window, in unsigned short reason);
   nsIDOMDOMRequest getCallForwardingOption(in unsigned long clientId, in nsIDOMWindow window, in unsigned short reason);
   nsIDOMDOMRequest setCallForwardingOption(in unsigned long clientId, in nsIDOMWindow window, in nsIDOMMozMobileCFInfo CFInfo);
   nsIDOMDOMRequest setCallForwardingOption(in unsigned long clientId, in nsIDOMWindow window, in nsIDOMMozMobileCFInfo CFInfo);
 
 
   nsIDOMDOMRequest getCallBarringOption(in unsigned long clientId, in nsIDOMWindow window, in jsval option);
   nsIDOMDOMRequest getCallBarringOption(in unsigned long clientId, in nsIDOMWindow window, in jsval option);
   nsIDOMDOMRequest setCallBarringOption(in unsigned long clientId, in nsIDOMWindow window, in jsval option);
   nsIDOMDOMRequest setCallBarringOption(in unsigned long clientId, in nsIDOMWindow window, in jsval option);
   nsIDOMDOMRequest changeCallBarringPassword(in unsigned long clientId, in nsIDOMWindow window, in jsval info);
   nsIDOMDOMRequest changeCallBarringPassword(in unsigned long clientId, in nsIDOMWindow window, in jsval info);
 
 
   nsIDOMDOMRequest setCallWaitingOption(in unsigned long clientId, in nsIDOMWindow window, in bool enabled);
   nsIDOMDOMRequest setCallWaitingOption(in unsigned long clientId, in nsIDOMWindow window, in bool enabled);
   nsIDOMDOMRequest getCallWaitingOption(in unsigned long clientId, in nsIDOMWindow window);
   nsIDOMDOMRequest getCallWaitingOption(in unsigned long clientId, in nsIDOMWindow window);
 
 
   nsIDOMDOMRequest setCallingLineIdRestriction(in unsigned long clientId, in nsIDOMWindow window, in unsigned short clirMode);
   nsIDOMDOMRequest setCallingLineIdRestriction(in unsigned long clientId, in nsIDOMWindow window, in unsigned short clirMode);
   nsIDOMDOMRequest getCallingLineIdRestriction(in unsigned long clientId, in nsIDOMWindow window);
   nsIDOMDOMRequest getCallingLineIdRestriction(in unsigned long clientId, in nsIDOMWindow window);
 
 
   nsIDOMDOMRequest exitEmergencyCbMode(in unsigned long clientId, in nsIDOMWindow window);
   nsIDOMDOMRequest exitEmergencyCbMode(in unsigned long clientId, in nsIDOMWindow window);
  };
  };

Revision as of 04:43, 1 October 2013

Proposal: WebMobileConnectionManager API for Multi-SIM

Currently B2G supports a single SIM architecture. This proposal wants to extend it for supporting multi-SIMs. In multi-SIM device, each service is independent and has it own status and information. Here we introduce multiple nsIDOMMozMobileConnection objects architecture. One nsIDOMMozMobileConnection object is binded to a service. You can use serviceId as index to get corresponding service object.

Web API

The change is quite simple, navigator.mozMobileConnection becomes an array of nsIDOMMozMobileConnection obect. API users can use 'serviceId' as an index to access corresponding service object.

We don't modify the existed interface, like nsIDOMMozMobileConnection, nsIDOMMozMobileConnectionInfo ...etc, to minimize the coding effort of gaia.

interface nsIDOMMozMobileConnection : nsIDOMEventTarget
{
  const long ICC_SERVICE_CLASS_DATA = (1 << 1);
  const long ICC_SERVICE_CLASS_FAX = (1 << 2);
  const long ICC_SERVICE_CLASS_SMS = (1 << 3);
  const long ICC_SERVICE_CLASS_DATA_SYNC = (1 << 4);
  const long ICC_SERVICE_CLASS_DATA_ASYNC = (1 << 5);
  const long ICC_SERVICE_CLASS_PACKET = (1 << 6);
  const long ICC_SERVICE_CLASS_PAD = (1 << 7);
  const long ICC_SERVICE_CLASS_MAX = (1 << 7);

  readonly attribute DOMString lastKnownNetwork;
  readonly attribute DOMString lastKnownHomeNetwork;
  readonly attribute nsIDOMMozMobileConnectionInfo voice;
  readonly attribute nsIDOMMozMobileConnectionInfo data;
  readonly attribute DOMString networkSelectionMode;
  readonly attribute DOMString iccId;

  nsIDOMDOMRequest getNetworks();
  nsIDOMDOMRequest selectNetwork(in nsIDOMMozMobileNetworkInfo network);
  nsIDOMDOMRequest selectNetworkAutomatically();
  nsIDOMDOMRequest sendMMI(in DOMString mmi);
  nsIDOMDOMRequest cancelMMI();
  nsIDOMDOMRequest setCallForwardingOption(in nsIDOMMozMobileCFInfo CFInfo);
  nsIDOMDOMRequest getCallForwardingOption(in unsigned short reason);

  [implicit_jscontext] attribute jsval onvoicechange;
  [implicit_jscontext] attribute jsval ondatachange;
  [implicit_jscontext] attribute jsval onussdreceived;
  [implicit_jscontext] attribute jsval ondataerror;
  [implicit_jscontext] attribute jsval oncfstatechange;
};
interface nsIDOMMozMobileConnectionInfo : nsISupports
{
  readonly attribute DOMString state;
  readonly attribute bool connected;
  readonly attribute bool emergencyCallsOnly;
  readonly attribute bool roaming;
  readonly attribute nsIDOMMozMobileNetworkInfo network;
  readonly attribute DOMString type;
  readonly attribute jsval signalStrength;
  readonly attribute jsval relSignalStrength;
  readonly attribute nsIDOMMozMobileCellInfo cell;
};

...

Use Case

Listen Connection Status

  • Current B2G (Single SIM)
     var conn = window.navigator.mozMobileConnection;
  • Multi-SIMs
     // Listen connection status for specific service
     var conn = window.navigator.mozMobileConnections[serviceId];

Once the mobile connection object is obtained, the follow work is the same. We can get notification when voice/data connection change occurs in specific SIM.

     if (conn) {
       conn.addEventListener('voicechange', this);
       conn.onvoicechange = function onvoicechange() {
         ...
       }
       
       conn.addEventListener('datachange', this);
       conn.ondatachange = function ondatachange() {
         ...
       }
     }

And also you can get total number of service via

     var numberOfServices = window.navigator.mozMobileConnections.length;

Implementation

mozMobileConnection becomes an array of nsIDOMMozMobileConnection in nsINavigatorMobileConnection.idl

interface nsIMozNavigatorMobileConnectionManager: nsISupports
{
  // An array of nsIDOMMozMobileConnection.
  readonly attribute jsval mozMobileConnections;
};

Add clientId in the interface of nsIMobileConnectionProvider.idl and change the implementation of getVoiceConnectionInfo, getDataConnectionInfo, and getNetworkSelectionMode.

interface nsIMobileConnectionProvider: nsISupports
{
  void registerMobileConnectionMsg(in unsigned long clientId, in nsIMobileConnectionListener listener);
  void unregisterMobileConnectionMsg(in unsigned long clientId, in nsIMobileConnectionListener listener);
  
  nsIDOMMozMobileConnectionInfo getVoiceConnectionInfo(in unsigned long clientId);
  nsIDOMMozMobileConnectionInfo getDataConnectionInfo(in unsigned long clientId);
  DOMString getNetworkSelectionMode(in unsigned long clientId);
  DOMString getIccId(in unsigned long clientId);
  
  nsIDOMDOMRequest getNetworks(in unsigned long clientId, in nsIDOMWindow window);
  nsIDOMDOMRequest selectNetwork(in unsigned long clientId, in nsIDOMWindow window, in nsIDOMMozMobileNetworkInfo network);
  nsIDOMDOMRequest selectNetworkAutomatically(in unsigned long clientId, in nsIDOMWindow window);
  
  nsIDOMDOMRequest setRoamingPreference(in unsigned long clientId, in nsIDOMWindow window, in DOMString mode);
  nsIDOMDOMRequest getRoamingPreference(in unsigned long clientId, in nsIDOMWindow window);
  
  nsIDOMDOMRequest setVoicePrivacyMode(in unsigned long clientId, in nsIDOMWindow window, in bool enabled);
  nsIDOMDOMRequest getVoicePrivacyMode(in unsigned long clientId, in nsIDOMWindow window);
  
  nsIDOMDOMRequest sendMMI(in unsigned long clientId, in nsIDOMWindow window, in DOMString mmi);
  nsIDOMDOMRequest cancelMMI(in unsigned long clientId, in nsIDOMWindow window);
  
  nsIDOMDOMRequest getCallForwardingOption(in unsigned long clientId, in nsIDOMWindow window, in unsigned short reason);
  nsIDOMDOMRequest setCallForwardingOption(in unsigned long clientId, in nsIDOMWindow window, in nsIDOMMozMobileCFInfo CFInfo);
  
  nsIDOMDOMRequest getCallBarringOption(in unsigned long clientId, in nsIDOMWindow window, in jsval option);
  nsIDOMDOMRequest setCallBarringOption(in unsigned long clientId, in nsIDOMWindow window, in jsval option);
  nsIDOMDOMRequest changeCallBarringPassword(in unsigned long clientId, in nsIDOMWindow window, in jsval info);
  
  nsIDOMDOMRequest setCallWaitingOption(in unsigned long clientId, in nsIDOMWindow window, in bool enabled);
  nsIDOMDOMRequest getCallWaitingOption(in unsigned long clientId, in nsIDOMWindow window);
  
  nsIDOMDOMRequest setCallingLineIdRestriction(in unsigned long clientId, in nsIDOMWindow window, in unsigned short clirMode);
  nsIDOMDOMRequest getCallingLineIdRestriction(in unsigned long clientId, in nsIDOMWindow window);
  
  nsIDOMDOMRequest exitEmergencyCbMode(in unsigned long clientId, in nsIDOMWindow window);
};

The data structures of voiceConnectionInfo, dataConnectionInfo, and networkSelectionMode may need to change to be an array format in RILContentHelper.js for storing the information among different SIM.

 // nsIRILContentHelper
 voiceConnectionInfo:  [],
 dataConnectionInfo:   [],
 networkSelectionMode: [],

Proposal: Architecture

Current Architecture

This is the current architecture supporting a single SIM card. Only one mobile connection to handle all events for Network/Data functions.

MobileConnection Architecture

Proposal Architecture for Multi-SIM

This is the proposal architecture supporting the multi-SIM card.

MobileConnection becomes an array of nsIDOMMozMobileConnection obect. API users can use 'serviceId' as an index to access corresponding service object.

New MobileConnection Architecture

RIL Implementation

Status

  • bug 814629 for WebMobileConnection API. (Ongoing)
  • bug 818353 for adding subscriptId in backend implementation. (Ongoing)