📄 mfw_sms.c
字号:
sms_mt.index = conc_index;
sms_mt.rp = sm->fo >> 7 & 1;
/* SBH */
if (sm->dcs & 0x10) /* Bit 5 indicates that we should get message class from bits 0 & 1 */
{
sms_mt.ti = sm->dcs & 3;
}
else /* Otherwise, set to default value */
{
sms_mt.ti = 1;
}
/* SBH end */
memcpy((char *)sms_mt.sctp.year, (char *)sm->scts.year, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.month, (char *)sm->scts.month, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.day, (char *)sm->scts.day, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.hour, (char *)sm->scts.hour, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.minute, (char *)sm->scts.minute, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.second, (char *)sm->scts.second, MAX_SCTP_DIGITS);
sms_mt.sctp.timezone = sm->scts.timezone;
/* copy length of whole concat SMS*/
if (conc_data_ext.len > MAX_MSG_LEN)
sms_mt.msg_len = MAX_MSG_LEN;
else
sms_mt.msg_len = conc_data_ext.len;
/*copy all data from concat SMS*/
memcpy(sms_mt.sms_msg, (char*)conc_data_ext.data, sms_mt.msg_len);
/* Free memory allocated by the ACI */
MFREE(conc_data_ext.data);
sms_mt.udh_len = sm->udh.len;
memcpy((char *)sms_mt.udh, (char *)sm->udh.data, sm->udh.len);
sms_type = MFW_NO_MESSAGE;
coll_sms_read = MFW_SMS_FREE;
sms_signal(E_SMS_MT, &sms_mt);
}
}
}
else
{
#ifdef NO_ASCIIZ
memcpy(sms_mt.orig_addr.tag,
sm->alpha.data,
sm->alpha.len);
sms_mt.orig_addr.len = sm->alpha.len;
#else
phb_Alpha2Gsm(&sm->alpha, (UBYTE *)sms_mt.orig_addr.tag);
#endif
if (sm->toa.ton == TON_International)
sprintf(sms_mt.orig_addr.number, "+%s", sm->adress);
else
strcpy(sms_mt.orig_addr.number, sm->adress);
sms_mt.orig_addr.ton = phb_cvtTon(sm->toa.ton);
sms_mt.orig_addr.npi = phb_cvtNpi(sm->toa.npi);
if (sm->tosca.ton == TON_International)
sprintf(sms_mt.sc_addr, "+%s", sm->sca);
else
strcpy(sms_mt.sc_addr, sm->sca);
sms_mt.prot_id = (UBYTE)sm->pid;
sms_mt.dcs = (UBYTE)sm->dcs & 0xFC; /* Ignore message class */
sms_mt.rp = sm->fo >> 7 & 1;
// PATCH JPS 04.10 END
/* SBH */
if (sm->dcs & 0x10) /* Bit 5 indicates that we should get message class from bits 0 & 1 */
{
sms_mt.ti = sm->dcs & 3;
}
else /* Otherwise, set to default value */
{
sms_mt.ti = 1;
}
/* SBH end */
TRACE_EVENT_P2("dcs: %d, ti: %d", sms_mt.dcs, sms_mt.ti);
memcpy((char *)sms_mt.sctp.year, (char *)sm->scts.year, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.month, (char *)sm->scts.month, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.day, (char *)sm->scts.day, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.hour, (char *)sm->scts.hour, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.minute, (char *)sm->scts.minute, MAX_SCTP_DIGITS);
memcpy((char *)sms_mt.sctp.second, (char *)sm->scts.second, MAX_SCTP_DIGITS);
sms_mt.sctp.timezone = sm->scts.timezone;
/* SBH decoded_dcs = cmhSMS_getAlphabetPp (sm->dcs); */
sms_mt.msg_len = sm->data.len;
TRACE_EVENT_P2("msg_len %d, data.len %d", sms_mt.msg_len, sm->data.len);
memcpy(sms_mt.sms_msg, (char *)sm->data.data, sms_mt.msg_len);
sms_mt.udh_len = sm->udh.len;
memcpy((char *)sms_mt.udh, (char *)sm->udh.data, sm->udh.len);
sms_type = MFW_NO_MESSAGE;
TRACE_EVENT("read=free1");
coll_sms_read = MFW_SMS_FREE;
sms_signal(E_SMS_MT, &sms_mt);
}
}
else
{
TRACE_EVENT("f_update = MFW_SMS_UPDATE");
if ((received_sms_type == CONCATE && concatenated_status==CONC_COMPLETED)
|| received_sms_type != CONCATE)
{
sms_store_new_msg_info(sms_id.index, sm, TRUE);
sms_update_ready();
}
break;
case 0x01:
{
received_sms_type = SMS_getSMSType( &sm->udh);
TRACE_EVENT_P1("SMS Type is = %d", received_sms_type);
if (received_sms_type == CONCATE)
{
concatenated_status =concSMS_Collect(&conc_data_ext, sm, FALSE);
TRACE_EVENT_P2("conc status: %d, conc length: %d", concatenated_status, conc_data_ext.len);
}
TRACE_EVENT_P1("UDH Length is = %d", sm->udh.len);
if (received_sms_type == CONCATE)
{
switch (concatenated_status)
{
case CONC_ERR_UNKN:
TRACE_EVENT("Concatenated SMS error");
break;
case CONC_ERR_BUF_FULL:
TRACE_EVENT("Concatented SMS buffer Full Error");
break;
case CONC_CONTINUED: //not last SMS
TRACE_EVENT("Concatenation Continued");
break;
case CONC_COMPLETED:
{
TRACE_EVENT("Concatenation Completed");
memset(&sms_mo, 0, sizeof(sms_mo));
TRACE_EVENT_P2("msg_len: %d conc len: %d", sms_mo.msg_len, conc_data_ext.len);
#ifdef NO_ASCIIZ
memcpy(sms_mo.dest_addr.tag,
sm->alpha.data,
sm->alpha.len);
sms_mo.dest_addr.len = sm->alpha.len;
#else
phb_Alpha2Gsm(&sm->alpha, (UBYTE *)sms_mo.dest_addr.tag);
#endif
strcpy(sms_mo.dest_addr.number, sm->adress);
sms_mo.dest_addr.ton = phb_cvtTon(sm->toa.ton);
sms_mo.dest_addr.npi = phb_cvtNpi(sm->toa.npi);
if (sm->tosca.ton == TON_International)
sprintf(sms_mo.sc_addr, "+%s", sm->sca);
else
strcpy((char *)sms_mo.sc_addr, sm->sca);
sms_mo.prot_id = (UBYTE)sm->pid;
sms_mo.dcs = sm->dcs;
sms_mo.msg_ref = sm->msg_ref;
sms_mo.vp_mode = 0x03 & sm->fo << 2;
sms_mo.vp_rel = (UBYTE)sm->vp_rel;
memcpy((char *)sms_mo.vp_abs.year, (char *)sm->scts.year, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.month, (char *)sm->scts.month, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.day, (char *)sm->scts.day, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.hour, (char *)sm->scts.hour, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.minute, (char *)sm->scts.minute, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.second, (char *)sm->scts.second, MAX_SCTP_DIGITS);
sms_mo.vp_abs.timezone = sm->scts.timezone;
/* copy length of whole concat SMS*/
if (conc_data_ext.len > MAX_MSG_LEN)
sms_mo.msg_len = MAX_MSG_LEN;
else
sms_mo.msg_len = conc_data_ext.len;
memcpy(sms_mo.sms_msg, (char*)conc_data_ext.data, sms_mo.msg_len);
/* Free memory allocated by the ACI */
MFREE(conc_data_ext.data);
sms_type = MFW_NO_MESSAGE;
sms_signal(E_SMS_MO, &sms_mo);
}
}
}
else
{
#ifdef NO_ASCIIZ
memcpy(sms_mo.dest_addr.tag,
sm->alpha.data,
sm->alpha.len);
sms_mo.dest_addr.len = sm->alpha.len;
#else
phb_Alpha2Gsm(&sm->alpha, (UBYTE *)sms_mo.dest_addr.tag);
#endif
strcpy(sms_mo.dest_addr.number, sm->adress);
sms_mo.dest_addr.ton = phb_cvtTon(sm->toa.ton);
sms_mo.dest_addr.npi = phb_cvtNpi(sm->toa.npi);
if (sm->tosca.ton == TON_International)
sprintf(sms_mo.sc_addr, "+%s", sm->sca);
else
strcpy((char *)sms_mo.sc_addr, sm->sca);
sms_mo.prot_id = (UBYTE)sm->pid;
sms_mo.dcs = sm->dcs;
sms_mo.msg_ref = sm->msg_ref;
sms_mo.vp_mode = 0x03 & sm->fo << 2;
sms_mo.vp_rel = (UBYTE)sm->vp_rel;
memcpy((char *)sms_mo.vp_abs.year, (char *)sm->scts.year, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.month, (char *)sm->scts.month, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.day, (char *)sm->scts.day, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.hour, (char *)sm->scts.hour, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.minute, (char *)sm->scts.minute, MAX_SCTP_DIGITS);
memcpy((char *)sms_mo.vp_abs.second, (char *)sm->scts.second, MAX_SCTP_DIGITS);
sms_mo.vp_abs.timezone = sm->scts.timezone;
TRACE_EVENT("Normal MO Message");
sms_mo.msg_len = sm->data.len;
memcpy(sms_mo.sms_msg, (char *)sm->data.data, sm->data.len);
sms_type = MFW_NO_MESSAGE;
sms_signal(E_SMS_MO, &sms_mo);
}
}
break;
default:
sms_signal(E_SMS_ERR, NULL);
}
}
}
break;
case MFW_CB_MESSAGE:
sms_cb.sn = cbm->sn;
sms_cb.msg_id = cbm->mid;
sms_cb.dcs = cbm->dcs;
sms_cb.page = cbm->page;
sms_cb.pages = cbm->pages;
sms_cb.msg_len = cbm->data.len;
memcpy((char *)sms_cb.cb_msg, (char *)cbm->data.data, cbm->data.len);
/* send cell broadcast message event */
sms_type = MFW_NO_MESSAGE;
sms_signal(E_SMS_CB, &sms_cb);
break;
case MFW_NO_MESSAGE:
TRACE_EVENT("read=free no msg");
coll_sms_read = MFW_SMS_FREE;
if(coll_sms_read EQ MFW_SMS_WAIT)
coll_sms_read = MFW_SMS_FREE;
break;
}
sms_check_mt_update();
{
TRACE_EVENT_P4("CMGR Msg table: %d,%d,%d, %d", msg_info[0].index, msg_info[1].index,msg_info[2].index,msg_info[3].index);
TRACE_EVENT_P4("CMGR Msg table: %d,%d,%d, %d", msg_info[4].index, msg_info[5].index,msg_info[6].index,msg_info[7].index);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : MFW_SMS |
| STATE : code ROUTINE : rAT_PlusCMGD |
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL void rAT_PlusCMGD ()
{
TRACE_FUNCTION ("rAT_PlusCMGD");
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_store |
+--------------------------------------------------------------------+
PURPOSE : Save a short message.
GW 09/10/01 - Modified code to always save the maximum message length
*/
#ifdef NO_ASCIIZ
T_MFW sms_store(T_MFW_SMS_MO_TYPE type,
CHAR *addr,
UBYTE *msg,
USHORT msg_len,
CHAR *sca)
#else
T_MFW sms_store(T_MFW_SMS_MO_TYPE type,
CHAR *addr,
UBYTE *msg,
USHORT msg_len,
CHAR *sca)
// sbh - added length to the above definition, since '@' characters stored as NULL & will stop
// strlen from working properly.
#endif
{
#ifdef NO_CONCAT
T_ACI_SM_DATA data;
#else
T_SM_DATA_EXT conc_data_ext;
#endif
SHORT rp;
TRACE_FUNCTION ("sms_store()");
/* check whether memory is full */
if (memory.used == memory.total)
{
sms_signal(E_SMS_MEM_FULL, 0);
return MFW_SMS_FAIL;
}
if (type == MFW_SMS_REPLY OR
type == MFW_SMS_REPLY_SENT )
rp = 0; /* reply path = 0 */
else
rp = -1; /* reply path = default */
#ifdef NO_CONCAT
if (msg_len < MAX_SM_LEN)
{
data.len = msg_len;
}
else
{
data.len = MAX_SM_LEN;
}
memcpy((char *)data.data, (char *)msg, MAX_SM_LEN);
#else
conc_data_ext.len = msg_len;
conc_data_ext.data = msg;
#endif
if (type == MFW_SMS_REPLY_SENT OR
type == MFW_SMS_SUBMIT_SENT )
sentStatus = SMS_STAT_StoSent;
else
sentStatus = SMS_STAT_StoUnsent;
#ifdef NO_CONCAT
if (sAT_PlusCMGW_Old(CMD_SRC_LCL, 0, addr, NULL, /* => addr analysed by ACI */
sentStatus, 0xFF, /* unknown message reference */
&data, sca,
NULL, rp) NEQ AT_EXCT)
#else
if (sAT_PlusCMGW(CMD_SRC_LCL, 0, addr, NULL, /* => addr analysed by ACI */
sentStatus, 0xFF, /* unknown message reference */
&conc_data_ext, sca,
NULL, rp) NEQ AT_EXCT)
#endif
{
TRACE_EVENT("sAT_PlusCMGW error");
return MFW_SMS_FAIL;
}
wr_addr = addr;
sms_type = MFW_WR_NEW_MESSAGE;
return MFW_SMS_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_mt_store |
+--------------------------------------------------------------------+
PURPOSE : Save a MT message.
*/
T_MFW sms_mt_store(T_MFW_SMS_MT *mt_msg, T_MFW_SMS_STAT stat)
{
#ifdef NO_CONCAT
T_ACI_SM_DATA data;
#else
T_SM_DATA_EXT conc_data_ext;
#endif
T_ACI_TOA toa;
TRACE_FUNCTION ("sms_mt_store()");
/* check whether memory is full */
if (memory.used == memory.total)
{
sms_signal(E_SMS_MEM_FULL, 0);
return MFW_SMS_FAIL;
}
#ifdef NO_CONCAT
data.len = mt_msg->msg_len;
memcpy((char *)data.data, (char *)mt_msg->sms_msg, data.len);
#else
conc_data_ext.len = mt_msg->msg_len;
conc_data_ext.data = (UBYTE *)mt_msg->sms_msg;
#endif
toa.ton = phb_ncvtTon(mt_msg->orig_addr.ton);
toa.npi = phb_ncvtNpi(mt_msg->orig_addr.npi);
#ifdef NO_CONCAT
if (sAT_PlusCMGW_Old(CMD_SRC_LCL, 0, mt_msg->orig_addr.number,
&toa, sms_codeStatus(stat), 0, /* no message reference */
&data,
mt_msg->sc_addr, NULL, -1) NEQ AT_EXCT)
#else
if (sAT_PlusCMGW(CMD_SRC_LCL, 0, mt_msg->orig_addr.number,
&toa, sms_codeStatus(stat), 0, /* no message reference */
&conc_data_ext,
mt_msg->sc_addr, NULL, -1) NEQ AT_EXCT)
#endif
{
TRACE_EVENT("sAT_PlusCMGW error");
return MFW_SMS_FAIL;
}
sms_type = MFW_WR_NEW_MESSAGE;
return MFW_SMS_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_SMS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -