应用,一定要应用

BlogJava 首页 新随笔 联系 聚合 管理
  25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks
自己写的一个小的发短信的程序一文中,我提到了一个我遇到的问题:
用手机(作为gsm模块)的话会因为手机截获了接收信息而不能达到聊天的效果,大家如果有什么好的方法可以在这里告诉我,或者给我email,邮箱地址是flyffa@gmail.com
这两天我有空来继续深入做的时候发现我自己犯了一个错误。用手机不能达到聊天效果的原因,不是因为手机截获了消息,而是因为消息的存储位置的变化,也就是说在简单的gsm模块中(如tc35i)消息是存储在sim卡中的,而在手机中,却是存在于ME中的,这个是由AT+CNMI决定的。
AT+CNMI指令语法为 :
AT+CNMI=[<mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]]
其中mode指的是新短信到来时的通知方式。
而mt就指的是新短信到来时的存储方式。
  • 0 – 储存到默认的内存位置(包括class 3)
  • 1 – 储存到默认的内存位置,并且向TE发出通知(包括class 3)
  • 2 – 对于class 2,储存到SIM卡,并且向TE发出通知;对于其它class,直接将消息转发到 TE
  • 3 – 对于class 3,直接将消息转发到 TE;对于其它class,同mt=1
  • 这个默认存储位置就是由手机决定的了,在gsm0705规范的3。4。1节中,我们可以查到一段关于mt的描述,在具体的mt值的描述在gsm0338中,但这里有一句话需要注意:but use <mem3> as preferred memory,也就是说,gsm更加建议采用<mem3>做为默认的手机存储实现。

    现在的问题就是<mem3>是什么,在gsm0705的3.1节中,我们可以找到mem3的定义:
    <mem3> string type; memory to which received SMS are preferred to be stored (unless forwarded directly to TE; refer command New Message Indications +CNMI); refer <mem1> for defined values; received CBMs are
    always stored in "BM" (or some manufacturer specific storage) unless directly forwarded to TE; received status reports are always stored in "SR" (or some manufacturer specific storage) unless directlyforwarded to TE
    中间有一段话说值请参考mem1的值,查了一下mem1的值,有以下这些:
    "BM" broadcast message storage
    "ME" ME message storage
    "MT" any of the storages associated with ME
    "SM" SIM message storage
    "TA" TA message storage
    "SR" status report storage

    我再查了一下gsm0705的4.1节,关于pdu模式下的cmgl命令的执行,果然提到了存储的部分,Execution command returns messages with status value <stat> from preferred message storage <mem1> to the TE.
    这就开始有点明白了,gsm模块的<mem3>和<mem1>应该是一致的,所以,我们没有发现问题,但是手机下这两是不一致的,所以我读不到任何短信,我想应该是这样了,问题是如何读到呢。
    AT+CPMS提供了方法:
    命令:+CPMS=<mem1>[,<mem2>[,<mem3>]]
    返回:+CPMS: <used1>,<total1>,<used2>,<total2>,<used3>,<total3>

    命令:+CPMS?
    返回:+CPMS: <mem1>,<used1>,<total1>,<mem2>,<used2>,<total2>,<mem3>,<used3>,<total3>

    命令:+CPMS=?
    返回:+CPMS: (list of supported <mem1>s),(list of supported <mem2>s),(list of supported <mem3>s)

    我用Erricsion的t39做了个测试,超级终端下做的:
    at+cpms=?
    +CPMS: ("ME","SM"),("ME","SM"),("ME")

    OK
    at+cpms?
    +CPMS: "SM",0,25,"SM",0,25,"ME",0,40

    OK
    可以看到这里的<mem1>是SM,而<mem3>是ME,这就是问题所在了,由于这部手机的<mem3>不支持SM,所以把<mem1>设为ME,我的程序就可以运行了。
    以上是我解决这个问题的方法,不知道还有没有更好更方便的方法,如果有,希望能回复在blog下,我不甚感激。也欢迎同道中人关注和讨论。

    用tc35i做了个测试:
    at+cpms?
    +CPMS: "ME",0,25,"ME",0,25,"SM",0,25

    OK
    at+cpms=?
    +CPMS: ("MT","SM","ME"),("MT","SM","ME"),("MT","SM")

    OK
    这就让我有点郁闷了,这里的<mem3>和<mem1>不同,可并没有象我想象的那样,接收的短信被放到SIM卡中,而是被放到了ME中,是不是tc35i没有按照规范执行呢,请教各位。


    posted on 2006-06-07 12:02 flyffa 阅读(1802) 评论(4)  编辑  收藏 所属分类: 短信/彩信/sms/mms

    Feedback

    # re: 【SMS】怎样获得手机的新到短信 2006-09-08 23:25 bpesun@163.com
    tc35i设置成sm sm sm后,仍然不能存储到sim卡中,是不是等25条me空间用完后才可以存到sim卡中?  回复  更多评论
      

    # re: 【SMS】怎样获得手机的新到短信 2006-09-20 10:37 flyffa
    我也很头痛tc35i的问题,具体搞不太清楚,我的t39默认的工作模式也是存满sim卡之后才存me,不过可以设置过来,tc35i好像不听使唤  回复  更多评论
      

    # re: 【SMS】怎样获得手机的新到短信 2006-12-11 17:25 robin[匿名]
    满了25条后可以存到sim卡上。我试验过。bpesun@163.com
      回复  更多评论
      

    # re: 【SMS】怎样获得手机的新到短信 2007-07-07 10:29 崔增强
    at+cpms?

    +CPMS: "SM",16,40,"SM",16,40,"SM",16,40

    这是我的tc35i回复的数据,我晕了,为什么我的tc35i只能存储到sim卡不能存到me和mt?  回复  更多评论
      


    只有注册用户登录后才能发表评论。


    网站导航: