文本编辑器经蓝牙连接手机发短信DEMO

   

前段时间工作忙,已经很久没发博记录自己的工作了。在农历新年即将到来之际,我也抽点空来继续记录自己08年的工作。
    
    08年10月到11月,我和yhli完成了一个文本编辑器通过蓝牙连接到手机发送短信的DEMO。具体情况是这样的,公司做的一个文本编辑器产品(以下简称spinel)销量不错,是带仿PC、折叠键盘的那种。为了充分发挥spinel的文本编辑功能,公司希望能实现在spinel上编辑短信内容,然后通过spinel的蓝牙模块连接到手机,发送短信。
    
    这个DEMO主要牵涉到2个技术:1、蓝牙,2、AT命令。当时我和yhli都没有这些方面的知识,仅有之前某个蓝牙headset的项目做参考。蓝牙模块的开发环境是CSR的BlueLab。由于要控制手机发送短信,因此我们选择了蓝牙的DUN服务配合AT命令。
    
    BlueLab里面自带了很多例子,如FTP、SPP之类,但没有DUN的具体实例。看了几个FTP、SPP的例子之后,发现这些工程还是有很多相似之处,比如都是在main()函数里设置APP的蓝牙消息处理handler,然后在handler里面处理具体的蓝牙消息即可。于是我们就依样葫芦般地建了个DUN的工程,通过XIDE烧录到蓝牙模块一试,改了几次还真能连到手机,总算迈出了蓝牙编程的第一步!接下来要解决蓝牙配对问题了,是由spinel还是由手机主动发起配对?由于公司之前的蓝牙耳机项目使用的是手机主动查找设备的方法,我们从中参考了很多,发送从手机主动查找设备更方便,我们只要在代码里面加入ConnectionWriteScanEnable(hci_scan_enable_inq_and_page); 即可让spinel进入discoverable状态。配对成功后,保存好手机的蓝牙地址,然后使用DunConnect(DUN* dun, const bdaddr *bd_addr)函数主动连接手机的DUN服务。连接成功后,即可通过DUN message handler处理DUN_MESSAGE_MORE_DATA消息来与手机通讯了。这里的通讯具体说来就是发送AT命令控制手机。
    
    AT命令里面有控制SMS收发的部分,我们现在只要实现发送短信,用到的命令也不多,如:AT、AT+CMGS=?、AT+CMGF=1、AT+CMGS="tel"...这些。为了方便实现,我们使用的AT+CMGF=1设置短信为文本模式,因为PDU模式会增加编码、解码的工作。收短信的话可以通过AT+CNMI=?命令来设置短信到达通知,获得通知后使用AT+CPBS等相关命令即可读取接收到的短信。在实现AT命令的过程中,一个问题困扰了我们很久,就是我们的程序与Nokia6260建立DUN连接后,可以正常发送AT命令,但是同样的程序,与Nokia6230i连接后发送AT命令却不成功!我们花了很多时间研究DUN的初始化函数DunInit(Task theAppTask, dun_device_type type_of_device, uint16 RI, uint16 DTR, uint16 DCD, uint16 DSR, uint16 priority)上面,由于不知道RI、DTR、DCD、DSR的具体含义,我们在初始化时直接将其赋值为DUN_NO_PIN。后来将其改为具体的数值,并试过很多其他办法,还是未能与6230i交互AT命令,问题由此被搁置,至今未去解决。
    
    蓝牙DUN和AT命令都实现了,其实还有一部分就是spinel与蓝牙模块的通讯,当然非串口莫属了。值得注意的是spinel把短信内容和手机号码之类的信息发送给蓝牙模块时,需要自己定义简单的通讯协议。另外值得一提的就是一个害我们加班2个晚上的问题:我们在程序中使用strstr()函数一直未能稳定实现相应功能!就是说有时能实现,有时不能。后来找了个同事看了,才发现我们在程序中忘记加<string.h>这一头文件———看来还是旁观者清阿,害我们DEBUG 2天的竟然是个不值一提的问题。。
    
                                        串口                        蓝牙DUN
    附个项目简图:spinel <==========> 蓝牙模块 <==========> 手机
                                   发送短信内容                   AT命令
    
    下篇blog继续记录11月的工作,牛年继续!
    
    
    
   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值