linux下用短信猫发送彩信
日前正在研究使用短信猫发送彩信的项目。使用的短信猫是金迪的wavecom短信猫,gprs模块型号为
641b09gg.Q2403A 1320676 061804
在linux的minicom下打AT命令 AT+CGMR可以查到以上模块型号
这个型号是支持彩信的,已经询问过厂商。
接下来就需要搞清楚如何发送彩信了。
看过很多彩信文档,头都晕了,最后总结出来几点。首先需要将你要发送的彩信打包,包括图片声音什么的
生成一个 .smil的xml文档,例如
<?xml version="1.0" encoding="UTF-8"?>
<smil>
<head>
<layout>
<root-layout width="128" height="128" />
<region id="Image" width="128" height="128" left="0" />
<region id="Text" width="128" height="128" left="0" top="0" fit="scroll" />
</layout>
</head>
<body>
<par dur="10000ms">
<text src="1.txt" region="Text" />
<audio src="2.mid" />
</par>
<par dur="10000ms">
<text src="2.jpg" region="Image" />
</par>
</body>
</smil>
具体的打包规则,现在还没有研究明白。
打完包后就需要连接彩信网关进行传输了,这时需要用gprs模块实现无线上网的功能。需要用到以下的AT命令:
(1) AT+CGCLASS=”B” 置为“B”模式
(2) AT+CGDCONT=1,”IP”,”CMWAP” 设置APN
(3) AT+CSQ 检查信号 若返回10—31,0之间的信号数字则继续,如果信号是99,99,则应该考虑不停的键入A/命令,不停的让模 块去搜寻网络。
(4) AT+CGACT=1,1 激活,返回OK则继续
AT+CGPADDR=1 查看分配地址
(5) AT+CGREG? 若返回为0,1则可以,若返回0,0则不行返回(1)重来。或者,不停键入A/,多次执行AT+CGREG?命令。(这里我的返回是0,5 不知为什么)
(6) AT+IPR=115200;&W 更改模块速率并保存。(根据短信猫自身的频率来设置我的设置的是9600)
(7) ATD *99***1# (之后会重复返回一串乱码,用端口数据查看工具转换成16进制后如下)
7E FF 7D 23 C0 21 7D 21 7D 21 7D 20 7D 36 7D 21 7D 24 7D 25 DC 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 7D 23 7D 24 C0 23 26 B4 7E
我不知道为什么和网上一个文档查出来的编码说明不太一样。
7E (ppp头) FF 03 C0 21(LCP) 01(代码) 03(标识符) 00 1D(长度,16进制) 01(类型) 04(长 度) 07 D0(协商内容,Maximum-Receive-Unit) 02(类型) 06(长度) 00 0A 00 00 (协商内容,我也想知 道协商什么,但是RFC1661上面没说)07(类型,协议压缩协商) 02(长度) 08(类型,地址,控制域压缩协商) 02(长度) 05(类 型) 06(长度) BB 6A E4 93(内容,Magic-Number) 03(类型) 05(长度) C2 23(CHAP,挑战握手验证协 议) 05(MD5算法) 34 89 (FCS,校验和)7E(PPP包尾)
之后就无法录入东西了。这个应该是ppp协议的握手请求,如果不进行回应就会过短时间出现
NO CARRIER
中断。
目前不知道如何构造回应的ppp信息编码段。想自己编写。有了解的给指点一下,不胜感激。
或者有其它方法给指点下。谢谢了。
[解决办法]
这个你要看PPP文档了。如果你要用外置TCPIP协议栈的方式,那就要准备移植一个TCPIP协议栈并且有PPP协议的才行。
如果不想移,就尝试一下内置协议栈的AT吧。模块自动帮你做PPP协商。
[解决办法]
也在研究中,帮顶.....
[解决办法]
我的方法是在使用linux 的拨号方法
# pppd call gprs
连上后使用编程方法和 10.0.0.172 建立socket连接,将已经打包好的mms传送出去。可是总是报错。
[解决办法]
不知道楼主的这个后来问题解决了吗?
ATD之后是不是要实现PPP等一些通讯协议呢?感觉很复杂啊
[解决办法]