MTKSMS模块学习笔记(一)

上传人:伴*** 文档编号:82024067 上传时间:2022-04-28 格式:DOC 页数:6 大小:92KB
返回 下载 相关 举报
MTKSMS模块学习笔记(一)_第1页
第1页 / 共6页
MTKSMS模块学习笔记(一)_第2页
第2页 / 共6页
MTKSMS模块学习笔记(一)_第3页
第3页 / 共6页
点击查看更多>>
资源描述
MTK信息发送过程简介版本记录版 本作 者备 注0.1 卞刘卫初始版本1编写目的 本文档作为学习短信模块系列笔记之一,简要介绍了信息发送模块的基本流程及其基于MTK6217平台的代码实现。2参考资料 MMI_DD_Messages.pdf MTK 6217代码实现 3流程图 4实现代码片断4.1 void HighlightWMessageHandler (void)1)设置mmi_msg_entry_write_msg入口函数2)设置SMS发送模式为g_msg_cntx.sendMessageCase = SEND_CASE_SEND_ONLY;g_msg_cntx.PhbSmsInterfaceState = MMI_SEND_ONLY;4.2 void mmi_msg_entry_write_msg (void)1)禁止定时关机,AlmDisableSPOF();2)绑定左软件:mmi_msg_entry_option_write3)绑定右Send键:mmi_msg_entry_send_option4.3 void mmi_msg_highlight_send_only (void) =mmi_msg_send_msg_to_only_entry=mmi_msg_send_msg_req(U8*)g_msg_cntx.smsPhoneNumber, MMI_FRM_SMS_INVALID_INDEX,0);4.4 void mmi_msg_send_msg_req (U8* number, U16 replyindex, U8 hidenumscreen)/* for send to many or send to group, show only one sending screen for all numbers */if(g_msg_cntx.msg_send_info.CurrSendSmsNumbers+1)sendrequire |= MMI_FRM_SMS_MORE;/* if sendcheck has a bit of MMI_FRM_SMS_SCR, do not show sending screen */if(g_msg_cntx.msg_send_info.CurrSendSmsNumbers!=0)sendData-sendcheck |= MMI_FRM_SMS_SCR;mmi_frm_sms_send_sms(mmi_msg_send_msg_rsp, MOD_MMI, sendData);OslMfree(sendData);4.5 mmi_frm_sms_send_sms = mmi_frm_sms_pre_send_sms = mmi_frm_sms_send_sms_req(); 4.6 void mmi_frm_sms_send_sms_req (void) /* check SC: get SC address, inMsg keeps the flag */ /* 检测信息中心号码, 如果信息中心号码为空, 则先从NV中读取当前的配置文件,这通过mmi_frm_sms_get_sc_addr_req函数中由MMI层向L4层发送PRT_MSG_ID_MMI_SMS_GET_PROFILE_PARAMS_REQ指令来实现。*/ if(sendSMS-sendcheck & MMI_FRM_SMS_SC)!=MMI_FRM_SMS_SC) S16errorCode=0;S8nvramActiveProfileIndex=0;ReadValue(NVRAM_SMS_ACTIVE_PROFILE_INDEX, &nvramActiveProfileIndex, DS_BYTE, &errorCode);mmi_frm_sms_get_sc_addr_req(&nvramActiveProfileIndex); sendSMS-profile=nvramActiveProfileIndex; / sndSMS-profile保存当前配置文件的索引return; / ?问题点:如果从NV获取信息中心号码失败,如何处理?/*check DA: show input screen, inMsg keeps the number*/ /* 检测目的地, 当目的地为空时,(1)如果设置MMI_FRM_SMS_NUM_SCR掩码,则进入短信目的号码编辑Screen,并取消MMI_FRM_SMS_NUM_SCR标记;(2)否则如果目的地号码为0并且没有设置回复短信标记掩码MMI_FRM_SMS_REPLY,则也进入号码编辑界面 */if(sendSMS-sendcheck & MMI_FRM_SMS_DA)!=MMI_FRM_SMS_DA) / (1)memset(S8*)g_frm_sms_cntx.mmi_frm_sms_number, 0, MAX_DIGITS_SMS);if(sendSMS-sendrequire & MMI_FRM_SMS_NUM_SCR)=MMI_FRM_SMS_NUM_SCR)AnsiiToUnicodeString(S8*)g_frm_sms_cntx.mmi_frm_sms_number, (S8*)sendSMS-number);mmi_frm_sms_entry_number();sendSMS-sendrequire&=MMI_FRM_SMS_NUM_SCR;return;else if (strlen(S8*)sendSMS-number)=0)&(sendSMS-sendrequire & MMI_FRM_SMS_REPLY)=0) /(2) if (GetCurrScrnId()!=SCR_ID_MSG_NUMBER)mmi_frm_sms_entry_number(); return; sendSMS-sendcheck |= MMI_FRM_SMS_DA; / 设置MMI_FRM_SMS_DA标记 / ?问题点:如果设置了MMI_FRM_SMS_DA标记但从号码编辑界面返回了而没有保存编辑的号码, 则是什么结果?/*check FDL: when FDN on*/#ifdef _CHECK_FDL_BY_MMI_/* 检测FDL:在mmi_frm_sms_check_fdl_req函数中由MMI层向L4层发送PRT_MSG_ID_MMI_SMS_FDN_CHECK_REQ指令来实现, 并绑定回调函数mmi_frm_sms_check_fdl_rsp 等待检测的结果,并设置MMI_FRM_SMS_FDL */if(sendSMS-sendcheck & MMI_FRM_SMS_FDL)!=MMI_FRM_SMS_FDL)if(gSecuritySetupContext.FdlStatus)U8* msg=OslMalloc(strlen(S8*)sendSMS-number);memcpy(S8*)msg, (S8*)sendSMS-number, strlen(S8*)sendSMS-number);mmi_frm_sms_check_fdl_req(msg);return;sendSMS-sendcheck |= MMI_FRM_SMS_FDL; /?问题点:如果检测失败,则设置的MMI_FRM_SMS_FDL怎么办?#endif/* 相关的检测工作完成, 下面是发送消息部分 */if(sendSMS-filename != NULL) / 通常是EMS的情况 /* 检测消息长度的合法性,如果文件长度不适合, 0或超过了5个文本短信的长度,则回调通知用户并释放SendSMS,信息发送失败*/ if(textlen=0 |textlenMMI_FRM_SMS_MSG_LEN*5) /* 如果长度检测合法, 则从文件中获取相关的内容, 如果出错, 则同样释放SendSMS,信息发送失败*/ AnsiiNToUnicodeString(textbufucs2, textbuf, textlen); else if(sendSMS-string!=NULL & sendSMS-stringlength0) / 普通文本短信的情况memcpy(textbufucs2, sendSMS-string, (sendSMS-stringlength)*ENCODING_LENGTH);/检测信息发送端口及检测信息类型/检测信息结构所附的文件名及信息内容/ 其中任何一部出错, 都会释放SendSMS结构, 发送信息失败/* 给信息结构打包, 打包结果取决于GSM SMS 协议相关, 通常的工作是加上路由、时间戳及容错相关的信息头,详见GSM 协议文档 */result = mmi_frm_sms_pack_sms();if(result!=EMS_OK) /*绑定发送消息响应回及取消发送调函数, 如果不在消息发送显示界面, 则进入该界面*/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);if(sendSMS-sendcheck & MMI_FRM_SMS_SCR)!=MMI_FRM_SMS_SCR)mmi_frm_sms_entry_send(); / 注意, 此处并没有真正发送消息,而只是显示消息发送界面/ 获取消息段并逐段发送消息j=(PendingSaveSendData.totalSegments=MMI_FRM_SMS_SEND_SEG)? MMI_FRM_SMS_SEND_SEG : 1;PendingSaveSendData.nextSegment=0;PendingSaveSendData.presentSegments=0;sendResult=MMI_FRM_SMS_OK;for(i=0;ij;i+)mmi_frm_sms_send_sms_seg(); /* 填充SendSMS结构体, 并由MMI层向L4层发送PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ指令 */ 5. 相关问题5.1信息发送失败后如何处理5.2信息发送过程中取消发送如何处理5.3信息编辑过程中输入法切换有什么注意点这些问题将在后续添加到本文档, 由于本人水平的限制, 文中的错误再所难免,欢迎大家批评指正,谢谢!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!