0000021002040602448d159e240600fc08100003200010010910461c58d8b266a918
00 message type, point to point
00 teleservice id
02 length
1002 value
04 address
06 length
02448d159e24 address value
06 reply option
01 length
fc value
08 bearer data
10 length <hex 16>
0003200010010910461c58d8b266a918 value
Namely , id + length + value
<PS:师父随手教我一个具体例子>
CDMA短信PDU包解析
SMS Submit Message(发送短信):
TPDU为:0000021002040702C4CC484898580601FC08220003200010010A104F88307C61F106C41004060807311647090801000901000A01C0
所有短信PDU都是以Transport Layer Messages的TPDU包来看
00
MST(消息类型):00表示点对点短信 01表示小区广播短信 02表示短信确认
00021002
Teleservice Identifier(电信业务ID):
此字段为固定长度字段包括四个字节
参数ID号1个字节:00参数长度1个字节:02表示后面的Teleservice Identifier占2个字节
Teleservice Identifier:1002(十进制为4098表示CDMA Cellular Messaging Teleservice)
040702C4CC48489858
Address Parameters(地址参数字段):
此字段为可变长度
参数ID号1个字节:04表示目的地址(接收方号码) 02表示发起方地址(发送方号码)
参数长度1个字节:07表示后面的数据占7个字节
号码编码模式1bit:0表示使用4bit的未知编码方案的DTMF编码 1表示使用8bit的指定编码方案的8bit编码
号码地址模式1bit:0表示使用ANSI TI.607定义的地址 1表示使用数据网络地址格式
号码类型0或者3个bit:如果号码编码模式为0,此字段忽略
号码编码方案0或者4个bit:如果号码编码模式为0或者号码地址模式为1,此字段忽略
号码个数8bit:指示号码字符个数
号码数字或者字符的编码:4bit或者8bit编码
填充字段0到7bit:保证地址参数字段为整数个字节,填充为0
将02C4CC48489858转化为2进制数据:0000 0010 1100 0100 1100 1100 0100 1000 0100 1000 1001 1000 0101 1000
再按字段组合:0 0 00001011 0001 0011 0011 0001 0010 0001 0010 0010 0110 0001 0110 00
从上面的字段组合可以看出:
号码编码模式取0表示使用4bit编码
号码地址模式取0表示使用ANSI TI.607定义的地址
由于号码编码模式取0没有号码类型和号码编码方案
号码个数为11个
号码为13312122616
填充字段为00
0601FC
Bearer Reply Option(承载应答选项字段):此字段为固定长度
参数ID号1个字节:固定为06
参数长度1个字节:固定为01表示后面的数据占1个字节
FC二进制:11111100
应答序列号6bit:取值范围为000000~111111
填充字段2bit:保证参数字段为整数个字节,填充为00
08220003200010010A104F88307C61F106C41004060807311647090801000901000A01C0
Bearer Data(承载数据字段):此字段为可变长度
参数ID号1个字节:固定为08
参数长度1个字节:22表示后面的数据占34个字节
参数数据字段长度为整数个字节:承载的数据为0003200010010A104F88307C61F106C41004060807311647090801000901000A01C0
自此Transport Layer Messages的PDU包头信息已说明完毕,传输层承载的数据0003200010010A104F88307C61F106C41004060807311647090801000901000A01C0即为Teleservice Layer的PDU包
下面对Teleservice Layer的PDU包0003200010010A104F88307C61F106C41004060807311647090801000901000A01C0进行说明:
0003200010
MSI(消息ID):此字段为固定长度字段包括四个字节
参数ID号1个字节:00
参数长度1个字节:03表示后面的数据占3个字节
消息类型字段4bit:0000保留 0001表示接收短信(NW到MS) 0010表示发送短信(MS到NW) 0011表示取消发送(MS到NW) 0100表示接收确认(NW到MS) 0101表示用户确认(双向) 其它取值保留
信息ID字段16bit:相当于W产品短信中的MR字段,取值为0000到FFFF
保留字段4bit:设置为0000
0003200010表示短信为发送短信,信息ID为1
010A104F88307C61F106C410
UserData(2011-9-19 20:158此字段为可变长度
参数ID号1个字节:固定为01
参数长度1个字节:0A表示后面的数据占10个字节
信息编码方式字段5bit:00010表示编码方式为7bit的ASCII编码 00100表示编码方式为16bit的Unicode编码即UCS2编码
消息类型字段0或者8bit:只有当信息编码方式取值为00001时才存在此字段
字符个数8bit:指示信息字符个数,此处的例子信息字段有9个ASCII码字符
字符信息字段:为字符在指定的编码方式下的编码值
填充字段0到7bit:保证整个字段为整数个字节,填充0bit
将104F88307C61F106C410转化为2进制数据:0001 0000 0100 1111 1000 1000 0011 0000 0111 1100 0110 0001 1111 0001 0000 0110 1100 0100 0001 0000
再按字段组合:00010 00001001 1111000 1000001 1000001 1111000 1100001 1111000 1000001 1011000 1000001 0000
从上面的额字段组合可看出:
信息编码方式为7bit的ASCII编码
信息字段有9个ASCII码字符
对照ACSII码编码表可知包含的用户数据为:xAAxaxAXA
后面加上四个0bit填充
0406080731164709
Validity Period(短信有效期字段):此字段为固定长度
参数ID号1个字节:04表示使用绝对格式 05表示使用相对格式(这里以绝对格式为例)
参数长度1个字节:绝对格式为06表示后面的数据占6个字节 相对格式为01表示后面的数据占1个字节
年1个字节:如果年数小于或者等于1999,该值取年数-1900;如果年数大于或者等于2000,该值取年数-2000。例子中为08表示为2008年
月1个字节:设置为1到12中的值。07表示7月
日1个字节:根据月份进行设置。31表示31日
小时1个字节:16表示16时
分钟1个字节:47表示47分
秒1个字节:09表示9秒
注意:所有的日期和时间字段都包含两个BCD码,例如年字段为93,则应表示为10010011即为16进制的93
080100
Priority Indicator(短信优先级字段):此字段为固定长度
参数ID号1个字节:固定为08
参数长度1个字节:固定为01表示后面的数据占1个字节
优先级字段2bit:00表示Normal 01表示Interactive 10表示Urgent 11表示Emergency
保留字段6bit:设置为000000
090100
Privacy Indicator(短信密级字段):此字段为固定长度
参数ID号1个字节:固定为09
参数长度1个字节:固定为01表示后面的数据占1个字节
优先级字段2bit:00表示Not restricted 01表示Restricted 10表示Confidential 11表示Secret
留字段6bit:设置为000000
0A01C0
Reply Option(应答选项):此字段为固定长度
参数ID号1个字节:固定为0A
参数长度1个字节:固定为01表示后面的数据占1个字节
用户确认请求字段1bit:1表示要求接收方用户手动确认 0表示不要求接收方用户手动确认 (这里的接收确认是点对点短信的一种,相当于W产品中的RP-Ack)
接收确认请求字段1bit:1表示要求网络发送接收确认 0表示不要求网络发送接收确认 (这里的接收确认是点对点短信的一种,相当于W产品中的短信状态报告)
读短信确认请求字段1bit:1表示要求接收方用户发送短信已读确认 0表示不要求用户发送短信已读确认 (这里的接收确认是点对点短信的一种,CDMA协议有相关的规定,W协议中未规定此项功能)
保留字段5bit:设置为00000
最后使用AT命令AT^HCMGS=<length>发送PDU短信,这里的<length>为整个TPDU包所占的字节数
SMS Deliver Message(接收短信):
TPDU为:0000021002020702C4CC4848985806012408220003100010010A104F88307C61F106C41003061104161701270801000901000A01C0
00
MST(消息类型):与发送短信一样
00021002
Teleservice Identifier(电信业务ID):与发送短信一样
020702C4CC48489858
Address Parameters(地址参数字段):参考发送短信TPDU的说明,只是参数ID号为02表示为发送方的地址
060124
Bearer Reply Option(承载应答选项字段): 各字段的意义与发送短信一样,只是这里的ID设置为36,只在传输层其到消息参考的作用,与后面的Reply Option字段没有必然的联系
08220003100010010A104F88307C61F106C41003061104161701270801000901000A01C0
Bearer Data(承载数据字段):与发送短信一样
0003100010
MSI(消息ID):参考发送短信TPDU的说明,只是参数消息类型字段为0001表示接收短信(NW到MS)
010A104F88307C61F106C410
UserData(用户数据字段):与发送短信一样
0306110416170127
Message Center Time Stamp(短信中心时间戳):此字段为固定长度
参数ID号1个字节:固定为03
参数长度1个字节:固定为06表示后面的数据占6个字节
年1个字节:当对年数进行计算时,如果年数在96-99之间包括96和99,则实际年数加上1900;如果年数在00-95之间包括00和95,则实际年数加上2000;即可表示的年数范围为1996-2095。这里的取值为11表示为2011年
月1个字节:设置为1到12中的值。04表示4月
日1个字节:根据月份进行设置。16表示16日
小时1个字节:17表示17时
分钟1个字节:01表示1分
秒1个字节:27表示27秒
注意:所有的日期和时间字段都包含两个BCD码,例如年数为1996,则年数字段为96,则应表示为10010110即为16进制的96
080100
Priority Indicator(短信优先级字段):与发送短信一样
090100
Privacy Indicator(短信密级字段):与发送短信一样
0A01C0
Reply Option(应答选项):与发送短信一样
注意:接收短信的TPDU包可能不会包含上面所有的字段,这取决于发送短信和网络,按照实际接收的TPDU包进行解析即可
SMS Delivery Acknowledgment(短信状态报告):
TPDU为:
00
MST(消息类型):与发送和接收短信一样
00021002
Teleservice Identifier(电信业务ID):与发送和接收短信一样
020702C4CC48489858
Address Parameters(地址参数字段):与接收短信一样为发送方的地址
060116
Bearer Reply Option(承载应答选项字段):各字段的意义与发送和接收短信一样,只是这里的ID设置为22
Bearer Data(承载数据字段):与发送和接收短信一样
0003400010
MSI(消息ID):参考发送短信TPDU的说明,只是参数消息类型字段为0100表示接收确认(NW到MS)
UserData(用户数据字段):与发送短信一样,在小网下如果短信发送成功UserData为The message you sent to 8618988168301 has been delivered successfully
也可以在文本短信模式下发送短信观察网络返回的UserData的信息
Message Center Time Stamp(短信中心时间戳):与接收短信一样