|
一、构建自己的接收数据缓存,异步接收串口返回数据,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
|
|