Bug 797277 - Part 3/5: RIL implementation, r=philikon

This commit is contained in:
Vicamo Yang 2012-10-30 18:55:41 +08:00
Родитель 2206bbacce
Коммит bd1fc11feb
4 изменённых файлов: 33 добавлений и 12 удалений

Просмотреть файл

@ -25,6 +25,8 @@ const DELIVERY_STATUS_SUCCESS = "success";
const DELIVERY_STATUS_PENDING = "pending"; const DELIVERY_STATUS_PENDING = "pending";
const DELIVERY_STATUS_ERROR = "error"; const DELIVERY_STATUS_ERROR = "error";
const MESSAGE_CLASS_NORMAL = "normal";
const FILTER_TIMESTAMP = "timestamp"; const FILTER_TIMESTAMP = "timestamp";
const FILTER_NUMBERS = "numbers"; const FILTER_NUMBERS = "numbers";
const FILTER_DELIVERY = "delivery"; const FILTER_DELIVERY = "delivery";
@ -326,6 +328,7 @@ SmsDatabaseService.prototype = {
message.sender, message.sender,
message.receiver, message.receiver,
message.body, message.body,
message.messageClass,
message.timestamp, message.timestamp,
message.read); message.read);
gSmsRequestManager.notifyCreateMessageList(requestId, gSmsRequestManager.notifyCreateMessageList(requestId,
@ -354,7 +357,7 @@ SmsDatabaseService.prototype = {
* nsISmsDatabaseService API * 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 receiver = this.mRIL.rilContext.icc ? this.mRIL.rilContext.icc.msisdn : null;
let message = {delivery: DELIVERY_RECEIVED, let message = {delivery: DELIVERY_RECEIVED,
@ -362,6 +365,7 @@ SmsDatabaseService.prototype = {
sender: sender, sender: sender,
receiver: receiver, receiver: receiver,
body: body, body: body,
messageClass: messageClass,
timestamp: date, timestamp: date,
read: FILTER_READ_UNREAD}; read: FILTER_READ_UNREAD};
return this.saveMessage(message); return this.saveMessage(message);
@ -375,6 +379,7 @@ SmsDatabaseService.prototype = {
sender: sender, sender: sender,
receiver: receiver, receiver: receiver,
body: body, body: body,
messageClass: MESSAGE_CLASS_NORMAL,
timestamp: date, timestamp: date,
read: FILTER_READ_READ}; read: FILTER_READ_READ};
return this.saveMessage(message); return this.saveMessage(message);
@ -469,6 +474,7 @@ SmsDatabaseService.prototype = {
data.sender, data.sender,
data.receiver, data.receiver,
data.body, data.body,
data.messageClass,
data.timestamp, data.timestamp,
data.read); data.read);
gSmsRequestManager.notifyGotSms(requestId, message); gSmsRequestManager.notifyGotSms(requestId, message);
@ -694,6 +700,7 @@ SmsDatabaseService.prototype = {
message.sender, message.sender,
message.receiver, message.receiver,
message.body, message.body,
message.messageClass,
message.timestamp, message.timestamp,
message.read); message.read);
gSmsRequestManager.notifyGotNextMessage(requestId, sms); gSmsRequestManager.notifyGotNextMessage(requestId, sms);

Просмотреть файл

@ -1230,9 +1230,10 @@ RadioInterfaceLayer.prototype = {
} }
let id = -1; 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, id = gSmsDatabaseService.saveReceivedMessage(message.sender || null,
message.fullBody || null, message.fullBody || null,
message.messageClass,
message.timestamp); message.timestamp);
} }
let sms = gSmsService.createSmsMessage(id, let sms = gSmsService.createSmsMessage(id,
@ -1241,6 +1242,7 @@ RadioInterfaceLayer.prototype = {
message.sender || null, message.sender || null,
message.receiver || null, message.receiver || null,
message.fullBody || null, message.fullBody || null,
message.messageClass,
message.timestamp, message.timestamp,
false); false);
@ -1251,6 +1253,7 @@ RadioInterfaceLayer.prototype = {
sender: message.sender || null, sender: message.sender || null,
receiver: message.receiver || null, receiver: message.receiver || null,
body: message.fullBody || null, body: message.fullBody || null,
messageClass: message.messageClass,
timestamp: message.timestamp, timestamp: message.timestamp,
read: false}); read: false});
Services.obs.notifyObservers(sms, kSmsReceivedObserverTopic, null); Services.obs.notifyObservers(sms, kSmsReceivedObserverTopic, null);
@ -1280,6 +1283,7 @@ RadioInterfaceLayer.prototype = {
} }
let timestamp = Date.now(); let timestamp = Date.now();
let messageClass = RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_NORMAL];
let id = gSmsDatabaseService.saveSentMessage(options.number, let id = gSmsDatabaseService.saveSentMessage(options.number,
options.fullBody, options.fullBody,
timestamp); timestamp);
@ -1289,6 +1293,7 @@ RadioInterfaceLayer.prototype = {
null, null,
options.number, options.number,
options.fullBody, options.fullBody,
messageClass,
timestamp, timestamp,
true); true);
@ -1314,6 +1319,7 @@ RadioInterfaceLayer.prototype = {
} }
delete this._sentSmsEnvelopes[message.envelopeId]; delete this._sentSmsEnvelopes[message.envelopeId];
let messageClass = RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_NORMAL];
gSmsDatabaseService.setMessageDeliveryStatus(options.id, gSmsDatabaseService.setMessageDeliveryStatus(options.id,
message.deliveryStatus); message.deliveryStatus);
let sms = gSmsService.createSmsMessage(options.id, let sms = gSmsService.createSmsMessage(options.id,
@ -1322,6 +1328,7 @@ RadioInterfaceLayer.prototype = {
null, null,
options.number, options.number,
options.fullBody, options.fullBody,
messageClass,
options.timestamp, options.timestamp,
true); true);

Просмотреть файл

@ -964,11 +964,11 @@ const PDU_PID_USIM_DATA_DOWNLOAD = 0x7F;
const PDU_DCS_MSG_CODING_7BITS_ALPHABET = 0x00; const PDU_DCS_MSG_CODING_7BITS_ALPHABET = 0x00;
const PDU_DCS_MSG_CODING_8BITS_ALPHABET = 0x04; const PDU_DCS_MSG_CODING_8BITS_ALPHABET = 0x04;
const PDU_DCS_MSG_CODING_16BITS_ALPHABET = 0x08; 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_0 = 0x00;
const PDU_DCS_MSG_CLASS_ME_SPECIFIC = 0x01; const PDU_DCS_MSG_CLASS_1 = 0x01;
const PDU_DCS_MSG_CLASS_SIM_SPECIFIC = 0x02; const PDU_DCS_MSG_CLASS_2 = 0x02;
const PDU_DCS_MSG_CLASS_TE_SPECIFIC = 0x03; const PDU_DCS_MSG_CLASS_3 = 0x03;
const PDU_DCS_CODING_GROUP_BITS = 0xF0; const PDU_DCS_CODING_GROUP_BITS = 0xF0;
const PDU_DCS_MSG_CLASS_BITS = 0x03; const PDU_DCS_MSG_CLASS_BITS = 0x03;
const PDU_DCS_MWI_ACTIVE_BITS = 0x08; 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_EMAIL = 0x02;
const PDU_DCS_MWI_TYPE_OTHER = 0x03; 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. // Because service center timestamp omit the century. Yay.
const PDU_TIMESTAMP_YEAR_OFFSET = 2000; const PDU_TIMESTAMP_YEAR_OFFSET = 2000;

Просмотреть файл

@ -3751,7 +3751,7 @@ let RIL = {
return PDU_FCS_OK; 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) { switch (message.epid) {
case PDU_PID_ANSI_136_R_DATA: case PDU_PID_ANSI_136_R_DATA:
case PDU_PID_USIM_DATA_DOWNLOAD: case PDU_PID_USIM_DATA_DOWNLOAD:
@ -3777,13 +3777,13 @@ let RIL = {
} }
// TODO: Bug 739143: B2G SMS: Support SMS Storage Full event // 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 // `When a mobile terminated message is class 0..., the MS shall display
// the message immediately and send a ACK to the SC ..., irrespective of // 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 // whether there is memory available in the (U)SIM or ME.` ~ 3GPP 23.038
// clause 4. // 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 // `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. // MS shall return "memory capacity exceeded".` ~ 3GPP 23.038 clause 4.
return PDU_FCS_MEMORY_CAPACITY_EXCEEDED; return PDU_FCS_MEMORY_CAPACITY_EXCEEDED;
@ -3809,7 +3809,7 @@ let RIL = {
this.sendDOMMessage(message); 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 // `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 // the (U)SIM before sending an ACK to the SC.` ~ 3GPP 23.038 clause 4
return PDU_FCS_RESERVED; return PDU_FCS_RESERVED;
@ -5925,7 +5925,7 @@ let GsmPDUHelper = {
if (DEBUG) debug("PDU: read dcs: " + dcs); if (DEBUG) debug("PDU: read dcs: " + dcs);
// No message class by default. // 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. // 7 bit is the default fallback encoding.
let encoding = PDU_DCS_MSG_CODING_7BITS_ALPHABET; let encoding = PDU_DCS_MSG_CODING_7BITS_ALPHABET;
switch (dcs & PDU_DCS_CODING_GROUP_BITS) { switch (dcs & PDU_DCS_CODING_GROUP_BITS) {
@ -6002,7 +6002,7 @@ let GsmPDUHelper = {
msg.dcs = dcs; msg.dcs = dcs;
msg.encoding = encoding; msg.encoding = encoding;
msg.messageClass = messageClass; msg.messageClass = GECKO_SMS_MESSAGE_CLASSES[messageClass];
if (DEBUG) debug("PDU: message encoding is " + encoding + " bit."); if (DEBUG) debug("PDU: message encoding is " + encoding + " bit.");
}, },