MTK短信.docx

上传人:b****6 文档编号:7922950 上传时间:2023-01-27 格式:DOCX 页数:52 大小:38.60KB
下载 相关 举报
MTK短信.docx_第1页
第1页 / 共52页
MTK短信.docx_第2页
第2页 / 共52页
MTK短信.docx_第3页
第3页 / 共52页
MTK短信.docx_第4页
第4页 / 共52页
MTK短信.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

MTK短信.docx

《MTK短信.docx》由会员分享,可在线阅读,更多相关《MTK短信.docx(52页珍藏版)》请在冰豆网上搜索。

MTK短信.docx

MTK短信

本文旨在记录开发中遇到的问题和使用到的资源,方便查找和定位。

文档中添加的注释和描述属于个人理解,仅供参考,请以MTK文档《MMI_DD_Messages》为准。

(V2009-04-10)

1、全局变量和资源

短信箱容量

[\custom\ps\IWIT23_07A_PMJ_BB\customer_ps_inc.h]

#defineCM_SMS_MAX_MSG_NUM400//手机+SIM卡

[\custom\common\PLUTO_MMI\nvram_common_defs.h]

#defineNVRAM_EF_SMSAL_SMS_TOTAL200//手机

信箱和索引表

[\custom\common\mmi_msg_context.c]

unsignedshortmmi_frm_sms_inbox_list[CM_SMS_MAX_MSG_NUM];//收件箱索引表

unsignedshortmmi_frm_sms_outbox_list[CM_SMS_MAX_MSG_NUM];//发件箱索引表

mmi_frm_sms_msgbox_structmmi_frm_sms_msg_box[CM_SMS_MAX_MSG_NUM];//信箱

[\plutommi\mmi\miscframework\miscframeworkinc\SMSApi.h]

mmi_frm_sms_app_msgbox_enum//信箱类型枚举

MMI_FRM_SMS_APP_INBOX=0x02,

MMI_FRM_SMS_APP_OUTBOX=0x04

[\plutommi\mmi\miscframework\miscframeworkinc\SMSStruct.h]

mmi_frm_sms_msgbox_enum//信箱类型枚举

MMI_FRM_SMS_INBOX=0x02,

MMI_FRM_SMS_OUTBOX=0x04,

索引表mmi_frm_sms_inbox_list和索引表mmi_frm_sms_outbox_list,分别对应【消息】菜单中的【收件箱】和【发件箱】。

信箱mmi_frm_sms_msg_box保存的只是短信副本,用于显示和其它处理,直接更改其数据对实际的短信无效,必须向L4层发送消息才能生效。

通过索引列表(mmi_frm_sms_xxbox_list)在短信箱菜单和短信之间建立关联:

>菜单

>消息

>收件箱

>短信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):

[SmsMoMtGuiInterface.c]

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函数:

[SmsMoMtGuiInterface.c]

voidmmi_msg_highlight_send_only(void)

{

#ifdef__MMI_SEND_BY_SEARCH_NAME__

[...]

#else/*__MMI_SEND_BY_SEARCH_NAME__*/

mmi_msg_highlight_generic(

STR_GLOBAL_OK,

IMG_GLOBAL_OK,

STR_GLOBAL_BACK,

IMG_GLOBAL_BACK,

mmi_msg_send_msg_to_only_entry,

GoBackHistory);

#endif/*__MMI_SEND_BY_SEARCH_NAME__*/

}

2.2.2、进入【(仅)发送】选项

[SmsMoMtGuiInterface.c]

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);

}

[...]

returnTRUE;

}

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));

OslMfree(sendData);

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*/

if((sendSMS->sendcheck&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();

}

return;

}

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

{

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()。

[SMSMsg.c]

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

SMSMsg

SmsPsHandler

MessagesMiscell

1

l4c_sms_new_msg_text_lind

[...]

mmi_frm_sms_new_sms_ind

2

mmi_frm_sms_new_sms

mmi_frm_sms_indicate_sms

mmi_frm_sms_new_msg_ind

3

mmi_msg_handle_new_msg_ind

4

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);

}

[...]

}

 

[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]

voidmmi_frm_sms_indicate_sms(U

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1