MTK_短信.doc_第1页
MTK_短信.doc_第2页
MTK_短信.doc_第3页
MTK_短信.doc_第4页
MTK_短信.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文旨在记录开发中遇到的问题和使用到的资源,方便查找和定位。文档中添加的注释和描述属于个人理解,仅供参考,请以MTK文档MMI_DD_Messages为准。(V2009-04-10)1、全局变量和资源短信箱容量custompsIWIT23_07A_PMJ_BBcustomer_ps_inc.h #define CM_SMS_MAX_MSG_NUM 400 / 手机 + SIM卡customcommonPLUTO_MMInvram_common_defs.h#define NVRAM_EF_SMSAL_SMS_TOTAL 200 / 手机信箱和索引表customcommonmmi_msg_context.c unsigned short mmi_frm_sms_inbox_listCM_SMS_MAX_MSG_NUM;/ 收件箱索引表 unsigned short mmi_frm_sms_outbox_listCM_SMS_MAX_MSG_NUM; / 发件箱索引表mmi_frm_sms_msgbox_struct mmi_frm_sms_msg_boxCM_SMS_MAX_MSG_NUM;/ 信箱plutommimmimiscframeworkmiscframeworkincSMSApi.hmmi_frm_sms_app_msgbox_enum / 信箱类型枚举 MMI_FRM_SMS_APP_INBOX = 0x02, MMI_FRM_SMS_APP_OUTBOX = 0x04plutommimmimiscframeworkmiscframeworkincSMSStruct.hmmi_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_listitemIndex - smsIndex 短信2 . 短信n 短信箱(字串/屏幕)资源plutommimmiMessagesMessagesIncMessagesResourceData.hSTR_INBOX_MENUENTRY / “收件箱”STR_OUTBOX_MENUENTRY, / “发件箱”SCR_ID_MSG_INBOX_LIST / 收件箱屏SCR_ID_MSG_OUTBOX_LIST,/ 发件箱屏幕STR_SCR6028_CAPTION / “消息选单”2、发短信2.1、发送过程SmsMoMtGuiInterfaceSmsPsHandlerSMSCoreSMSMsg1mmi_msg_highlight_done短信编辑完成mmi_msg_entry_send_option进入发送选项2mmi_msg_highlight_send_only高亮(仅)发送选项3mmi_msg_send_msg_to_only_entry进入(仅)发送选项4mmi_msg_send_msg_reqmmi_frm_sms_send_smsmmi_frm_sms_write_actionmmi_frm_sms_read_action5mmi_frm_sms_pre_send_sms6 mmi_frm_sms_send_sms_reqmmi_frm_sms_send_sms_seg. .7mmi_frm_sms_send_sms_rspmmi_msg_send_msg_rsp HighlightWMessageHandler回到写短信菜单项2.2、发送过程详解:2.2.1、短信编辑【完成】短信编辑编辑【完成】后,按完成键盘进入发送选项单: SmsMoMtGuiInterface.c void mmi_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); . 进入发送选项,将默认发送选项设为(仅)发送(SEND ONLY): SmsMoMtGuiInterface.c void mmi_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、选择发送选项以(仅)发送(SEND ONLY)为例。在高亮事件中注册ENTRY函数: SmsMoMtGuiInterface.c void mmi_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 void mmi_msg_send_msg_to_only_entry(void) . g_msg_cntx.msg_send_info.CurrSendSmsNumbers = 0; g_msg_cntx.msg_send_info.TotalSendSmsNumbers = 1; . else if (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 void mmi_msg_send_msg_req(U8 *number, U16 replyindex, U8 hidenumscreen) 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: to control if we can release EMS or not*/ . 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 void mmi_frm_sms_send_sms(PsFuncPtrU16 callback, module_type mod_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); U8 mmi_frm_sms_write_action(PsFuncPtrU16 callback, module_type mod_src, void *data, PsFuncPtr function) mmi_frm_sms_action_struct action; 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(); return TRUE; U8 mmi_frm_sms_read_action(void) PsFuncPtr currFuncPtr = mmi_frm_sms_actionmmi_frm_sms_action_head.action; void *currFuncData = mmi_frm_sms_actionmmi_frm_sms_action_head.data; . mmi_frm_sms_action_num-; . if (currFuncPtr != NULL) (*currFuncPtr) (currFuncData); . return TRUE; 2.3.5、短信发送预处理 SMSMsg.c void mmi_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、短信发送请求 void mmi_frm_sms_send_sms_req(void) . /* check SC: get SC address, inMsg keeps the flag */ if (sendSMS-sendcheck & MMI_FRM_SMS_SC) != MMI_FRM_SMS_SC) . 首次进入 . return; /* check DA: show input screen, inMsg keeps the number */ if (sendSMS-sendcheck & MMI_FRM_SMS_DA) != MMI_FRM_SMS_DA) .二次进入, 弹出号码输入框. else if (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; /* check validity of DA */ . /* check FDL: when FDN on */ .号码输入完毕, 按确认到此. .短信内容编码. 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 msg_id = (kal_uint16) MSG_ID_MMI_SMS_DELIVER_MSG_IND;/* Set the message id */ MSG_ID_MMI_SMS_DELIVER_MSG_IND被注册到mmi_frm_sms_new_sms_ind函数:SMSMsg.cvoid mmi_frm_sms_set_protocol_event_handler(void) SetProtocolEventHandler(mmi_frm_sms_new_sms_ind, PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND);ProtocolEvents.h#define PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND MSG_ID_MMI_SMS_DELIVER_MSG_IND SEND_ILM(MOD_L4C,MOD_MMI,MMI_L4C_SAP,ilm_ptr);MMI层收到新短信,更新短信计数器,转换短信数据,并压入未读短信队列。短信过滤等操作放在CHISTIncRecvdSMS()之前。plutommimmiMiscFrameworkMiscFrameworkSrcSMSMsg.cvoid mmi_frm_sms_new_sms_ind(void *inMsg) if( ( 1 = IsBlockAndEmergencyOnly() ) delete_pending_sms(); CHISTIncRecvdSMS();/* convert L4 data to MMI data */mmi_frm_sms_convert_new_sms(msgInd, data);/* put to awaited list last entry, from now on only process new data as awaited list last entry */mmi_frm_sms_add_new_sms(data, msgInd-no_msg_data, msgInd-msg_data);/* process new sms data */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。plutommimmiMiscFrameworkMiscFrameworkSrcSMSCore.cvoid mmi_frm_sms_new_sms(void) . case MMI_FRM_SMS_AWAITS: mmi_frm_sms_indicate_sms(index); .plutommimmiMiscFrameworkMiscFrameworkSrcSMSCore.cvoid mmi_frm_sms_indicate_sms(U16 index)mmi_frm_sms_convert_mt_to_entry(data, entry);plutommimmiMiscFrameworkMiscFrameworkSrcSMSUtil.cvoid mmi_frm_sms_convert_mt_to_entry(mmi_frm_sms_deliver_msg_struct *data, mmi_frm_sms_msgbox_struct *entry) type = MMI_FRM_SMS_UNREAD;/ 设置短信类型 msgbox_index = mmi_frm_sms_add_sms_to_msgbox(entry, data-index, segment);/ 添加短信到inbox,关键!plutommimmiMiscFrameworkMiscFrameworkSrcSMSUtil.cU16 mmi_frm_sms_add_sms_to_msgbox(mmi_frm_sms_msgbox_struct *entry, U16 index, U8 thisseg)entryindex = mmi_frm_sms_add_sms_entry(entry, index, thisseg);plutommimmiMiscFrameworkMiscFrameworkSrcSMSUtil.cU16 mmi_frm_sms_add_sms_entry(mmi_frm_sms_msgbox_struct *data, U16 L4index, U8 thissegment) #endif /* _UNIFIED_MESSAGE_SIMBOX_SUPPORT_ */ if (data-msgtype & MMI_FRM_SMS_INBOX) = MMI_FRM_SMS_INBOX) type = MMI_FRM_SMS_INBOX;/短信分类 mmi_frm_sms_add_sms_to_list(entry, entryindex);plutommimmiMiscFrameworkMiscFrameworkSrcSMSUtil.cvoid mmi_frm_sms_add_sms_to_list(mmi_frm_sms_msgbox_struct *data, U16 index) case MMI_FRM_SMS_UNREAD:. 添加索引到收件箱 . if (i = mmi_frm_sms_msg_check_num) mmi_frm_sms_new_msg_ind(msgbox_index); plutommimmiMiscFrameworkMiscFrameworkSrcSMSMsg.cvoid mmi_frm_sms_new_msg_ind(U16 index) if (mmi_frm_sms_interrupt_handleri.msgid = PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND) mmi_frm_sms_interrupt_handleri.callback(void*)data, MOD_MMI, MMI_FRM_SMS_OK);/callback注册的函数为mmi_msg_handle_new_msg_indplutommimmimessagesmessagessrcSmsPsHandler.cvoid mmi_msg_set_protocol_event_handler(void) mmi_frm_sms_reg_interrupt_check(MOD_MMI, PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND, mmi_msg_handle_new_msg_ind); /对比mmi_msg_set_protocol_event_handler与mmi_frm_sms_set_protocol_event_handler,这两个函数都使用了 PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND break; 3.2.3、新短信提示收到新短信之后,弹出“新短信”提示,如果当前处在待机界面,则显示新短信来自,并更改左软键为 读取。plutommimmiMessagesMessagesSrcMessagesMiscell.cvoid mmi_msg_new_msg_ind(U16 index) . #ifdef _UNIFIED_MESSAGE_SIMBOX_SUPPORT_ mmi_msg_entry_new_sim_msg_ind(); #else /* _UNIFIED_MESSAGE_SIMBOX_SUPPORT_ */ mmi_msg_entry_new_msg_ind();/新短信查看入口 .mmi_frm_sms_get_list_index(&type, &list_index, g_msg_cntx.msg_ind_index);plutommimmimiscframeworkmiscframeworksrcSMSCore.cvoid mmi_frm_sms_get_list_index(U16 *type, U16 *index, U16 msgbox_index) mmi_frm_sms_get_sms_list_index(type, index, msgbox_index);void mmi_frm_sms_get_sms_list_index(U16 *type, U16 *index, U16 msgbox_index)while (i mmi_frm_sms_inbox_size).while (i mmi_frm_sms_outbox_size).while (i mmi_frm_sms_bizbox_size)./扩展功能. mmi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论