WebAPI/WebTelephony/Multi-SIM: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 101: Line 101:


== Proposal: Architecture  ==
== Proposal: Architecture  ==
=== Current Architecture ===
This is the current architecture supporting a single SIM card.
This is the current architecture supporting a single SIM card.
[[File:B2GArch.png|245x300px|B2G Architecture]]
[[File:B2GArch.png|245x300px|B2G Architecture]]


=== Proposal for Multi-SIMs ===
Here is a proposal for multi-SIMs.
Here is a proposal for multi-SIMs.
[[File:B2GArch-multisim.png|388x300px|Proposal: B2G Architecture for Multi-SIMs]]
[[File:B2GArch-multisim.png|388x300px|Proposal: B2G Architecture for Multi-SIMs]]


*Internal API: nsIRILContentHelper.idl: We might need to add 『index』, used for connecting a telephony object (phoneIndex) and a specific 『sim slot』.  
*Internal API - nsIRILContentHelper.idl: We might need to add 『index』, used for connecting a telephony object (phoneIndex) and a specific 『sim slot』.  
   
   
*Examples of modifiying the internal API:
*Examples of modifiying the internal API:

Revision as of 10:39, 22 October 2012

Proposal: WebTelephony API for Multi-SIM

interface nsIDOMTelephonyManager : nsIDOMEventTarget
{
attribute boolean muted; 
attribute boolean speakerEnabled;

readonly attribute jsval active;
readonly attribute jsval calls;
readonly attribute phoneState;  /* Ringing, Offhook, Idel */
readonly attribute jsval phones;
readonly attribute nsIDOMTelephony defaultPhone;

[implicit_jscontext] attribute jsval onincoming;
[implicit_jscontext] attribute jsval oncallschanged;
};
interface nsIDOMTelephony: nsIDOMEventTarget
{
nsIDOMTelephonyCall dial(in DOMString number);

// The call that is "active", i.e. receives microphone input and tones
// generated via startTone.
readonly attribute jsval active;

// Array of all calls that are currently connected.
readonly attribute jsval calls;

void startTone(in DOMString tone);
void stopTone();

attribute nsIDOMEventListener onincoming;
attribute nsIDOMEventListener oncallschanged;
};
interface nsIDOMTelephonyCall: nsIDOMEventTarget
{
readonly attribute DOMString number;

// "dialing", "alerting", "busy", "connecting", "connected", "disconnecting", 
// "disconnected", "incoming", "holding", "held", "resuming"
readonly attribute DOMString state;

readonly attribute nsIDOMDOMError error;
readonly attribute nsIDOMTelephony phone;

// functions to mediate a call.
void answer();  
void hangUp();
void hold(); 
void resume(); 

attribute nsIDOMEventListener onstatechange;

attribute nsIDOMEventListener ondialing;
attribute nsIDOMEventListener onalerting;
attribute nsIDOMEventListener onbusy;
attribute nsIDOMEventListener onconnecting;
attribute nsIDOMEventListener onconnected;
attribute nsIDOMEventListener ondisconnecting;
attribute nsIDOMEventListener ondisconnected;
attribute nsIDOMEventListener onincoming;
attribute nsIDOMEventListener onholding; 
attribute nsIDOMEventListener onheld; 
attribute nsIDOMEventListener onresuming; 
};

Use Case

Outgoing Call

  • Current B2G
 navigator.mozTelephony.dial(number)
  • Multi-SIM
 navigator.mozTelephonyManager.defaultPhone.dial()
 navigator.mozTelephonyManager.phones[index].dial()

Incoming Call

  • Current B2G
 Tel1 = navigator.mozTelephony;
  • Multi-SIM
 Tel1 = navigator.mozTelephonyManager.phones[index];

Once the telephony object is obtained, the following work remains the same.

Tel1.addEventListener('incoming');
Tel1.onincoming = function onincoming (evt) {
incoming = evt.call; };
incoming.answer();

Implementation Details

WebTelephonyAPI multisim impl.png

Proposal: Architecture

Current Architecture

This is the current architecture supporting a single SIM card. B2G Architecture

Proposal for Multi-SIMs

Here is a proposal for multi-SIMs. Proposal: B2G Architecture for Multi-SIMs

  • Internal API - nsIRILContentHelper.idl: We might need to add 『index』, used for connecting a telephony object (phoneIndex) and a specific 『sim slot』.
  • Examples of modifiying the internal API:
void enumerateCalls(in short index,
                    in nsIRILTelephonyCallback callback);
void dial(in short index, in DOMString number);
readonly attribute jsval voicemailNumber; /* {index, number} */
  • Potential Issues
    • Array-ize RadioInterfaceLayer: one instance for one sim slot
    • Send parcel to the correct rild: might need to modify ril_worker.js and rilproxy
    • Get the number of sim slots