![]() |
![]() |
#1 (permalink) |
初级会员
注册日期: 2010-07-14
帖子: 5
![]() |
![]()
查询金笛短信猫的手册,其中发送短消息的AT指令为(其中<Ctrl/Z>的Ascii码是[1A]):
AT+CMGS=”13988888888”<CR>Send Message by Text-Mode<Ctrl/Z> 首先尝试并排除了7bit、8bit、UCS2等编码的原因后,突然想到回车符<CR>有Windows、Unix两种形式。Windows中回车符<CR>可以是 [0D]、[0D0A]、[0A]三种方式,Unix中回车符<CR>只能是[0D]。为了确认原因,分别发送了几条短消息到GPS设备,结果如下表所示: 结果 1 AT+CMGS=15051444381[0D0A] *HQ,8002020147,R8,170621,15962179447#[1A] 不识别 2 AT+CMGS=15051444381[0D] *HQ,8002020147,R8,170621,15962179447# [1A] 识别 3 AT+CMGS=15051444381[0D] *ErrorCommand# [1A] 不识别 4 AT+CMGS=15051444381[0D] *HQ,8002020147,R8,170621,15962179447#X[0D0A] [1A] 识别 从上表中可以看出,只要中间的回车是[0D] ,命令就能识别,如果是[0D0A] ,则不能识别,由此可以推测出,GPS设备上短信解析采用Unix形式,取出回车符[0D]后,判定第一个字符是不是[*],然后查找结尾符[#],再解析开始符与结尾符之间的命令。如果成功就接受命令,否则不接受命令。 以此推测,第一行不接受的原因是,回车符[0D] ,后面的第一个字符不是[*],而是[0A] 。 第二行是GPS设备标准的格式。 第三行是因为[*]与[#]之间的命令不合法,所以不接受。 第四行则说明,命令结束符[#]之后的内容是忽略的,有没有都不影响命令的接受与否。 同理,根据直接发短消息不能识别,通过手机转发后能识别的最可能原因是:原来直接发送时,回车符是以[0D0A] 的形式发送的,手机能识别出这种形式,并不会把[0A]存成命令内容的第一个字符。并以[0D] 的形式发送到GPS设备。 解决这个问题: 1、 短信猫发送命令短消息的时候,回车符<CR>须以Unix形式[0D]编码,这样GPS车载设备就能直接识别。 请问,怎么样修改源代码,让回车符<CR>须以Unix形式[0D]编码?????? |
![]() |
![]() |