本简介探讨了在使用AT指令接收并处理长短信时,PDU编码数据包的解析方法与技巧,旨在帮助开发者深入理解并有效应用这一技术。
### AT指令长短信接收PDU格式分析
#### 一、引言
随着移动通信技术的发展,短信服务已经成为人们日常生活中不可或缺的一部分。为了适应更复杂的通信需求,如发送长短信等,AT指令集提供了相应的功能来处理这些场景。本段落将重点探讨AT指令在接收超长短信时的PDU(Protocol Data Unit)格式分析,这对于实现长短信的有效接收与合并至关重要。
#### 二、基础知识回顾
在深入了解AT指令接收超长短信的具体细节之前,我们首先简要回顾一些基础知识:
1. **AT指令**:AT(Attention)指令是一种用于控制调制解调器或类似设备的标准命令集,广泛应用于移动通信领域。
2. **PDU(Protocol Data Unit)**:PDU是指在网络的不同层次上进行数据交换时所携带的数据单元,包含了特定层协议的所有信息。
3. **长短信**:由于单条短信的长度限制(通常为160字符),当需要发送的信息超过这一限制时,就需要将其分割成多条短信发送,然后在接收端进行合并处理。
#### 三、PDU格式详解
##### 3.1 第一条短信示例
以示例中的第一条短信为例,我们可以看到其AT指令格式为:
```
AT+CMGL=4+CMGL:1,0,,160
08短息中心号码长度,除08外后面的字节数(即:91683108200705F0)
91SMSC的地址类型,91意味着国际格式的电话号码
683108200705F0服务中心的号码
64FirstOctet
0D原发手机地址长度(不包括91和补充的F)
91发送号码的地址类型,91为国际形
68310617***7F5发送号码
00PID协议标志
08DCS数据编码方法
01506090312423服务中心时间戳
8C用户数据长度
050003020201协议头
```
##### 3.2 第一条短信解析
- **短信中心号码**:`91683108200705F0`,其中`91`表示国际格式的电话号码,地址编码方法为先使用低位4比特,再使用高位4比特。如果号码个数为奇数,则最后一个字节的高位4比特设置为`F`。
- **FirstOctet**:`64`(01100100),该字段包含多个位标志,具体解析如下:
- `TP-RP`:应答路径,此处为`0`表示未设置应答路径。
- `TP-UDHI`:用户数据头标识,此处为`1`表示用户数据开始部分包含用户头信息。
- `TP-SRI`:请求状态报告,此处为`0`表示需要报告。
- `TP-VPF`:有效期格式,此处为`00`表示不提供有效期。
- `TP-MMS`:更多信息需要发送,此处为`0`表示SMSC中没有更多信息等待MS。
- `TP-MTI`:信息类型提示,此处为`00`表示读出(Deliver)。
- **原发手机地址长度**:`0D`,表示原发手机地址的长度。
- **发送号码**:`9168310617***7F5`,其中`91`表示国际格式的电话号码,地址编码方法与SCA相同。
- **PID协议标志**:`00`,表示普通GSM类型,点到点方式。
- **DCS数据编码方法**:`08`,表示UCS2编码,等级号0。
- **服务中心时间戳**:`01506090312423`,表示短消息到达时间。
- **用户数据长度**:`8C`。
- **协议头**:`050003020201`,其中:
- `05`表示剩余协议头的长度。
- `00`表示这是一个分拆短信。
- `03`表示剩下短信标识的长度。
- `02`表示这批短信的唯一标志。
- `02`表示这批短信的数量。
- `01`表示当前短信在这批短信中的位置。
##### 3.3 第二条及后续短信
第二条及后续短信的结构与第一条相似,主要区别在于协议头中的某些字段会有所不同,例如唯一标志(XX)、这批短信的数量(MM)以及这条短信