CDMA PDU 解码

news/2024/11/8 23:50:38/

收到两条短信,现在用AT把它们读取出来。

at+cmgr=5
+CMGR:5,”REC UNREAD”,”15338896020″,”UNKNOWN NUMBER”,”N/A”,176

“0000021002020702c54ce225a8a80601c0089d00031001e801
8e2230018801780193108b09fb087b317b012b6a080162e38c8e6
3b422e07b65980162b942e872e4b3b4246f7a70500162e54bbf9a7
053f67c7e3801729f544c0b108bb423918a75d00163317a70033b0
ae07ce3e00162b943108bb4236b54158a71680162ff5a7283b423
71c33b2b71c29dd80173108b09fb087b317c1a933cb80162b943659
b6a0bb4227122e5c00306081229192611″

at+cmgr=21
+CMGR:21,”REC UNREAD”,”15338896020″,”UNKNOWN NUMBER”,”N/A”,96

“0000021002020702c54ce225a8a806014c084d00031001f8013
e20f00190017801900162dfca7004b1acb1abb4239614c67001629
63b2b12b9827ae310c001729f544c0b108bb423918a75d00163317
a70029f52e07cf0f80306081229192616″

[deli@deli example]$ ./test_pdu_decode
0000021002020702c54ce225a8a80601c0089d00031001e8018e22
30018801780193108b09fb087b317b012b6a080162e38c8e63b422
e07b65980162b942e872e4b3b4246f7a70500162e54bbf9a7053f67
c7e3801729f544c0b108bb423918a75d00163317a70033b0ae07ce3
e00162b943108bb4236b54158a71680162ff5a7283b42371c33b2b7
1c29dd80173108b09fb087b317c1a933cb80162b943659b6a0bb422
7122e5c00306081229192611
sms context == 1/2我愿意是急流,山里的小河,在崎岖的路上,岩石上经过.只要我的爱人,是一条小鱼,在我的浪花中,快乐的游来游去.我愿意是荒林,在河流的两岸
SM_ENCODING == 4
TPA == 15338896020
SCTS == 19:26:11 12/29/08

[deli@deli example]$ ./test_pdu_decode
0000021002020702c54ce225a8a806014c084d00031001f8013e20f
00190017801900162dfca7004b1acb1abb4239614c6700162963b2
b12b9827ae310c001729f544c0b108bb423918a75d00163317a700
29f52e07cf0f80306081229192616
sms context == 2/2,对一阵阵的狂风,勇敢地作战.只要我的爱人,是一只小鸟
SM_ENCODING == 4
TPA == 15338896020
SCTS == 19:26:16 12/29/08


PDU串解析

CDMA的pdu格式与GSM的相差很多,不能直接用肉眼看出来。第一条内容比较长,就拿第二条pdu串来分析吧。
1.首先将PDU串打成PDU包
将PDU串相邻的两个ascii字符拼凑成一个8bit数据

如下:
00 00 02 10 02 02 07 02 c5 4c e2 25 a8 a8 06 01 4c 08 4d 00 03 10 01 f8 01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8 03 06 08 12 29 19 26 16

消息传送类型: 0×00 point to point message(表示点对点消息)

下面的内容为短消息的各个字段 每个字段分为三个部分: 字段类型(ID)(8bit)、字段长度(Length)(8bit)和字段内容.

第一个字段: 00 02 10 02
0×00, 表示uTeleserviceID字段
0×02, 字段长度,该长度必须为2,否则为错误的pdu信息

字段内容为:0×1002,十进制是4098,

第二个字段: 02 07 02 c5 4c e2 25 a8 a8
0×02, SMS_TL_ORIG_ADDR 表示 (短信发送地址)
0×07, 字段长度为7
字段内容: 02 c5 4c e2 25 a8 a8
只看前面几个 02 c5 4c e2的:
0000 0010 1100 0101 0100 1100 1110 0010 0010
取第一个bit 0 表示 RIL_CDMA_SMS_DIGIT_MODE_4_BIT 是4bit压缩
第二个bit 0 表示 RIL_CDMA_SMS_NUMBER_MODE_NOT_DATA_NETWORK
下来8个bit 是 00 0010 11 = 11,表示号码长度 为11
由于是4bit压缩 ,后面44个bit(4*11)表示号码,解析出来是15338896020

第三个字段: 06 01 4c
表示SMS_TL_BEARER_RPLY_OPT

第四个字段:08 4d 00 03 10 01 f8 01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8 03 06 08 12 29 19 26 16

0×08, 表示SMS_TL_BEARER_DATA字段(短信内容)
0x4d,字段长度为77

这个字段也分成各个子字段:

第一子字段: 00 03 10 01 f8
0×00 Mesage Id
0×03 内容长度
10 01 f8  === 0001 0000 0000 0001 1111 1000
0001 表示 DELIVER 短信
0000 0000 0001 1111表示 message id.
紧接后面的 1, 表示HEADER_IND

第二个子字段:01 3e 20 f0 01 90 01 78 01 90 01 62 df ca 70 04 b1 ac b1 ab b4 23 96 14 c6 70 01 62 96 3b 2b 12 b9 82 7a e3 10 c0 01 72 9f 54 4c 0b 10 8b b4 23 91 8a 75 d0 01 63 31 7a 70 02 9f 52 e0 7c f0 f8
0×01, 字段类型
0x3e(62),字段长度
20 f0 01 === 0010 0000 1111 0000 0000 0001
0×20 的前5个bit为00100, 为0×04, 表示短信编码方式为RIL_CDMA_SMS_ENCODING_UNICODE (UNICODE)
0×20 的后3个bit, 0xf0的前5个bit,为 000 1111 0, 即0x1e (30),表示有30个UNICODE 字符。0xf0的后3个bit,0×01的8个bit,再加上0×90的前5个bit,

0000 0000 0011 0010 拼成一个16位数是 0×0032 表示字符 :2,在vim下了解一个字符的16进制码很简单,光标在该字符,按ga,底端显示结果如下:

 


<2>  50,  Hex 32,  Octal 062                                  2,1           All

依次下去,内容就是上面运行./test_pdu_decode 的结果: 2/2,对一阵阵的狂风,勇敢地作战.只要我的爱人,是一只小鸟

第三个子字段: 03 06 08 12 29 19 26 16

这是一个时间戳字段: 08年12月29号19时26分16秒(短消息发送时间)

字符串分析结束。当然,还有很多可选项在这条短信没有加上,更完整的SMS格式,请参考CDMA SMS standard on 3GPP2 website.

 

实际编码时,一个while循环遍历,再加上switch简单的状态机即可。


长短信何在?

用的这个模组,不支持长短信,厂家回答“作了预处理,把User Data Header去掉了,因为客户一般不愿意自行处理这个User Data Header,他们只要内容、号码等其它信息。所以,模块送出的PDU中不含有User Data Header。”

为实现长短信的拆分和组合功能,终端应支持 IS637C 协议中关于长短消息处理的参数 HEADER_IND,以及在短消息数据中增加对 User Data Subparameter 参数增加用户数据消息头(User Data Header)和短信拆分、组合的处理。HEADER_IND 为消息头标识位,用于指示 User Data Header 是否包含消息头, 若包含消息头则 HEADER_IND 设置为’1’,否则设置为’0’。具体的拆分与组合,请参考IS637C,或 《中国电信CDMA终端需求规范-SMS分册-V1.0》。需要说明的是,对长短信的处理,有的CDMA模组厂家为了让用户省事,帮你处理了用户数据头,正如前面所看到的,自动加上(1/2), (2/2)等,若想自己手动解析,务必跟模组厂家沟通确认好。


http://www.ppmy.cn/news/527671.html

相关文章

【通信】非正交多址接入(NOMA)和正交频分多址接入(OFDMA)的性能对比附matlab代码

1 内容介绍 随着移动通信的快速发展,数据流量急剧增长,频谱资源开始日益缺乏,能源消耗也在不断加大,而第五代移动通信(5G)中的非正交多址接入(NOMA)技术正是解决这些问题的关键.在NOMA技术中,通过功率域实现多用户复用并共享相同的频谱资源,在接收端采用串行干扰删除(SIC)技术…

什么是1G, 2G, 3G, GSM, EDGE, CDMA, WCDMA, TD-SCDMA, CDMA2000

现如今&#xff0c;我国已经完全进入3G时代&#xff0c;但是什么是3G呢&#xff1f;3G代表什么&#xff1f;进入3G对我们大众有什么好处&#xff1f;3G之前我们用的是什么网络&#xff1f;2G, 3G, GSM, EDGE, CDMA, GPRS, CDMA2000, WCDMA, TDMA, TD-SCDMA 这一大堆名词是不是把…

CDMA编码实现

朋友写的。Python实现的。用的是PyCharm编译。 代码如下 def split_list_average(send, n): # 用于分割指定长度字符串 for i in range(0, len(send), n): yield send[i:i n] def check_chip(chipS, chipT, chipU, chipV): # 判断码片之间是否相互正交 def check(chipA, chi…

CDMA移动终端卡——UIM(转)

UIM&#xff08;User Identity Module&#xff09;代表了移动终端卡未来发展方向&#xff0c;它比传统的 鉴权手段如MIN&#xff0f;IMSI、MIN&#xff0f;ESN适配方式更具优势。UIM ID方式除了适用于CDMA 系统外&#xff0c;还可用于GSM系统和其他的TDMA方式以及第三代移动通信…

进行码分多址CDMA通信

共有四个站进行码分多址CDMA通信。四个站的码片序列为:A: (-1 -1 -1 +1 +1 -1 +1 +1). B: (-1 -1 +1 -1 +1 +1 +1 -1).C: (-1 +1 -1 +1 +1 +1 -1 -1). D: (-1 +1 -1 -1 -1 -1 +1 -1).现收到的码片序列为(-1 +1 -1 -1 -1 -1 -1 +1 -1).问哪个站发送数据了?发送数据的站…

码分复用CDM(Code Division Multiplexing);码分多址CDMA(Code Division Multiple Access)

目录 码分多址码片序列实现了扩频CDMA 的重要特点CDMA 工作原理例题 码分多址 当码分复用信道为多个不同地址的用户所共享时&#xff0c;就称为码分多址。 每一个用户可以在同样的时间使用同样的频带进行通信&#xff0c;码分复用集合了频分复用和时分复用的优点。且抗干扰能力…

码分复用CDMA的原理

码分复用CDMA的原理 感性理解&#xff1a; ​ 可以感性的理解为&#xff1a;我只接受我所期望的信号类型&#xff0c;并且能够通过一定的方式将多个信号源分离出来。 工作原理&#xff1a; ​ 每一个比特时间再被细分为m个更短的时间间隔。每个时间间隔被称为码片&#xff…

xDSL:数字用户线路技术(DSL、IDSL、ADSL、HDSL、SDSL、VDSL、G.Lite)--网络大典

数字用户线路&#xff08;xDSL&#xff09;是在家庭和企业的普通铜质电话线路&#xff08;POTS&#xff09;上提供宽带数据访问的一种调制解调器技术。xDSL 是所有 DSL 类型的统称&#xff0c;诸如 ADSL、G.Lite、HDSL、SDSL、IDSL 和 VDSL 等。 xDSL 有时称为“最后一英里”技…