查看: 10380|回复: 0
打印 上一主题 下一主题

[转]短信设备指令通过串口AT指令开发异步处理短信收发思路

[复制链接]
跳转到指定楼层
楼主
发表于 2016-6-6 13:21:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
一、构建自己的接收数据缓存,异步接收串口返回数据,at命令返回值异步解析:
1,接收数据缓存,我选用的是stringbuilder,看资料其应该是线程安全的,不过好在写入数据在一个线程中,暂时没有发现问题。
2,可以使用datareceived事件,或是建立单独线程轮询,我选用后者。
3,对于收到的数据,建立单独的解析函数,解析命令结果或者收到的其他信息,如收到短信或来电等。
4,考虑到效率问题和对sim卡的保护,接收短信息的缓存首选设备(me)或混合(mt),如果设备不支持才选用sim卡(sm)
5,短息通知我选择即时通知(at+cnmi=2,2),不支持则选缓存通知(at+cnmi=2,1)。
二、at命令的同步问题:
1,由于命令返回结果是异步接收的,所以我使用menualresetevent,控制并等待结果返回。
2,数据解析函数解析出命令结果后,set信号量,命令发送函数得以继续执行。
三、数据解析函数的关键点:
1、触发数据解析函数的时机:
考虑效率问题,不可能每次收到数据都调用解析函数。分析at命令结果以及短息通知等数据,我发现绝大多数情况下,这些数据都是以\r\n结尾,所以每当收到\r\n的时候都要调用解析函数;另外还有特殊情况,例如:at+cmgs和at+cmgw,这两个命令都要等待">"的出现然后再发送数据,所以当执行这些特殊命令时,就要检测">"的出现。
2、数据边界处理:
主要是,收到的数据没有已\r\n结尾的(除了上面说的">")一定不能参与解析,否则会造成数据不完整。
3、数据解析方式:
首先、按照\r\n拆分所有数据为字符串数组。
其次、根据每种数据的特点,分别解析。比如正在执行at命令,那么必须收到“error”或“ok"之后,命令的返回就已经完整。再如收到即时短息通知的解析方法:以”+cmt:"开头的一行数据以及下一行数据。
最后、未解析出的数据重新放回缓存中,留待下次继续处理。

GSM MODEM短信收发设备AT指令集下载: wavecom详细at指令集.doc (126 KB, 下载次数: 2926)
文章转自:短信收发设备GSM Modem异步处理收发短信的总结 - 博客园
此文链接:http://www.makaidong.com/IT%E5%8D%9A%E5%AE%A2%E5%9B%AD/16290.shtml

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|未来时代科技 ( 粤ICP备12044031号-1

GMT+8, 2024-11-22 21:41 , Processed in 0.064306 second(s), 31 queries .

Powered by WLSD X3.1

© 2013-2014 WLSD Inc.

快速回复 返回顶部 返回列表
 
【电话】(15118131494)
【QQ】 未来时代科技01 售前咨询
【QQ】 未来时代科技02 售后技术
【旺旺】 请问有什么可以帮到您?不在线可留言.
【邮箱】
inextera@sina.com
【地址】 (深圳市龙岗坂田扬马小区)