我正在开发一个消息服务器,它支持 PDU 格式(使用 android 手机)来发送消息。我已经使用在线编码器来转换我的文本,但我不知道将文本转换为 PDU 格式的真正步骤我不认为它只是一个十六进制数字。
我使用 at 命令从超级终端发送消息。
有人可以帮忙吗?
我使用了 AT 命令:
at
at+cmgf=0
at+cmgs=25 (Length i guess)
>"encoded message"
我正在开发一个消息服务器,它支持 PDU 格式(使用 android 手机)来发送消息。我已经使用在线编码器来转换我的文本,但我不知道将文本转换为 PDU 格式的真正步骤我不认为它只是一个十六进制数字。
我使用 at 命令从超级终端发送消息。
有人可以帮忙吗?
我使用了 AT 命令:
at
at+cmgf=0
at+cmgs=25 (Length i guess)
>"encoded message"
该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 再次,努力寻找优质产品。