summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/RILSystemMessenger.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/RILSystemMessenger.jsm')
-rw-r--r--dom/system/gonk/RILSystemMessenger.jsm338
1 files changed, 338 insertions, 0 deletions
diff --git a/dom/system/gonk/RILSystemMessenger.jsm b/dom/system/gonk/RILSystemMessenger.jsm
new file mode 100644
index 000000000..81373458c
--- /dev/null
+++ b/dom/system/gonk/RILSystemMessenger.jsm
@@ -0,0 +1,338 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyGetter(this, "RIL", function () {
+ let obj = {};
+ Cu.import("resource://gre/modules/ril_consts.js", obj);
+ return obj;
+});
+
+/**
+ * RILSystemMessenger
+ */
+this.RILSystemMessenger = function() {};
+RILSystemMessenger.prototype = {
+
+ /**
+ * Hook of Broadcast function
+ *
+ * @param aType
+ * The type of the message to be sent.
+ * @param aMessage
+ * The message object to be broadcasted.
+ */
+ broadcastMessage: function(aType, aMessage) {
+ // Function stub to be replaced by the owner of this messenger.
+ },
+
+ /**
+ * Hook of the function to create MozStkCommand message.
+ * @param aStkProactiveCmd
+ * nsIStkProactiveCmd instance.
+ *
+ * @return a JS object which complies the dictionary of MozStkCommand defined
+ * in MozStkCommandEvent.webidl
+ */
+ createCommandMessage: function(aStkProactiveCmd) {
+ // Function stub to be replaced by the owner of this messenger.
+ },
+
+ /**
+ * Wrapper to send "telephony-new-call" system message.
+ */
+ notifyNewCall: function() {
+ this.broadcastMessage("telephony-new-call", {});
+ },
+
+ /**
+ * Wrapper to send "telephony-call-ended" system message.
+ */
+ notifyCallEnded: function(aServiceId, aNumber, aCdmaWaitingNumber, aEmergency,
+ aDuration, aOutgoing, aHangUpLocal) {
+ let data = {
+ serviceId: aServiceId,
+ number: aNumber,
+ emergency: aEmergency,
+ duration: aDuration,
+ direction: aOutgoing ? "outgoing" : "incoming",
+ hangUpLocal: aHangUpLocal
+ };
+
+ if (aCdmaWaitingNumber != null) {
+ data.secondNumber = aCdmaWaitingNumber;
+ }
+
+ this.broadcastMessage("telephony-call-ended", data);
+ },
+
+ _convertSmsMessageClass: function(aMessageClass) {
+ return RIL.GECKO_SMS_MESSAGE_CLASSES[aMessageClass] || null;
+ },
+
+ _convertSmsDelivery: function(aDelivery) {
+ return ["received", "sending", "sent", "error"][aDelivery] || null;
+ },
+
+ _convertSmsDeliveryStatus: function(aDeliveryStatus) {
+ return [
+ RIL.GECKO_SMS_DELIVERY_STATUS_NOT_APPLICABLE,
+ RIL.GECKO_SMS_DELIVERY_STATUS_SUCCESS,
+ RIL.GECKO_SMS_DELIVERY_STATUS_PENDING,
+ RIL.GECKO_SMS_DELIVERY_STATUS_ERROR
+ ][aDeliveryStatus] || null;
+ },
+
+ /**
+ * Wrapper to send 'sms-received', 'sms-delivery-success', 'sms-sent',
+ * 'sms-failed', 'sms-delivery-error' system message.
+ */
+ notifySms: function(aNotificationType, aId, aThreadId, aIccId, aDelivery,
+ aDeliveryStatus, aSender, aReceiver, aBody, aMessageClass,
+ aTimestamp, aSentTimestamp, aDeliveryTimestamp, aRead) {
+ let msgType = [
+ "sms-received",
+ "sms-sent",
+ "sms-delivery-success",
+ "sms-failed",
+ "sms-delivery-error"
+ ][aNotificationType];
+
+ if (!msgType) {
+ throw new Error("Invalid Notification Type: " + aNotificationType);
+ }
+
+ this.broadcastMessage(msgType, {
+ iccId: aIccId,
+ type: "sms",
+ id: aId,
+ threadId: aThreadId,
+ delivery: this._convertSmsDelivery(aDelivery),
+ deliveryStatus: this._convertSmsDeliveryStatus(aDeliveryStatus),
+ sender: aSender,
+ receiver: aReceiver,
+ body: aBody,
+ messageClass: this._convertSmsMessageClass(aMessageClass),
+ timestamp: aTimestamp,
+ sentTimestamp: aSentTimestamp,
+ deliveryTimestamp: aDeliveryTimestamp,
+ read: aRead
+ });
+ },
+
+ _convertCbGsmGeographicalScope: function(aGeographicalScope) {
+ return RIL.CB_GSM_GEOGRAPHICAL_SCOPE_NAMES[aGeographicalScope] || null;
+ },
+
+ _convertCbMessageClass: function(aMessageClass) {
+ return RIL.GECKO_SMS_MESSAGE_CLASSES[aMessageClass] || null;
+ },
+
+ _convertCbEtwsWarningType: function(aWarningType) {
+ return RIL.CB_ETWS_WARNING_TYPE_NAMES[aWarningType] || null;
+ },
+
+ /**
+ * Wrapper to send 'cellbroadcast-received' system message.
+ */
+ notifyCbMessageReceived: function(aServiceId, aGsmGeographicalScope, aMessageCode,
+ aMessageId, aLanguage, aBody, aMessageClass,
+ aTimestamp, aCdmaServiceCategory, aHasEtwsInfo,
+ aEtwsWarningType, aEtwsEmergencyUserAlert, aEtwsPopup) {
+ // Align the same layout to MozCellBroadcastMessage
+ let data = {
+ serviceId: aServiceId,
+ gsmGeographicalScope: this._convertCbGsmGeographicalScope(aGsmGeographicalScope),
+ messageCode: aMessageCode,
+ messageId: aMessageId,
+ language: aLanguage,
+ body: aBody,
+ messageClass: this._convertCbMessageClass(aMessageClass),
+ timestamp: aTimestamp,
+ cdmaServiceCategory: null,
+ etws: null
+ };
+
+ if (aHasEtwsInfo) {
+ data.etws = {
+ warningType: this._convertCbEtwsWarningType(aEtwsWarningType),
+ emergencyUserAlert: aEtwsEmergencyUserAlert,
+ popup: aEtwsPopup
+ };
+ }
+
+ if (aCdmaServiceCategory !=
+ Ci.nsICellBroadcastService.CDMA_SERVICE_CATEGORY_INVALID) {
+ data.cdmaServiceCategory = aCdmaServiceCategory;
+ }
+
+ this.broadcastMessage("cellbroadcast-received", data);
+ },
+
+ /**
+ * Wrapper to send 'ussd-received' system message.
+ */
+ notifyUssdReceived: function(aServiceId, aMessage, aSessionEnded) {
+ this.broadcastMessage("ussd-received", {
+ serviceId: aServiceId,
+ message: aMessage,
+ sessionEnded: aSessionEnded
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Display Info.
+ */
+ notifyCdmaInfoRecDisplay: function(aServiceId, aDisplay) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ display: aDisplay
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Called Party
+ * Number Info.
+ */
+ notifyCdmaInfoRecCalledPartyNumber: function(aServiceId, aType, aPlan,
+ aNumber, aPi, aSi) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ calledNumber: {
+ type: aType,
+ plan: aPlan,
+ number: aNumber,
+ pi: aPi,
+ si: aSi
+ }
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Calling Party
+ * Number Info.
+ */
+ notifyCdmaInfoRecCallingPartyNumber: function(aServiceId, aType, aPlan,
+ aNumber, aPi, aSi) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ callingNumber: {
+ type: aType,
+ plan: aPlan,
+ number: aNumber,
+ pi: aPi,
+ si: aSi
+ }
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Connected Party
+ * Number Info.
+ */
+ notifyCdmaInfoRecConnectedPartyNumber: function(aServiceId, aType, aPlan,
+ aNumber, aPi, aSi) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ connectedNumber: {
+ type: aType,
+ plan: aPlan,
+ number: aNumber,
+ pi: aPi,
+ si: aSi
+ }
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Signal Info.
+ */
+ notifyCdmaInfoRecSignal: function(aServiceId, aType, aAlertPitch, aSignal) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ signal: {
+ type: aType,
+ alertPitch: aAlertPitch,
+ signal: aSignal
+ }
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Redirecting
+ * Number Info.
+ */
+ notifyCdmaInfoRecRedirectingNumber: function(aServiceId, aType, aPlan,
+ aNumber, aPi, aSi, aReason) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ redirect: {
+ type: aType,
+ plan: aPlan,
+ number: aNumber,
+ pi: aPi,
+ si: aSi,
+ reason: aReason
+ }
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Line Control Info.
+ */
+ notifyCdmaInfoRecLineControl: function(aServiceId, aPolarityIncluded,
+ aToggle, aReverse, aPowerDenial) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ lineControl: {
+ polarityIncluded: aPolarityIncluded,
+ toggle: aToggle,
+ reverse: aReverse,
+ powerDenial: aPowerDenial
+ }
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with CLIR Info.
+ */
+ notifyCdmaInfoRecClir: function(aServiceId, aCause) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ clirCause: aCause
+ });
+ },
+
+ /**
+ * Wrapper to send 'cdma-info-rec-received' system message with Audio Control Info.
+ */
+ notifyCdmaInfoRecAudioControl: function(aServiceId, aUpLink, aDownLink) {
+ this.broadcastMessage("cdma-info-rec-received", {
+ clientId: aServiceId,
+ audioControl: {
+ upLink: aUpLink,
+ downLink: aDownLink
+ }
+ });
+ },
+
+ /**
+ * Wrapper to send 'icc-stkcommand' system message with Audio Control Info.
+ */
+ notifyStkProactiveCommand: function(aIccId, aCommand) {
+ this.broadcastMessage("icc-stkcommand", {
+ iccId: aIccId,
+ command: this.createCommandMessage(aCommand)
+ });
+ }
+};
+
+this.EXPORTED_SYMBOLS = [
+ 'RILSystemMessenger'
+];