短消息接收流程.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
短消息接收流程

短消息接收流程 短消息协议栈简介 短消息是一种特殊突发性数据业务,与其他业务相对独立,即使到3G也不会改变太多。 短消息协议栈主要分为3层,如下图所示,有中继层,传输层和应用层。MS(移动台)和MC(短消息中心)间是点对点的。MC的主要作用是短消息的储存及转发。我们应用开发主要关注于应用层。有兴趣可参考文挡IS-637协议。 接收流程 MS通过寻呼信道或前向业务信道从空口收到短消息的比特流,继而进行消息验证,消息解码,给基站回传输层ACK,最后传到UI进行保存及提示动作。如下图所示: UI层与短消息接收相关代码 1.短消息监听 成功接收到一条消息后,uixuasms.c中的uiuasms_msg_listener()函数会检测到此事件,并将此事件转成UI_SMS_F命令,示例代码如下: 2.ui_cmd将此命令放进UI命令队列,并发一个信号给UI任务,示例代码如下: 3.UI任务的Dispatcher接收到信号,ui_signal( sigs, ui_cmd_q )开始处理此信号;由于此信号是一个命令,ui_signal又将它交给ui_handle_cmds()来处理,下面是ui_signal中的部分代码: 4. ui_handle_cmds()中将此命令转成状态机可接收事件,示例代码如下: 注意:这部分代码就有传输层ACK的处理。 然后再根据不同的存储状态来分别处理相应事件: 5.在uistate.c中,将对UI_SMS_MSG_F事件根据当前所处不同大状态进行相应处理,在非IDLE界面仅响铃或振动处理,而在IDLE界面除此之外还有新消息POP提示或显示新消息通知。代码冗长,就不列举了。 到此为止,一个完整的消息接收接收就完成了。 收到短消息的比特流 (通过空中接口) 消息验证 消息解码 给基站回传输层ACK 传到UI进行保存及提示动作 void uiuasms_msg_listener ( uasms_transaction_id_type transaction_id, const uasms_client_message_type * message_ptr ) { …… cmd_ptr-hdr.cmd = UI_SMS_F; cmd_ptr-hdr.task_ptr = NULL; cmd_ptr-hdr.done_q_ptr = ui_cmd_free_q; …… ui_cmd(cmd_ptr); /* …… } void ui_cmd (ui_cmd_type *cmd_ptr /* command block to UI */) { …… (void) q_link( cmd_ptr, cmd_ptr-hdr.link ); /* init link */ q_put( ui_cmd_q, cmd_ptr-hdr.link ); /* and queue it */ (void) rex_set_sigs( ui_tcb, UI_CMD_Q_SIG ); /* signal the UI task */ } if( sigs UI_CMD_Q_SIG ) { (void) rex_clr_sigs( ui_tcb, UI_CMD_Q_SIG ); /* Handle commands on queue till the queue is empty. */ while( ( cmd_ptr = (ui_cmd_type *) q_get( ui_cmd_q_ptr )) != NULL ) { ui_handle_cmds( cmd_ptr ); /* actually handle it */ …… } } case UI_SMS_F: /* Attempt to store new SMS message */ tl_ack_requested = ( cmd_ptr-sms.buf_ptr-data.sms_param_m SMSI_BEARER_REPLY ) ? TRUE : FALSE; sto_status = (ui_sms_op_status_type)ui_sms_store_new_msg( cmd_ptr ); if( tl_ack_requested == TRUE )/* 注意:消息的存储是在进入SMS状态前完成的*/

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档