短信开发基础知识
2014-01-14 11:20
295 查看
1.1. 基本知识
短信开发指通过串口 at 命令驱动短信进行短信发送和接收操作。短信操作分为三种模式: block,pdu 和 Text
短信传送有三种编码: 7 位, 8 位, UniCode
at 命令 ,at 命令是驱动短信设备的标准工业命令,除了业界的标准之外,每个厂商可能会对其进行扩展,不过一般来说,标准命令应该够用,这次用的是西门子 tc35i ,有专门的 at 命令文档。
1.1.1. 相关文档
Gsm03.38 规范: Alphabets and language-specific information 着重介绍短信发送中对字符集的控制部分Gsm03.40 规范: Technical realization of the Short Message Service (SMS) Point-to-Point (PP) 详细介绍各种不同短信的不同实现
Gsm07.05 规范: Use of Data Terminal Equipment - Data Circuit terminating;Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS) ,介绍 at 的一些控制命令。
Gsm07.07 规范:着重介绍 at 的短信相关命令,可以说是 at 的 sms 规范。
1.1.2. Block 模式
Block 模式基本已经被 pdu 模式取代,没有具体研究1.1.3. Text 模式
Text 模式比较简单,但是支持的设备不是很全,而且对于中文似乎有些问题,在金笛的网站技术资料中似乎提到了一句不能实现中文。AT + CGMF=1<CR>
AT + CGMS= “ 13605696031 ” ,129<CR>
>Hello World!<^Z>
1.1.4. Pdu 模式
pdu 编码主要包括两个主要的部分,一是 pdu 串的整体数据格式,分别因为发送信息串和接收信息串而有区别,二是 pdu 中文本部分的编码,分别因为字符集而不同。我们也可以这样来理解这个 pdu 编码的格式, sms 相当于一个协议栈,最简单的协议栈:
根据 gsm03.40 规范, sms 协议包括以下几层:
1、 SM-AL :应用层。这个部分就是数据部分。
2、 SM-TL :传输层。我们可以清楚的看到这里描述了主要的短信内容,包括发送号码,接收号码,信息类型,编码,数据报长度等等,这也是我们编程主要要面对的问题。
3、 SM-RL :中继层。这个指的是短信在网关之间中继需要的协议。
4、 SM-LL: 链路层。
从上述描述中我们可以清楚的看到,我们编程主要集中于传输层。
PDU 串的用户信息 (TP-UD) 段最大容量是 140 字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是 160 、 140 和 70 。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
1.2. SMS 用户数据的编码方法
1.2.1. 英文 7 位编码
图片不能正确显示这是 gsm 的默认编码方式
由于这样的移位,我们可以看到我们能发的最多英文字符等于: 140*8/7 = 160 。
1.2.2. 数据 8 位编码
8-bit 编码通常用于发送数据消息,比如图片和铃声等;1.2.3. 中文 pdu 编码
发送中文时,必须用 UCS2 ( utf-16 )进行编码,最多可以发 140/2 = 70 个汉字。UniCode 编码转换也比较简单,以中文为例,一个中文字符是两个字节,直接对高位字节和低位字节进行十六进制转换就可以了。如“欢迎”, UniCode 编码是 6B22 8FCE ,这同时也就是转换的结果,如果发送的串中有英文字符,那么在前面补全 00 ,以保证一个字符对应两个字节。
1.2.4. Wap-push 中的中文编码
做 wap-push 短信的时候有些问题了,开始的时候也按照 Unicode 编码处理,总是失败,后来才发现,有个编码字段设为了 uft-8 ,所以在这种情况下,还是可以出现其他编码方式的。1.3. 短信报头分析
1.3.1. 短信类型
详细请参考 gsm 0438 规范和 gsm0440 规范,里面有详细的关于各种短消息类型的描述。在 sms 中到底支持多少种类型的短信,短信类型由什么进行控制,这是我们在这里需要着重介绍的问题。
在传输层来分,一共有六大短信类型: SMS-DELIVER , SMS-DELIVER-REPORT , SMS-SUBMIT
, SMS-SUBMIT-REPORT , SMS-STATUS-REPORT , SMS-COMMAND ,这六种短信类型,由短信中心地址后的第一个字节的最低两位控制。
bit1 | bit0 | Message type |
0 | 0 | SMS-DELIVER (in the direction SC to MS) |
0 | 0 | SMS-DELIVER REPORT (in the direction MS to SC) |
1 | 0 | SMS-STATUS-REPORT (in the direction SC to MS) |
1 | 0 | SMS-COMMAND (in the direction MS to SC) |
0 | 1 | SMS-SUBMIT (in the direction MS to SC) |
0 | 1 | SMS-SUBMIT-REPORT (in the direction SC to MS) |
1 | 1 | Reserved |
1.3.2. 地址编码
短信发送中都会涉及到短信地址的问题,他们的编码规则是一致的 , 简单来说就是 BCD8421码编码。如: 08 91 683108501505F 0 ,
08 :地址长度,(号码类型 + 号码长度) /2 的十六进制表示
91 :号码类型
683108501505F 0 :号码,实际号码应为: 8613805515500 ,号码处理方法为 , 如果为 +86 开始 , 将 + 号去掉 ,然后判断是否为偶数 , 不是在末尾补 F, 然后将奇数位和偶数位互换
1.3.3. TP-DCS( 数据编码格式 )
这个字节比较特殊,表明整个短信的字符编码,数据内容等信息。详细说明参考 gsm03.38 规范。1.3.4. 第一个字节
Pdu 编码的第一个字节比较有意思,这个字节会根据六种不同的短信按位有不同的意思,拿句专业一点的话来说,叫bitmask. 用图来大概描述一下,详细参考 gsm0340 的 9.2.3 段。位数 | MSG_Deliever | MSG_SUBMIT |
7 | TP_RP (回复地址) | TP_RP |
6 | TP_UDHI (数据报头) | TP_UDHI |
5 | TP_SRI (需要回复) | TP_SRR (请求回复) |
4 | TP_VPF( 时间格式 ) | |
3 | ||
2 | TP_MMS (多条短信标志, 1为无, 0 为有) | TP_RD( 拒绝重复标志 ) |
1 , 0 | TP_MTI (短信类型) | TP_MTI |
常见值 | 04 ,正常收到, 44 ,有报头短信 | 11 ,正常发送, 51 ,有报头短信 |
1.3.5. TP-PID (协议标识)
在这个里面还有一个字节比较特殊,就是协议标识。一般都是 00 ,表示点到点的标准短信。
1.3.6. 超长短信
参考 gsm0340 的 9.2.3 .24TP_UD 部分,这个部分中间的一种情况就是描述超长短信的处理。长短信关键涉及一个数据报头的问题,数据报头由“长度”和多个“数据元素”组成。
在GSM协议规范中,每个短信息的长度不应超过140个Octs,故每次发送最多70个Unicode单元;如果需要发送超长短信息,只需将要发送信息进行分割(70Unicode单元编码为140个8-bit组,加如上前缀14个,单条PDU最大长度为154 Octs),即可完成任意长度的消息发送。下面是个例子,表明的是短信的第一条和第二条。
第一条: 第二条
0891683108701505F0 SMSC 地址 0891683108701505F0 SMSC 地址
44有协议头标志 44有协议头标志
0D91683127563658F0回复地址 0D91683127563658F0回复地址
0008 TP-PID ,TP-DCS 0008 TP-PID ,TP-DCS
70803011142423时间戳 (TP-SCTS) 70803011142423时间戳 (TP-SCTS)
8C 用户信息长度 (TP-UDL) 26用户信息长度 (TP-UDL)
05协议头的长度 05协议头的长度
00标志这是个分拆短信 00标志这是个分拆短信
03分拆数据元素的长度 03分拆数据元素的长度
39唯一标志(用于把两条短信合并) 39唯一标志(用于把两条短信合并)
02一共两条 02一共两条
01这是第一条 02这是第二条
4E8C96F64E005B……数据内容1 81EA4ECE524D5C3……数据内容2
假设短信内容前6位是: 0500037E0201 05 03 02 00 7E 01 05 - 协议长度(后面占5位) 00 - 表示拆分短信 03 - 拆分数据的长度(后面的3位) 7E - 唯一标识(用于把多条短信合并) 02 - 共被拆分2条短信 01 - 序号,这是其中的第1条短信 那么,第2条短信的头6位数据就应该是: 0500037E0202
相关文章推荐
- SP 短信开发-基础知识篇
- SP 短信开发-基础知识篇
- SP 短信开发-基础知识篇
- SP 短信开发-基础知识篇
- SP 短信开发-基础知识篇
- SP 短信开发-基础知识篇
- SP 短信开发-基础知识篇
- SP 短信开发-基础知识篇
- 设计师应该了解的iOS应用开发基础知识
- unity基础开发--shader基础知识
- 二次开发基础知识
- Android开发平台搭建及基础知识
- 微信小程序开发系列——4.小程序视图页面基础知识
- Mars老师的Android学习基本路线Linux、数据库、网络协议、服务器端开发知识基础知识
- iOS开发基础知识--碎片6
- 嵌入式系统开发入门一:必备基础知识
- 1.Android开发入门基础知识
- Android 开发基础知识 Timer
- iOS开发基础知识--碎片15
- c语言学习之基础知识点介绍(九):预处理指令和多文件开发