今天研究了一个上午的sms pdu 格式,找到了在pdu串中设置短信回执的方法。就是在pdu-type这个8位位组一般都设置为11:包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit) 二进制表示形式:0 0 0 10 0 01 TP-MTI:01 TP-Message-Type-Indicator(消息类型指示符) Bit1,0:01 指示为SMS-SUBMIT类型 TP-RD:0 TP-Reject-Duplicates(是否拒绝相同重复消息) Bit2:0 指示短消息中心接受未转发的具有相同TP-MR的消息。 TP-VPF:10 TP-Validity-Period-Format(有效期格式) Bit4,3:10 指示使用相对格式。 TP-SRR:0 TP-Status-Report-Request Bit5:0 指示不使用状态报告。 TP-UDHI:0 TP-User-Data-Header-Indicator(用户数据头标示) Bit6:0 指示这是一个SMS消息,没有用户数据头。EMS消息需要设置。 TP-RP:0 TP-Reply-Path(回复路径) Bit7:0 指示没有设置回复路径。
只需要将bit5设置成1即可接收回执 即pdu-type为31 11点左右gsm modem到手马上接上电脑开始测试,结果令我哭啊!!!!!发了n条没有收到一个回执。只好再查资料,同时打开SMS with the SMS PDU-mode以及hesicong大大那里找来的开发文档开始啃,哈哈!皇天不负有心人啊!终于找到个和短信接收相关的at指令AT+CNMI=<mode>,<mt>,<bm>,<ds>,<brf> 参数: mode: 0——缓存在终端 1——直接发送到TE mt: 0——接收到新的SMS不返回事件 1——如果接收到的SMS存储在na ,则返回 +CMTI:<mem>,<index> 2——除了Class2 SMS,新的SMS直接发送到终端,返回: +CMT:<length><CR><LF><PDU> 3——Class3 SMS使用mt=2的方法返回,其他类型的使用mt=1的方法返回。 bm: 0——小区广播不通知 2——新的小区广播通知,返回 +CBM:<length><CR><LF><pdu> 3——Class3格式的小区广播通知,使用bm=2格式 ds: 0——状态报告不通知 1——新的状态报告通知,返回: +CDS:<length><CR><LF><pdu> 2——如果新的状态报告存储到ME,则返回: +CDSI:<mem>,<index> brf: 1——始终为1
再次打开超级终端输入 at+cnmi? +CNMI:0,1,0,0,0 果然是这里的问题了 按照前面mode定义 重新设置cnmi at+cnmi=1,1,0,1,1 OK 再发送一条短信返回OK后大概5s终端返回了 +CDS: 26 0006320D91683161721356F6506071415354005060714153640000 第一段000632意义不是很明白(哪位大大知道麻烦告诉一声◎◎) 0D接收方号码长度 683161721356F6接收方号码 50607141535400信息到达短信中心的时间(我猜的) 5060714153640000信息发送到接收方的时间(也是猜的) 后续要做的事就是在接到回执的时候把手机号码解析出来,就可以进行统计分析了 目前的问题就解决的差不多了,不过估计编码的时候还是会产生不少的问题,到时候 再说啦 |