AT+CMGS 命令在3GPP 25.005 standard 中定义,对于 PDU 模式,其语法为
+CMGS=<length><CR>
PDU is given<ctrl-Z/ESC>
并在描述中进一步说明
PDU 应为十六进制格式(类似于为<pdu> 指定的格式)
并在一行中给出; ME/TA 将此编码转换为实际的
PDU的八位字节。
<pdu> 格式在消息数据参数中的第 3.1 章参数定义中定义:
在 SMS 的情况下:3GPP TS 24.011 [6] SC 地址后跟
3GPP TS 23.040 [3] 十六进制格式的 TPDU:ME/TA 转换每个
TP 数据单元的八位字节转换成两个 IRA 字符长的十六进制数
(例如,整数值为 42 的八位字节作为两个字符呈现给 TE
2A(爱尔兰共和军 50 和 65))
(SC 是 Service Centre 的缩写)
所有的乐趣都从这里开始,因为您现在必须真正、非常、非常深入地挖掘其他规范以发现实际格式...
例如,24.011 描述了在移动设备和网络之间发送的消息的低级数据格式,其中只有部分内容与此上下文相关。
7.3.1.2 RP‑DATA(移动站到网络) 该消息在 MS ‑> MSC 方向上发送。该消息用于中继 TPDU。这
信息元素符合 3GPP TS 23.040。
在给定的表格中,最后两行是相关部分,服务中心地址和 TPDU。
Information element, Reference, Presence, Format, Length
RP‑Message Type, Subclause 8.2.2, M, V, 3 bits
RP‑Message Reference, Subclause 8.2.3, M, V, 1 octet
RP‑Originator Address, Subclause 8.2.5.1, M, LV, 1 octet
RP‑Destination Address, Subclause 8.2.5.2, M, LV, 1‑12 octets
RP‑User Data, Subclause 8.2.5.3, M, LV, <= 233 octets
为了进一步挖掘,我一直在试图找出 RP-Destination Address 编号 IEI 的值,而且我已经花了很长时间写这个答案。抱歉停在这里。实际的电话号码编码是“正常”的被叫方 BCD 号码编码(24.008 中的 10.5.4.7),并且 TON+NPI 与 AT+CPBW 中的 <type> 参数相同。文本的编码本身就是一个完整的故事......
尝试破译 3GPP 规范的某些部分有时非常困难,而且误解的可能性几乎是无穷无尽的!如果您真的打算开发自己的代码来执行此操作,则最好开始阅读良好的 PDU 模式介绍,例如
http://mobiletidings.com/2009/02/11/more-on-the-sms-pdu/1。
或者在现有的处理 PDU 模式的库/程序中查找代码2。
1
请注意,如果文本不包含对 3GPP 标准中的详细/技术术语的引用(通常是低质量指标),那么高质量的文章相距甚远。
2
再次,努力寻找优质。