什么是PDU组包,用GSM通过发短信恢复使用时用的

扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
GSM长短信PDU编码分析
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口GSM PDU 中文短信相关资料 - 下载频道
- CSDN.NET
&&&&GSM PDU 中文短信相关资料
GSM PDU 中文短信相关资料
该文档一共有六个文件,包括:GSM0304, GMS0338, MC52i命令手册,MC55用户手册, sms pdu模式文档及格式参考手册。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行rainbird2 的BLOG
用户名:rainbird2
文章数:283
评论数:1130
访问量:1538252
注册日期:
阅读量:4535
阅读量:2685
阅读量:3489
51CTO推荐博文
25500人学习
8195人学习
&& && msn和飞信报警用了两三个月了,总结如下:想收到报警消息,139的邮箱是肯定能收到的,有邮件必发短信,但是中间肯定会消耗一些时间;飞信次之十次会有九次收到吧,当然了还是比较稳定的,也比139的短信早到;msn的话,感觉并不是每次都能收到,难道是不在线的时候发了信息上线以后就没有留言?但是有个缺点就是,这三个报警都是依赖别人的服务器,如果人家碰巧出问题了,咱也跟着吃亏?思来想去,觉得最靠谱的还是有自己的短信发送设备.&& && 正好手上有个gsm的modem.因为最近正迷php,所以不打算用其它的二次开发包之类的东西了.说干就干,晚上一回到家就开始找资料.这一查不要紧,你还别说,还真有用php干这事儿的.但是网上传来传去的都是那一篇&&通过串口+GSM MODEM发送短信示例&&.这个示例是windows平台下的,还用到了一个dll文件.我现在家里用的系统也换成ubuntu了,再说以后报警的服务器也是linux,总不能为了发个短信再专门换成windows系统吧.于是决定自己动手,用php的函数写linux下的程序,由此埋下了祸根.&& && 功夫不负有心人啊,很快在国外的一个网站找到了一个php操作串口的类:php_serial.class.于是开始动手用minicom调试modem.因为在以前单位的时候,帮别人用超级终端调试过modem,所以命令还记得一些,很快,用at指令通过minicom发送短信成功(还好俺有两个手机,要不做个实验都没法做).ok,改用php操作modem,用at指令发英文短信,成功!good.没想到这么顺利.取得了点小胜利的我不满足只发送英文短信,于是开始尝试发送中文短信.但是直接通过at指令输入中文,modem不买帐.收到的是空白短信.这可如何是好?于是开始细细研究网上那篇&&通过串口+GSM MODEM发送短信示例&&,于是知道了,想发送中文短信就得用pdu格式,于是又开始研究pdu格式怎么回事儿(你说这就是多干的话,能发英文就行了呗,还求那么完美干啥).一直到睡觉的点,也没从我的modem里发出中文来.不行,先睡觉.&& && 一觉醒来,又细细看了一遍pdu的格式,并一遍一遍的细细学习&&通过串口+GSM MODEM发送短信示例&&的生成方法.经过一遍一遍的尝试终于可以收到一些乱码的中文了,又经过尝试终于收到了和发送字数相同的小方块的短信了.没办法到上班的点了,于是赶紧到单位.间隙的时候,问以前单位负责开始短信群发软件的同事小杨怎么用pdu格式发送短信.小杨告诉了我,要用到的at指令,以及pdu格式的生成方法,虽然没有帮我解决问题但是至少肯定了:1,我的操作方法是对的,因为可以成功收到短信;2,收到字数相等的方块,应该是编码的时候没处理好.晚上回到家又一遍一遍的看之前那篇文章,很不理解,为啥用同样的函数生成的字符串,最后的差距咋就那么大呢?边尝试边找资料,不经意间在网上我发现一篇文章说发送短信"晚上好123"的编码是:"665A4E0A597D".我把这个串直接放到我程序里,一发送,嘿,你猜怎么着?还真收到了"晚上好123".有点意思!于是,我也用我的函数生成"晚上好123",结果我发现了一个规律!对的:665A4E0A597D我的:5A660A4E7D00&& && 每四个字符里两两错位!!!发现这个规律以后,就简单了,因为这样就确定确实是编码那块的原因了.但是编码那块:iconv,ord,substr,sprintf好几个系统函数,一个一个熟悉,改来改去都不行,这时候已经晚上十一点半了(我习惯是十点半睡,七八点起,标准的小学生作息时间).但是离终点这么近了,真不甘心放弃!初中时候养成的好习惯,今日事,今日毕,因为明天还有明天的事!洗把脸,重新整理一下思路:虽然大体看明白了pdu格式,但是字符串转换这块,我还真理解不透.怎么办呢?看来从根上解决这个问题,我功力是不够了.往前不行,咱可以迂回嘛.那我就自己写一个函数把这个字符串的顺序变回来!你还真别说,这招好使!而且再发其它的中文短信,也可以正常收到啦!!!呵呵,看来今晚注定好梦了.&& && 虽然凑合能用了,但是还不知道是什么原因啊.自己搞不定不要紧,公司里我周围坐着的可全是php高手.午休的时候,把会军叫过来,说明事情的来来回回,会军看了一遍代码以后,断定是字符的高低字节问题!因为linux系统和windows系统,对unicode处理的时候,正好是高低位相反的!说实话,当时真惊呆了,我咋就没考虑到是操作系统问题呢!知道了问题的原因以后,我和会军开始分别想从源头解决这个问题.但是半个小时过去了,发现要实现这个太难了,于是我提议放弃,就用我写的这个函数凑合着用.但是还是会军老道.虽然放弃了这步,但是最终还是通过修改转码那块的顺序搞定了这个问题!!!&& && 通过这次的编码训练又使我学习了很多东西,关于php,关于解决问题的思路.因为用了开源的php类,也参考了网上其它的同类文章,本着开源精神,现将全部代码整理如下:&?php/**&&&& author: rainbird &&*&&&&&&&& date:*&&&& system:ubuntu9.10*&&&&php cli:5.2.10*gsm modem:WAVECOM MODEM*/include "php_serial.class.php";//加载php操作串口的类$serial = new phpS//连接USB gas modem$serial-&deviceSet("/dev/ttyUSB0");$serial-&deviceOpen();//要发送的手机号:1531170xxxx$phone_sendto = InvertNumbers('xxxx');//要发送的短信:I am rainbird,i love 中国$message = hex2str('I am rainbird,i love 中国');$mess = "11000D91".$phone_sendto."000800".sprintf("%02X",strlen($message)/2).$$serial-&sendMessage("at+cmgf=0".chr(13));$serial-&sendMessage("at+cmgs=".sprintf("%d",strlen($mess)/2).chr(13));//不加短信中心号码$serial-&sendMessage('00'.$mess.chr(26));//加短信中心号码//$phone_center = InvertNumbers('0');//$mess_ll = "0891".$phone_center.$//$serial-&sendMessage($mess_ll.chr(26));//用完了就关掉,有始有终好习惯$serial-&deviceClose();//将utf8的短信转成ucs2格式function hex2str($str) {&&&&&&&&$hexstring=iconv("UTF-8", "UCS-2", $str);&&&&&&&&$str = '';&&&&&&&&for($i=0; $i&strlen($hexstring)/2; $i++){&&&&&&&&&&&&&&&&$str .= sprintf("%02X",ord(substr($hexstring,$i*2+1,1)));&&&&&&&&&&&&&&&&$str .= sprintf("%02X",ord(substr($hexstring,$i*2,1)));&&&&&&&&}&&&&&&&&return $}//手机号翻转,pdu格式要求function InvertNumbers($msisdn) {&&&&&&&&$len = strlen($msisdn);&&&&&&&&if ( 0 != fmod($len, 2) ) {&&&&&&&&&&&&&&&&$msisdn .= "F";&&&&&&&&&&&&&&&&$len = $len + 1;&&&&&&&&}&&&&&&&&for ($i=0; $i&$ $i+=2) {&&&&&&&&&&&&&&&&$t = $msisdn[$i];&&&&&&&&&&&&&&&&$msisdn[$i] = $msisdn[$i+1];&&&&&&&&&&&&&&&&$msisdn[$i+1] = $t;&&&&&&&&}&&&&&&&&return $}?&&& && php_serial.class.php文件见附件.at指令集及pdu的相关知识请自行google.其实如果只需要发送英文短信的话,只需要用php_serial.class连接modem并用at指令发短信就可以了.发送中文的时候才会用到pdu格式,当然用了pdu格式以后可以发混合的中英文.本文只作测试没有考虑短信最多只能发送74个汉字的情况,如需要请自行处理.&& && 后记:经过这次成功的用php操作gsm modem,使我对php更加沉迷.毫不夸张的说:是php为我插上了隐形的翅膀,感谢让我的想法可以飞翔!本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
11:48:16 17:21:56 18:32:16 09:34:19 10:01:19 10:06:15 10:02:07 11:44:47 13:09:33 09:07:13 09:08:21 09:49:36 15:54:06 15:57:27 16:20:06 17:36:02 11:43:48 11:58:03 12:18:10 20:12:02 &&1&
&&页数 ( 1/2 ) &
请输入验证码:2308人阅读
短信pdu解析
对于短信的接收和发送,在传送时都会变成统一标准的16进制码,这里以接收为例,从RIL接收的是一个pud怎么转换成大家都可以认识的字符串了?
& &&RIL中收到new SMS,调用android.telephony.SmsMessage.newFromCMT() decode PDU,结果放入SmsMessage中。android.telephony.SmsMessage.newFromCMT()
根据电话的类型,用com.android.internal.telephony.gsm.SmsMessage或com.android.internal.telephony.cdma.SmsMessage的newFromCMT()真正的实现PDU decode
2.1 解析pdu
对于RIL接收到到的pdu是一串16进制的数串,其含义会在下文中进行描述
02105F024 0D<span style="color:# F600 08
& &218003& &044F60597D
1)短信中心内容解析
08 代表的是后面8个字节都是短信中心的内容
91代表的类型,91是国际类型,81或者A1表示是国内,如果是91就需要在后面的号码上‘&#43;’
F0为短信中心号码,&#43;0
2)pdu第一个字节解析
24 带表的含义,其2进制表示
接收的时候这8位分别表示以下含义:
& & & & &7 & &&
& & & & 6 & & & & & &
&& & & & & & & & 5 & & & & & & & & &
& & 4 & &&
& & & &3 & & & & &&
& & & & &1 & & & &&
& & 0 & & &&
& & & & &MMS & & & &&
发送的时候分别表示一下含义
发送的PDU,典型为11H:
7 & & & & & &&
6 & & & & & & & & & &
5 & & & & & & & & & & & & & & & & & &
4 & & & & &&
3 & & & & & & & & &
2 & & & & & & & & & & &&
1 & & & & & & & & &&
0 & & & & & &&
MTI 2bit:消息类型,00表示收,01表示发
MMS 1bit:短消息服务中心是否有更多短消息等待移动台。1有,0无。默认为1。
SRI 1bit:状态报告标示。0不需要状态返回到移动设备。1需要。默认为0。
UDHI 1bit:用户数据头标示。0用户数据没有头信息,1有。一般为0。
RP& 1bit:是否有回复路径的标示。1有,0没有。一般为0。
VPF 2bit:有效期限&#26684;式。00 VP不存在;10 VP区存在用一个字节表示,是相对&#20540;;01保留;11存在,半个字节表示,绝对&#20540;。
RD& 1bit:重复信元丢弃。0通知服务中心碰到同源、同目的地、同样的MR(短消息序号)的短消息接受。1抛弃,此时将在短消息提交报告中返回一个适当的FCS&#20540;。
SRR 2bit:状态报告要求。
3)发送方地址
&0d 代表后面13,后面的字节数是&2&&#43;&(Length&&#43;&1)&/&2&=&8,后面8个字节是发送发的地址
&91 代表的是目的号码类型
&F6 :&#43;6,发送方的地址
<span style="font-size:12 color:#)TP-Protocol-Identifier(TP-PID)
01:TS 23.040 9.2.3.9
5)TP-Data-Coding-Scheme
表示数据编码方法和消息类别。一般为00H默认7位编码,等级号0。UCS2编码0等级为08H,可以传输中文。<span style="color:#<span style="color:#<span style="color:#<span style="color:#<span style="color:#
& & &2 & & &1 & & &&<span style="color:#&
& & & & & &&编码组保留xxx具体如下:bit7-6bit5bit4bit3-2bit1-0000:文本未压缩0:表示bit1,0是保留,没有消息类别;0&&&0
& 默认字母表7bit0&&&&0&&&& Class0&1:用GSM标准压缩1:表示有0&&&1
& &8bit数据0&&&&1&&&& Class1&&&1&&&0 & &UCS2编码1&&&&0&&&& Class2&&&1
&1 & & 保留1&&&&1&&&& Class3&&&&Bit1 Bit0&&消息类别00001000
Class0:短消息直接显示到用户终端Class1:短消息存储在SIM卡上Class2:短消息必须存储在SIM卡上,禁止直接传输到中断。Class3:短消息存贮在用户设备上。<span style="color:#)时间短信中心下发的时间戳,这个编码和长度固定218003
21: 年份,1280:月,0803:日,3081:小时,1860:分钟,0612:秒,2123:时区<span style="font-family:SimS font-size:12 color:#)UserDataHeader – UDH04 4F60597D04:UDL用户数据长度,包含用户数据和用户数据头的长度1、 如果用户用默认7位编码。1)&& 如果没有用户数据头,此数字标示7bit的字符个数。2)&& 如果有用户数据头,此数字表示包括用户数据头(包含补丁在内)在内的7bit个数。即7bit个数加上头部长度在加1(补丁)2、 如果用户用8位编码表示用户数据区的字节数,有数据头信息,包括在内。3、 如果为UCS2编码,则是用户数据区的字节数注意:由于前面pdu的第一个字节里面已经标示是否有头,如果有头紧接的一个字节为头的长度,然后剩余的是用户数据的长度8)UD4F60597D:就是用户数据
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:77916次
积分:1206
积分:1206
排名:第15909名
原创:42篇
评论:45条
(1)(3)(1)(1)(2)(6)(8)(6)(6)(4)(7)(1)(2)}

我要回帖

更多关于 gsm中的信道编码包括 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信