📄 mfw_sms.c
字号:
case E_SMS_MT_RECEIVED:
memcpy (&sms_data->para.sms_id, para, sizeof (T_MFW_SMS_ID));
break;
case E_SMS_STATUS:
memcpy (&sms_data->para.sms_status, para, sizeof (T_MFW_SMS_STATUS));
break;
case E_SMS_MEM:
memcpy (&sms_data->para.sms_mem, para, sizeof (T_MFW_SMS_MEM_INFO));
break;
case E_SMS_OK:
#ifdef WIN32
// EF we only copy if non null
if (para != NULL)
#endif
memcpy (&sms_data->para.cmd_ind, para, sizeof (UBYTE));
break;
case E_SMS_ERR:
memcpy (&sms_data->para.cmd_ind, para, sizeof (UBYTE));
break;
}
/* if call back defined, call it */
if (sms_data->handler)
{
// PATCH LE 06.06.00
// store current mfw elem
current_mfw_elem = cur_elem;
// END PATCH LE 06.06.00
if ((*(sms_data->handler)) (sms_data->event, (void *)&sms_data->para))
{
TRACE_EVENT("send SMS event");
return TRUE;
}
}
}
}
cur_elem = cur_elem->next;
}
return FALSE;
}
/*
+-------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : MFW_PHB |
| STATE : code ROUTINE : sms_read_msg_info |
+-------------------------------------------------------------------+
PURPOSE : This function is used to read total information about SMS.
*/
void sms_read_msg_info()
{
int i;
TRACE_FUNCTION("sms_read_msg_info()");
first_id = 1;
for (i=0; i<MAX_MESSAGES; i++)
{
msg_info[i].index = -1;
msg_info[i].addr.number[0] = '\0';
msg_info[i].addr.tag[0] = '\0';
msg_info[i].addr.ton = MFW_TON_UNKNOWN;
msg_info[i].addr.npi = MFW_NPI_UNKNOWN;
}
f_update = MFW_SMS_NEW;
if (sAT_PlusCMGL (CMD_SRC_LCL, SMS_STAT_All,
0, READ_PREVIEW) NEQ AT_EXCT)
{
TRACE_EVENT("sAT_PlusCMGL error");
f_update = MFW_SMS_FREE;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : rAT_PlusCMGL |
+--------------------------------------------------------------------+
PURPOSE : Response of read SMS list from ACI
*/
void rAT_PlusCMGL ( T_ACI_CMGL_SM * smLst )
{
int i;
int j;
int n;
T_SMS_TYPE received_sms_type;
T_CONC_ASSEMBLY_RETURN concatenated_status;
T_SM_DATA_EXT conc_data_ext;
#if (_PUSH_DETECT_ENABLE_ == 1)
UBYTE push_msg_flag = 0;
#endif
TRACE_FUNCTION ("rAT_PlusCMGL()");
#if (_PUSH_DETECT_ENABLE_ == 1)
PUSH_DET_TRACE(("Robert:rAT_PlusCMGL() idx=%d, uL=%d, dL=%d", smLst->msg_ref, smLst->udh.len, smLst->data.len));
if (smLst->udh.len > 0) /* is not a normal SM */
{
push_msg_flag = udh_adjust(smLst->msg_ref, smLst);
if (push_msg_flag)
{
/* delete the SMS */
PUSH_DET_TRACE(("rAT_PlusCMGL():delete a push SMS"));
push_delLst_add(&smLst->msg_ref, 1);
return;
}
}
#endif //_PUSH_DETECT_ENABLE_
received_sms_type = SMS_getSMSType( &smLst->udh);
TRACE_EVENT_P1("SMS Type is = %d", received_sms_type);
TRACE_EVENT_P1("SMS message status:%d", smLst->stat);
if (received_sms_type == CONCATE)
{
if(initialising_flag == TRUE)
concatenated_status =concSMS_Collect(&conc_data_ext, smLst, FALSE);
else
concatenated_status =concSMS_Collect(&conc_data_ext, smLst, TRUE);
TRACE_EVENT_P2("conc status: %d, conc length: %d", concatenated_status, conc_data_ext.len);
}
/*SPR 2260, removed condition, update_mem parameter should be true so that each message is counted*/
sms_store_new_msg_info(smLst->msg_ref, smLst, TRUE/*MC SPR 2260*/, concatenated_status);
f_update = MFW_SMS_NEW;
{
TRACE_EVENT_P4("CMGL 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("CMGL Msg table: %d,%d,%d, %d", msg_info[4].index, msg_info[5].index,msg_info[6].index,msg_info[7].index);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_update_ready |
+--------------------------------------------------------------------+
PURPOSE : message list update is ready
*/
void sms_update_ready(void)
{
TRACE_FUNCTION("sms_update_ready()");
sms_signal(E_SMS_MT_RECEIVED, &sms_id);
sms_id.index = 0;
//glowing,2004-06-10, replace the following statement
//if (memory.used == memory.total)
if (memory.used == memory.total && memory.total !=0)
sms_signal(E_SMS_MEM_FULL, 0);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_update_msg_info |
+--------------------------------------------------------------------+
PURPOSE : update the SMS information list
*/
void sms_update_msg_info(T_MFW_SMS_STAT stat)
{
int i;
TRACE_FUNCTION("sms_update_msg_info()");
for (i=0; i<MAX_MESSAGES; i++)
{
if (msg_info[i].index EQ status_change_index)
{
msg_info[i].stat = stat;
}
}
status_change_index = 0;
}
/*
+-------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : MFW_PHB |
| STATE : code ROUTINE : sms_mem_cvt |
+-------------------------------------------------------------------+
PURPOSE : This function is used to convert the type of memory
used by MFW to the type of memory used by ACI.
*/
LOCAL T_ACI_SMS_STOR sms_mem_cvt(UBYTE mem)
{
switch ( mem )
{
case ( MFW_MEM_ME ): return SMS_STOR_Me;
case ( MFW_MEM_SIM ): return SMS_STOR_Sm;
default: return SMS_STOR_NotPresent;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_set_mt_ind |
+--------------------------------------------------------------------+
PURPOSE : MMI selects, how the receiving of new messages
from the network is indicated.
*/
void sms_set_mt_ind(T_MFW_SMS_MT_IND mt_ind)
{
TRACE_FUNCTION("sms_set_mt_ind()");
switch (mt_ind)
{
case MT_IND_IDX:
sAT_PlusCNMI ( CMD_SRC_LCL,
CNMI_MT_SmsDeliverInd,
CNMI_BM_NotPresent,
CNMI_DS_SmsStatRpt );
break;
case MT_IND_MSG:
sAT_PlusCNMI ( CMD_SRC_LCL,
CNMI_MT_SmsDeliver,
CNMI_BM_NotPresent,
CNMI_DS_SmsStatRpt );
break;
case MT_IND_NO_IDX:
sAT_PlusCNMI ( CMD_SRC_LCL,
CNMI_MT_NoSmsDeliverInd,
CNMI_BM_NotPresent,
CNMI_DS_SmsStatRpt );
break;
case MT_CB_IDX:
sAT_PlusCNMI ( CMD_SRC_LCL,
CNMI_MT_NotPresent,
CNMI_BM_CbmInd,
CNMI_DS_NotPresent );
break;
case MT_CB_MSG:
sAT_PlusCNMI ( CMD_SRC_LCL,
CNMI_MT_NotPresent,
CNMI_BM_Cbm,
CNMI_DS_NotPresent );
break;
case MT_CB_NO_IDX:
sAT_PlusCNMI ( CMD_SRC_LCL,
CNMI_MT_NotPresent,
CNMI_BM_NoCbmInd,
CNMI_DS_NotPresent );
break;
default:
break;
}
}
/*
+-------------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_change_read_status |
+-------------------------------------------------------------------------+
PURPOSE : Change SMS status from MFW_SMS_UNREAD to MFW_SMS_READ
GW-SPR#779-Modified code to abort if status has already been updated or if no match is found
*/
T_MFW sms_change_read_status(SHORT index)
{
SHORT i;
//UBYTE fg;
T_ACI_RETURN ret;
TRACE_FUNCTION("sms_change_read_status()");
fg = 0;
for (i=0; i<MAX_MESSAGES; i++)
{
if (msg_info[i].index == index)
{
if ((msg_info[i].stat == MFW_SMS_UNREAD) ||
(msg_info[i].stat == MFW_SMS_STOR_UNSENT))
{
fg = 1;
}
else
{
/* status is not unread/unsent - no need to change it*/
return (1);
}
/* Stop search as soon as the index matches */
break;
}
}
/* This change is no completely right, because the SIM will be always updated,
but it makes possible that the read message doesn't come up as new every time
that the mobile is switched on.
GW - Replaced code that returns if no match is found
*/
if (!fg)
{
TRACE_EVENT("sms_change_read_status No index match-ERROR");
return 0;
}
sms_type = MFW_NO_MESSAGE;/* SPR 2260 Don't do anything scary in rAT_PlusCMGR callback func*/
/*CONQUEST 5991- MC- Changed third parameter in function call*/
ret = sAT_PlusCMGR(CMD_SRC_LCL, (UBYTE)index, SMS_READ_StatusChange);
if (ret NEQ AT_CMPL AND ret NEQ AT_EXCT)
{
TRACE_EVENT("sms_change_read_status ERROR");
fg = 0;
return 0;
}
/*CONQUEST 5991- MC- Added line to set current message to "read" status*/
if ( msg_info[i].stat == MFW_SMS_STOR_UNSENT)
msg_info[i].stat = MFW_SMS_STOR_SENT;
else
msg_info[i].stat = MFW_SMS_READ;//MC
status_change_index = index;
return 1;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_submit |
+--------------------------------------------------------------------+
PURPOSE : Send a mobile originated short massage.
GW 09/10/01 - Modified code to always copy entire (possible) message length
*/
#ifdef NO_ASCIIZ
T_MFW sms_submit(T_MFW_SMS_MO_TYPE type,
CHAR *dest_addr,
UBYTE *msg,
USHORT msg_len,
CHAR *sca)
#else
T_MFW sms_submit(T_MFW_SMS_MO_TYPE type,
CHAR *dest_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
{
T_SM_DATA_EXT conc_data_ext;
SHORT rp;
TRACE_FUNCTION ("sms_submit()");
if (type == MFW_SMS_REPLY)
rp = 0; /* reply path = 0 */
else
rp = -1; /* reply path = default */
conc_data_ext.len = msg_len;
conc_data_ext.data = msg;
if (sAT_PlusCMGS(CMD_SRC_LCL, dest_addr, NULL, &conc_data_ext, sca, NULL, rp) NEQ AT_EXCT)
return MFW_SMS_FAIL;
flag = 0;
return MFW_SMS_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : sms_stored_submit |
+--------------------------------------------------------------------+
PURPOSE : Send a stored mobile originated short massage.
*/
T_MFW sms_stored_submit(CHAR *dest_addr, UBYTE index)
{
TRACE_FUNCTION ("sms_stored_submit()");
if (sAT_PlusCMSS(CMD_SRC_LCL, index, dest_addr, NULL) NEQ AT_EXCT)
{
return MFW_SMS_FAIL;
}
storage_index = index;
return MFW_SMS_OK;
}
/* glowing,2004-06-11, import from M188 */
/* 2004/4/26, wangyan add */
void sms_update_unsent_msg_info(T_MFW_SMS_STAT stat)
{
int i;
TRACE_FUNCTION("sms_update_msg_info()");
for (i=0; i<MAX_MESSAGES; i++)
{
if (msg_info[i].index EQ storage_index)
{
msg_info[i].stat = stat;
//MMI_TRACE_EVENT(("wangyan status_change_index=%d stat=%d",status_change_index,msg_info[i].stat));
}
}
storage_index = 0;
}
/* 2004/4/26, wangyan add */
/*glowing,2004-06-11, end of import */
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : rAT_PlusCMSS |
+--------------------------------------------------------------------+
PURPOSE : Response of Send a stored mobile originated
short massage.
*/
void rAT_PlusCMSS (UBYTE mr, UBYTE numSeg)
{
TRACE_FUNCTION ("rAT_PlusCMSS()");
sms_update_msg_info(MFW_SMS_STOR_SENT);
sms_signal(E_SMS_MO_AVAIL, &mr);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SMS |
| STATE : code ROUTINE : rAT_PlusCMT |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -