From a93ff362b44433f56b3ff823aba4bfe3bce5a359 Mon Sep 17 00:00:00 2001 From: Vicamo Yang Date: Tue, 30 Oct 2012 18:55:41 +0800 Subject: [PATCH] Bug 797277 - Part 3/5: RIL implementation, r=philikon --- dom/sms/src/ril/SmsDatabaseService.js | 9 ++++++++- dom/system/gonk/RadioInterfaceLayer.js | 9 ++++++++- dom/system/gonk/ril_consts.js | 15 +++++++++++---- dom/system/gonk/ril_worker.js | 12 ++++++------ 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/dom/sms/src/ril/SmsDatabaseService.js b/dom/sms/src/ril/SmsDatabaseService.js index a52883b08e3..da22c45d07d 100644 --- a/dom/sms/src/ril/SmsDatabaseService.js +++ b/dom/sms/src/ril/SmsDatabaseService.js @@ -25,6 +25,8 @@ const DELIVERY_STATUS_SUCCESS = "success"; const DELIVERY_STATUS_PENDING = "pending"; const DELIVERY_STATUS_ERROR = "error"; +const MESSAGE_CLASS_NORMAL = "normal"; + const FILTER_TIMESTAMP = "timestamp"; const FILTER_NUMBERS = "numbers"; const FILTER_DELIVERY = "delivery"; @@ -326,6 +328,7 @@ SmsDatabaseService.prototype = { message.sender, message.receiver, message.body, + message.messageClass, message.timestamp, message.read); gSmsRequestManager.notifyCreateMessageList(requestId, @@ -354,7 +357,7 @@ SmsDatabaseService.prototype = { * nsISmsDatabaseService API */ - saveReceivedMessage: function saveReceivedMessage(sender, body, date) { + saveReceivedMessage: function saveReceivedMessage(sender, body, messageClass, date) { let receiver = this.mRIL.rilContext.icc ? this.mRIL.rilContext.icc.msisdn : null; let message = {delivery: DELIVERY_RECEIVED, @@ -362,6 +365,7 @@ SmsDatabaseService.prototype = { sender: sender, receiver: receiver, body: body, + messageClass: messageClass, timestamp: date, read: FILTER_READ_UNREAD}; return this.saveMessage(message); @@ -375,6 +379,7 @@ SmsDatabaseService.prototype = { sender: sender, receiver: receiver, body: body, + messageClass: MESSAGE_CLASS_NORMAL, timestamp: date, read: FILTER_READ_READ}; return this.saveMessage(message); @@ -469,6 +474,7 @@ SmsDatabaseService.prototype = { data.sender, data.receiver, data.body, + data.messageClass, data.timestamp, data.read); gSmsRequestManager.notifyGotSms(requestId, message); @@ -694,6 +700,7 @@ SmsDatabaseService.prototype = { message.sender, message.receiver, message.body, + message.messageClass, message.timestamp, message.read); gSmsRequestManager.notifyGotNextMessage(requestId, sms); diff --git a/dom/system/gonk/RadioInterfaceLayer.js b/dom/system/gonk/RadioInterfaceLayer.js index 470621b2154..e08d2ef08bb 100644 --- a/dom/system/gonk/RadioInterfaceLayer.js +++ b/dom/system/gonk/RadioInterfaceLayer.js @@ -1230,9 +1230,10 @@ RadioInterfaceLayer.prototype = { } let id = -1; - if (message.messageClass != RIL.PDU_DCS_MSG_CLASS_0) { + if (message.messageClass != RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_0]) { id = gSmsDatabaseService.saveReceivedMessage(message.sender || null, message.fullBody || null, + message.messageClass, message.timestamp); } let sms = gSmsService.createSmsMessage(id, @@ -1241,6 +1242,7 @@ RadioInterfaceLayer.prototype = { message.sender || null, message.receiver || null, message.fullBody || null, + message.messageClass, message.timestamp, false); @@ -1251,6 +1253,7 @@ RadioInterfaceLayer.prototype = { sender: message.sender || null, receiver: message.receiver || null, body: message.fullBody || null, + messageClass: message.messageClass, timestamp: message.timestamp, read: false}); Services.obs.notifyObservers(sms, kSmsReceivedObserverTopic, null); @@ -1280,6 +1283,7 @@ RadioInterfaceLayer.prototype = { } let timestamp = Date.now(); + let messageClass = RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_NORMAL]; let id = gSmsDatabaseService.saveSentMessage(options.number, options.fullBody, timestamp); @@ -1289,6 +1293,7 @@ RadioInterfaceLayer.prototype = { null, options.number, options.fullBody, + messageClass, timestamp, true); @@ -1314,6 +1319,7 @@ RadioInterfaceLayer.prototype = { } delete this._sentSmsEnvelopes[message.envelopeId]; + let messageClass = RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_NORMAL]; gSmsDatabaseService.setMessageDeliveryStatus(options.id, message.deliveryStatus); let sms = gSmsService.createSmsMessage(options.id, @@ -1322,6 +1328,7 @@ RadioInterfaceLayer.prototype = { null, options.number, options.fullBody, + messageClass, options.timestamp, true); diff --git a/dom/system/gonk/ril_consts.js b/dom/system/gonk/ril_consts.js index 68d8d2b6610..b9b9cae67e4 100644 --- a/dom/system/gonk/ril_consts.js +++ b/dom/system/gonk/ril_consts.js @@ -964,11 +964,11 @@ const PDU_PID_USIM_DATA_DOWNLOAD = 0x7F; const PDU_DCS_MSG_CODING_7BITS_ALPHABET = 0x00; const PDU_DCS_MSG_CODING_8BITS_ALPHABET = 0x04; const PDU_DCS_MSG_CODING_16BITS_ALPHABET = 0x08; -const PDU_DCS_MSG_CLASS_UNKNOWN = 0xFF; +const PDU_DCS_MSG_CLASS_NORMAL = 0xFF; const PDU_DCS_MSG_CLASS_0 = 0x00; -const PDU_DCS_MSG_CLASS_ME_SPECIFIC = 0x01; -const PDU_DCS_MSG_CLASS_SIM_SPECIFIC = 0x02; -const PDU_DCS_MSG_CLASS_TE_SPECIFIC = 0x03; +const PDU_DCS_MSG_CLASS_1 = 0x01; +const PDU_DCS_MSG_CLASS_2 = 0x02; +const PDU_DCS_MSG_CLASS_3 = 0x03; const PDU_DCS_CODING_GROUP_BITS = 0xF0; const PDU_DCS_MSG_CLASS_BITS = 0x03; const PDU_DCS_MWI_ACTIVE_BITS = 0x08; @@ -979,6 +979,13 @@ const PDU_DCS_MWI_TYPE_FAX = 0x01; const PDU_DCS_MWI_TYPE_EMAIL = 0x02; const PDU_DCS_MWI_TYPE_OTHER = 0x03; +const GECKO_SMS_MESSAGE_CLASSES = {}; +GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL] = "normal"; +GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_0] = "class-0"; +GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_1] = "class-1"; +GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2] = "class-2"; +GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_3] = "class-3"; + // Because service center timestamp omit the century. Yay. const PDU_TIMESTAMP_YEAR_OFFSET = 2000; diff --git a/dom/system/gonk/ril_worker.js b/dom/system/gonk/ril_worker.js index 2fa7efb3d37..bca0b328e13 100644 --- a/dom/system/gonk/ril_worker.js +++ b/dom/system/gonk/ril_worker.js @@ -3751,7 +3751,7 @@ let RIL = { return PDU_FCS_OK; } - if (message.messageClass == PDU_DCS_MSG_CLASS_SIM_SPECIFIC) { + if (message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) { switch (message.epid) { case PDU_PID_ANSI_136_R_DATA: case PDU_PID_USIM_DATA_DOWNLOAD: @@ -3777,13 +3777,13 @@ let RIL = { } // TODO: Bug 739143: B2G SMS: Support SMS Storage Full event - if ((message.messageClass != PDU_DCS_MSG_CLASS_0) && !true) { + if ((message.messageClass != GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_0]) && !true) { // `When a mobile terminated message is class 0..., the MS shall display // the message immediately and send a ACK to the SC ..., irrespective of // whether there is memory available in the (U)SIM or ME.` ~ 3GPP 23.038 // clause 4. - if (message.messageClass == PDU_DCS_MSG_CLASS_SIM_SPECIFIC) { + if (message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) { // `If all the short message storage at the MS is already in use, the // MS shall return "memory capacity exceeded".` ~ 3GPP 23.038 clause 4. return PDU_FCS_MEMORY_CAPACITY_EXCEEDED; @@ -3809,7 +3809,7 @@ let RIL = { this.sendDOMMessage(message); } - if (message.messageClass == PDU_DCS_MSG_CLASS_SIM_SPECIFIC) { + if (message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) { // `MS shall ensure that the message has been to the SMS data field in // the (U)SIM before sending an ACK to the SC.` ~ 3GPP 23.038 clause 4 return PDU_FCS_RESERVED; @@ -5925,7 +5925,7 @@ let GsmPDUHelper = { if (DEBUG) debug("PDU: read dcs: " + dcs); // No message class by default. - let messageClass = PDU_DCS_MSG_CLASS_UNKNOWN; + let messageClass = PDU_DCS_MSG_CLASS_NORMAL; // 7 bit is the default fallback encoding. let encoding = PDU_DCS_MSG_CODING_7BITS_ALPHABET; switch (dcs & PDU_DCS_CODING_GROUP_BITS) { @@ -6002,7 +6002,7 @@ let GsmPDUHelper = { msg.dcs = dcs; msg.encoding = encoding; - msg.messageClass = messageClass; + msg.messageClass = GECKO_SMS_MESSAGE_CLASSES[messageClass]; if (DEBUG) debug("PDU: message encoding is " + encoding + " bit."); },