MTK短信Word文档下载推荐.docx
《MTK短信Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《MTK短信Word文档下载推荐.docx(52页珍藏版)》请在冰豆网上搜索。
>
菜单
>
消息
收件箱
短信1-->
mmi_frm_sms_inbox_list[itemIndex]-->
smsIndex
短信2
[...]
短信n
短信箱(字串/屏幕)资源
[plutommi\mmi\Messages\MessagesInc\MessagesResourceData.h]
STR_INBOX_MENUENTRY//“收件箱”
STR_OUTBOX_MENUENTRY,//“发件箱”
SCR_ID_MSG_INBOX_LIST//收件箱屏
SCR_ID_MSG_OUTBOX_LIST,//发件箱屏幕
STR_SCR6028_CAPTION//“消息选单”
2、发短信
2.1、发送过程
SmsMoMtGuiInterface
SmsPsHandler
SMSCore
SMSMsg
1
mmi_msg_highlight_done
短信编辑[完成]
mmi_msg_entry_send_option
进入[发送选项]
2
mmi_msg_highlight_send_only
高亮[(仅)发送]选项
3
mmi_msg_send_msg_to_only_entry
进入[(仅)发送]选项
4
mmi_msg_send_msg_req
mmi_frm_sms_send_sms
mmi_frm_sms_write_action
mmi_frm_sms_read_action
5
mmi_frm_sms_pre_send_sms
6
mmi_frm_sms_send_sms_req
mmi_frm_sms_send_sms_seg
[......]
7
mmi_frm_sms_send_sms_rsp
mmi_msg_send_msg_rsp
HighlightWMessageHandler
回到[写短信]菜单项
2.2、发送过程详解:
2.2.1、短信编辑【完成】
短信编辑编辑【完成】后,按[完成]键盘进入发送选项单:
[SmsMoMtGuiInterface.c]
voidmmi_msg_highlight_done(void)
{
mmi_msg_highlight_generic(
STR_GLOBAL_OK,
IMG_GLOBAL_OK,
STR_GLOBAL_BACK,
IMG_GLOBAL_BACK,
mmi_msg_entry_send_option,
GoBackHistory);
[...]
}
进入[发送选项],将默认发送选项设为(仅)发送(SENDONLY):
voidmmi_msg_entry_send_option(void)
if(g_msg_cntx.sendMessageCase!
=SEND_CASE_SEND_FROM_OTHER_APP)
{
g_msg_cntx.sendMessageCase=SEND_CASE_SEND_ONLY;
/*reset*/
}
}
2.2.1、选择发送选项
以(仅)发送(SENDONLY)为例。
在高亮事件中注册ENTRY函数:
voidmmi_msg_highlight_send_only(void)
#ifdef__MMI_SEND_BY_SEARCH_NAME__
#else/*__MMI_SEND_BY_SEARCH_NAME__*/
mmi_msg_send_msg_to_only_entry,
#endif/*__MMI_SEND_BY_SEARCH_NAME__*/
2.2.2、进入【(仅)发送】选项
voidmmi_msg_send_msg_to_only_entry(void)
g_msg_cntx.msg_send_info.CurrSendSmsNumbers=0;
g_msg_cntx.msg_send_info.TotalSendSmsNumbers=1;
elseif(g_msg_cntx.sendMessageCase!
=SEND_CASE_SEND_FROM_PHB)
memset(g_msg_cntx.smsPhoneNumber,0,(MAX_DIGITS+1)*ENCODING_LENGTH);
mmi_msg_send_msg_req((U8*)g_msg_cntx.smsPhoneNumber,MMI_FRM_SMS_INVALID_INDEX,0);
2.2.3、设置短信发送请求标志
[SmsPsHandler.c]
voidmmi_msg_send_msg_req(U8*number,U16replyindex,U8hidenumscreen)
mmi_frm_sms_send_struct*sendData=OslMalloc(sizeof(mmi_frm_sms_send_struct));
memset((S8*)sendData,0,sizeof(mmi_frm_sms_send_struct));
#ifdef__MMI_UNIFIED_MESSAGE__
if(!
(mmi_um_get_current_msg_box_type()==UM_MSG_BOX_TYPE_UNSENT&
&
GetExitScrnID()==SCR_ID_MSG_OUTBOX_OPTION))
#else
if(GetMessagesCurrScrnID()!
=SCR_ID_MSG_OUTBOX_SEND_OPTION)
#endif
sendData->
sendrequire=MMI_FRM_SMS_SAVE_AFTER_FAIL;
/*ML:
tocontrolifwecanreleaseEMSornot*/
mmi_frm_sms_send_sms(mmi_msg_send_msg_rsp,MOD_MMI,sendData);
OslMfree(sendData);
2.3.4、注册短信发送回调函数
注册短信发送回调函数(callback,mmi_msg_send_msg_rsp),调用短信发送预处理函
数(action,mmi_frm_sms_pre_send_sms)
[SMSCore.c]
voidmmi_frm_sms_send_sms(PsFuncPtrU16callback,module_typemod_src,mmi_frm_sms_send_struct*sendData)
mmi_frm_sms_send_struct*data=OslMalloc(sizeof(mmi_frm_sms_send_struct));
memcpy((S8*)data,(S8*)sendData,sizeof(mmi_frm_sms_send_struct));
mmi_frm_sms_write_action(callback,mod_src,data,mmi_frm_sms_pre_send_sms);
U8mmi_frm_sms_write_action(PsFuncPtrU16callback,module_typemod_src,void*data,PsFuncPtrfunction)
mmi_frm_sms_action_structaction;
action.mod_src=mod_src;
action.data=data;
action.callback=callback;
action.action=function;
mmi_frm_sms_action_num++;
if(mmi_frm_sms_action_curr==MMI_FRM_SMS_INVALID_NUM)
mmi_frm_sms_read_action();
returnTRUE;
U8mmi_frm_sms_read_action(void)
PsFuncPtrcurrFuncPtr=mmi_frm_sms_action[mmi_frm_sms_action_head].action;
void*currFuncData=mmi_frm_sms_action[mmi_frm_sms_action_head].data;
mmi_frm_sms_action_num--;
if(currFuncPtr!
=NULL)
(*currFuncPtr)(currFuncData);
2.3.5、短信发送预处理
[SMSMsg.c]
voidmmi_frm_sms_pre_send_sms(void*inMsg)
{
mmi_frm_sms_send_struct*sendData=(mmi_frm_sms_send_struct*)inMsg;
[...]
mmi_frm_sms_free_sendsms_data();
sendSMS=OslMalloc(sizeof(mmi_frm_sms_send_struct));
memcpy((S8*)sendSMS,(S8*)sendData,sizeof(mmi_frm_sms_send_struct));
mmi_frm_sms_send_sms_req();
2.3.6、短信发送请求
voidmmi_frm_sms_send_sms_req(void)
/*checkSC:
getSCaddress,inMsgkeepstheflag*/
if((sendSMS->
sendcheck&
MMI_FRM_SMS_SC)!
=MMI_FRM_SMS_SC)
[...首次进入...]
return;
/*checkDA:
showinputscreen,inMsgkeepsthenumber*/
MMI_FRM_SMS_DA)!
=MMI_FRM_SMS_DA)
[...二次进入,弹出号码输入框...]
elseif((strlen((S8*)sendSMS->
number)==0)&
((sendSMS->
sendrequire&
MMI_FRM_SMS_REPLY)==0))
if(GetCurrScrnId()!
=SCR_ID_MSG_NUMBER)
mmi_frm_sms_entry_number();
sendSMS->
sendcheck=MMI_FRM_SMS_DA;
/*checkvalidityofDA*/
/*checkFDL:
whenFDNon*/
[...号码输入完毕,按[确认]到此...]
[...短信内容编码...]
result=mmi_frm_sms_pack_sms();
[...绘制发送短信发送界面...]
mmi_frm_sms_entry_send();
[...设置短信发送回调...]
SetProtocolEventHandler(mmi_frm_sms_send_sms_rsp,PRT_MSG_ID_MMI_SMS_SEND_MSG_RSP);
SetProtocolEventHandler(mmi_frm_sms_abort_sms_ind,PRT_MSG_ID_MMI_SMS_SEND_ABORT_START_IND);
[...(如果是长短信,循环)发送...]
for(i=0;
i<
j;
i++)
mmi_frm_sms_send_sms_seg();
voidmmi_frm_sms_send_sms_seg(void)
MMI_FRM_SMS_SEND_MSG_REQ_STRUCT*sendSms;
mmi_frm_sms_send_message(MOD_MMI,MOD_L4C,0,PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ,(oslParaType*)sendSms,NULL);
2.3.7、短信发送回调
无论发送是否成功(或者[取消]),最后返回并高亮[写短信]菜单项:
HighlightWMessageHandler()。
voidmmi_frm_sms_send_sms_rsp(void*inMsg)
mmi_frm_sms_callback_action((void*)number,sendResult);
[SmsPsHandler.c]
voidmmi_msg_send_msg_rsp(void*number,module_typemod,U16result)
switch(result)
caseMMI_FRM_SMS_OK:
[...设置跳转节点...]
elseif(IsScreenPresent(SCR_ID_MSG_WRITE))
SetMessagesScrnIdToDelHistoryNodes(SCR_ID_MSG_WRITE);
[...删除历史屏幕,返回[写短信]...]
if(g_msg_cntx.msg_send_info.CurrSendSmsNumbers==g_msg_cntx.msg_send_info.TotalSendSmsNumbers)
DeleteMessagesHistoryNodes();
mmi_frm_sms_delete_screen_history();
3、收短信
3.1、短信接收过程
l4a_callback
MessagesMiscell
l4c_sms_new_msg_text_lind
[...]
mmi_frm_sms_new_sms_ind
mmi_frm_sms_new_sms
mmi_frm_sms_indicate_sms
mmi_frm_sms_new_msg_ind
mmi_msg_handle_new_msg_ind
mmi_msg_new_msg_ind
mmi_msg_entry_new_msg_ind
3.2、接收过程详解:
3.2.1、收到新短信
L4层收到短信,向MMI_Task递交消息。
[l4a_callback.c]
voidl4c_sms_new_msg_text_lind(...)
{
[…]
ilm_ptr->
msg_id=(kal_uint16)MSG_ID_MMI_SMS_DELIVER_MSG_IND;
/*Setthemessageid*/
//MSG_ID_MMI_SMS_DELIVER_MSG_IND被注册到mmi_frm_sms_new_sms_ind函数:
↘
[SMSMsg.c]
voidmmi_frm_sms_set_protocol_event_handler(void)
SetProtocolEventHandler(mmi_frm_sms_new_sms_ind,PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND);
[…]
}
[ProtocolEvents.h]
#definePRT_MSG_ID_MMI_SMS_DELIVER_MSG_INDMSG_ID_MMI_SMS_DELIVER_MSG_IND
[…]
SEND_ILM(MOD_L4C,MOD_MMI,MMI_L4C_SAP,ilm_ptr);
MMI层收到新短信,更新短信计数器,转换短信数据,并压入未读短信队列。
短信过滤等操作放在CHISTIncRecvdSMS()之前。
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
voidmmi_frm_sms_new_sms_ind(void*inMsg)
if((1==IsBlockAndEmergencyOnly())
delete_pending_sms();
CHISTIncRecvdSMS();
/*convertL4datatoMMIdata*/
mmi_frm_sms_convert_new_sms(msgInd,data);
/*puttoawaitedlistlastentry,fromnowononlyprocessnewdataasawaitedlistlastentry*/
mmi_frm_sms_add_new_sms(data,msgInd->
no_msg_data,msgInd->
msg_data);
/*processnewsmsdata*/
mmi_frm_sms_new_sms();
3.2.2、短信分类
新短信的信箱类型为MMI_FRM_SMS_AWAITS,消息类型为mmi_frm_sms_deliver_msg_struct,必须转换为mmi_frm_sms_msgbox_struct类型,保存到全局的msgbox,并设置其信箱类型为MMI_FRM_SMS_UNREAD,添加其索引到inbox。
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
voidmmi_frm_sms_new_sms(void)
caseMMI_FRM_SMS_AWAITS:
mmi_frm_sms_indicate_sms(index);
voidmmi_frm_sms_indicate_sms(U