我正在使用WML功能“providelocalinfo”将位置信息放入通过GSM手机上的WIB菜单发送的短消息中。
我正在使用SmartTrust的WIG WML v.4规范。相关部分是“9.4 providelocalinfo Element”
我使用示例中的代码,然后通过SMS传输变量,并使用Kannel从SMSC中检索消息。
以下是我正在使用的代码,但[myservicecentre]除外是我的实际服务中心:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE wml PUBLIC "-//SmartTrust//DTD WIG-WML 4.0//EN"
"http://www.smarttrust.com/DTD/WIG-WML4.0.dtd">
<wml wibletenc="UCS2">
<card id="s">
<p>
<providelocalinfo cmdqualifier="location" destvar="LOC"/>
<setvar name="X" value="loc=" class="binary"/>
<sendsm>
<destaddress value="367"/>
<userdata docudenc="hex-binary" dcs="245">
$(X)$(LOC)
</userdata>
<servicecentreaddress value="[myservicecentre]"/>
</sendsm>
</p>
</card>
</wml>
我在收到的消息中看到的是“loc =”后跟7个字节(八位字节)或二进制数据。我试图找到解释如何解码这些数据的文档,但没有发现任何解释清楚。
在解码的7个八位字节中, 前3个八位字节总是一样的, 接下来的两个八位字节往往在三个唯一值之间变化, 最后2个八位字节似乎是细胞。
所以我编码接收器以拉出最后两个八位字节并构造一个16位GSM cellid。大多数情况下,它匹配来自网络的已知cellid。但很多时候,这个值并不匹配。
所以我试图找到以下信息:
我在徒劳的搜索中检查过以下文件,但未找到相关数据: GSM 03.38,GSM 04.07,GSM 04.08,GSM 11.15,以及WIG WML Spec V.4。
对于我可能做错的任何见解都将不胜感激!
答案 0 :(得分:2)
要解码位置信息,您需要查看GSM 11.14第48页
1.19位置信息
Byte(s) Description Length
1 Location Information tag 1
2 Length (X) of bytes following 1
3-5 Mobile Country & Network Codes (MCC & MNC) 3
6-7 Location Area Code (LAC) 2
8-9 Cell Identity Value (Cell ID) 2
移动国家代码(MCC),移动网络代码(MNC),位置区域代码(LAC)和 小区ID按照TS GSM 04.08 [8]编码。
从个人经验来看,这里提到的第一个八位字节通常是不用的,所以前三个不变的字节是长度和国家。接下来的2个是网络运营商代码。
答案 1 :(得分:0)
在这个问题上没有太多的叮咬!我希望总结一下我的发现,以防其他人发现它们有用:
需要发送dcs设置不等于0的消息.dcs =“0”发送打包数据(尊重每个八位字节的低7位;当最大消息大小为0时,允许160个字符的SMS消息实际上是140个八位字节)
需要以二进制安全方式解析数据:当二进制数据本身可以是该值时,遇到0x0A时停止搜索的正则表达式将失败。
我发现无需更改Kannel的默认配置。
干杯
免责声明:安全传输16位GSM Cell-Ids需要处理一些我理解的设置,因为它们默认情况下未配置。我可能还有其他默认值,但我不知道它们可能会有所不同。