一步一步搞定手机串口短信收发~
今天终于把手机AT指令搞定了~~
拿老妈的手机大显的,一个同步线,串口的,还有同步软件。
网上不少关于串口短信收发的文章,但因为AT指令的灵活性,各个手机厂家都做了“继承”和“派生”,因此需要自己研究针对自己手机的 AT指令。
说到得到自己手机的AT指令,我花了不少心思,先是拿Win32DASM打开看同步软件里面的字符串资源,hoho,发现很全的AT指令,可是实现短信收发需要哪些呢?拿标准的AT指令表一看,还好,几乎没怎么变,不过有几个确实不一样。后来发现总是出问题,于是,我拿出了:Serial Monitor,这个真好用啊,监听别的软件的串口通信,监听一大通:
Port opened by process "PCSync_v1.1_Daxian.exe" (PID: 1864)
Request: 2005-6-16 13:01:09.422575464
41 54 2B 43 50 41 53 0D AT+CPAS.
Answer: 2005-6-16 13:01:09.422575464 (+0.0000000000 seconds)
2B 43 50 41 53 3A 20 30 0D 0A 30 0D +CPAS: 0..0.
Request: 2005-6-16 13:01:09.922588264 (+0.5000128000 seconds)
41 54 45 30 3B 56 30 0D ATE0;V0.
Answer: 2005-6-16 13:01:09.031966064 (+0.1093778000 seconds)
30 0D 0.
Request: 2005-6-16 13:01:09.031966064 (+0.0000000000 seconds)
41 54 51 30 3B 53 33 31 33 3B 53 34 31 30 3B 58 ATQ0;S313;S410;X
34 3B 26 43 31 3B 26 44 30 3B 2B 43 4D 45 45 3D 4;&C1;&D0;+CMEE=
31 0D 1.
Answer: 2005-6-16 13:01:09.125718464 (+0.0937524000 seconds)
30 0D 0.
Request: 2005-6-16 13:01:09.876070464 (+13.7503520000 seconds)
41 54 2B 57 53 45 53 3F 0D AT+WSES?.
Answer: 2005-6-16 13:01:09.969822864 (+0.0937524000 seconds)
2B 57 53 45 53 3A 20 30 0D 0A 30 0D +WSES: 0..0.
Request: 2005-6-16 13:01:09.969822864 (+0.0000000000 seconds)
41 54 2B 57 53 45 53 3D 31 0D AT+WSES=1.
Answer: 2005-6-16 13:01:09.266705464 (+0.2968826000 seconds)
30 0D 0.
上面的是初始化的AT指令,里面有指令显示形式的改变,打开手机终端界面等。
然后我拿同步软件发了个短信,监听如下:
Request: 2005-6-16 13:01:10.986805064 (+0.0000000000 seconds)
41 54 2B 57 53 45 53 3D 31 0D AT+WSES=1.
Answer: 2005-6-16 13:01:10.299313064 (+0.3125080000 seconds)
30 0D 0.
Request: 2005-6-16 13:01:10.299313064 (+0.0000000000 seconds)
41 54 2B 43 4D 47 46 3D 31 0D AT+CMGF=1.
Answer: 2005-6-16 13:01:10.393065464 (+0.0937524000 seconds)
30 0D 0.
Request: 2005-6-16 13:01:10.393065464 (+0.0000000000 seconds)
41 54 2B 43 53 4D 50 3D 31 37 2C 31 36 37 2C 30 AT+CSMP=17,167,0
2C 38 0D ,8.
Answer: 2005-6-16 13:01:10.502443264 (+0.1093778000 seconds)
30 0D 0.
Request: 2005-6-16 13:01:10.502443264 (+0.0000000000 seconds)
41 54 2B 43 4D 47 53 3D 22 31 33 38 33 32 37 31 AT+CMGS="1383271
30 30 33 38 22 0D ****". '呵呵,屏蔽~
Answer: 2005-6-16 13:01:10.596195664 (+0.0937524000 seconds)
0D 0A 3E 20 ..>
Request: 2005-6-16 13:01:10.596195664 (+0.0000000000 seconds)
35 42 39 45 39 41 38 43 36 32 34 42 36 37 33 41 5B9E9A8C624B673A
46 46 30 43 34 46 36 30 35 37 32 38 35 45 37 32 FF0C4F6057285E72
34 45 34 38 46 46 31 46 1A 4E48FF1F.
这一堆就是短信GSM7位编码的内容了,网上很多,不再赘述。 这个手机省了PDU,大概是在手机里生成吧?方便多了,呵呵
看,最后的1A,这个让我头痛了很长时间,开始总是发不出去,后来才发现少了1A,1A是终止符!
Answer: 2005-6-16 13:01:10.518171064 (+3.9219754000 seconds)
2B 43 4D 47 53 3A 20 31 30 0D 0A 30 0D +CMGS: 10..0.
Request: 2005-6-16 13:01:10.518171064 (+0.0000000000 seconds)
41 54 2B 57 53 45 53 3F 0D 41 54 2B 57 53 45 53 AT+WSES?.AT+WSES
3D 30 0D =0.
Answer: 2005-6-16 13:01:10.627548864 (+0.1093778000 seconds)
2B 57 53 45 53 3A 20 31 0D 0A 30 0D 30 0D +WSES: 1..0.0.
以上就是短信发送的整个过程,可同步软件还没有短心接收的功能,自己查了查AT表,找到了:
当有新的短消息到来时,产生提示,使用“AT+CNMI”。该指令的用法:
AT+CNMI=1
如果有新的短消息来到,则手机自动返回下列提示:
+CMTI: “SM”, <index>
此时读出<index>,然后用“AT+CMGR=<index>”指令即可读出短消息内容。
最后再说下vb的串口通信,开始我用的oncome事件,可发现很难用,数据总是有问题,后来改了直接读,方便多了,至于产生新消息的中断,用timer控件就可以了。还有点最重要的,所有指令都有回车符的!也就是vb的VbCr,否则会出错的~~还有,我的波特率是115200,底了也是不通的。
读出来了,剩下的就是字符串处理了,只要注意回来的字符中也有回车符,就可以了。
闲的无聊,又监听了通讯簿,图片上传的功能,都很简单。后来突发奇想,能不能收发彩信呢?难度:1电脑端彩信的制作;2手机商没这个接口指令!后来听说用windows mobile能实现,哎。。又是m$..
Doodu(杜霖)亲笔,转请通知~~