1

我正在开发一个消息服务器,它支持 PDU 格式(使用 android 手机)来发送消息。我已经使用在线编码器来转换我的文本,但我不知道将文本转换为 PDU 格式的真正步骤我不认为它只是一个十六进制数字。

我使用 at 命令从超级终端发送消息。

有人可以帮忙吗?

我使用了 AT 命令:

    at
    at+cmgf=0
    at+cmgs=25 (Length i guess)
    >"encoded message"
4

1 回答 1

1

AT+CMGS命令在3GPP 25.005 标准中定义,对于 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 作为两个字符 2A(IRA 50 和 65)呈现给 TE

(SC 是Service Center的缩写)

所有的乐趣都从这里开始了,因为您现在必须深入挖掘其他规范以发现实际格式......


例如,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 与例如中的<type>参数相同AT+CPBW。文本的编码本身就是一个完整的故事......


尝试破译 3GPP 规范的某些部分有时非常困难,而且误解的可能性几乎是无穷无尽的!如果您真的打算开发自己的代码来执行此操作,那么最好开始阅读良好的 PDU 模式介绍,例如 http://mobiletidings.com/2009/02/11/more-on-the-sms-pdu / 1或者在处理 PDU 模式2的现有库/程序中查找代码。

1 请注意,如果文本不包含对通常是低质量指标的 3GPP 标准的详细/技术术语的引用,那么高质量的文章相距甚远。

2 再次,努力寻找优质产品。

于 2015-10-22T22:27:42.863 回答