Android--【CSRMesh蓝牙开发】CSRMesh1.3开发

来源:互联网 发布:哪里有淘宝内部券券 编辑:程序博客网 时间:2024/05/16 20:29

最近公司开始开发蓝牙设备,使用的是csr的芯片开发,由于我是刚入职,公司的iOS工程师早入职,所以iOS版本的APP已经开发完成准备上线了,导致Android这边的开发时间比较急促。刚开始接手,因为CSR的文档都是英文的,让我这个当年高考英语不及格的人,读起来非常吃力,在网上找到“子非鱼”的博客对CSR的demo有一些介绍,但是因为他只针对灯具,而我们还要控制其他的电器,所以虽然给了我很大的帮助,但第一天开发,还是摸不着点,最后自己研究了两天,算是把这个demo跟文档理得差不多了,所以想记录一下,也算是总结吧。
首先集成方面,我是直接把demo相关的工具类复制过来了,这里需要注意的是清单文件里面需要给meshService注册和添加相关权限。以下注册代码:

    <service          android:name="com.csr.mesh.MeshService"          android:enabled="true"          android:exported="false" >      </service>

然后开发从MainActivity开始,第一步是在onCreate里面创建service连接。

// 创建service连接Intent bindIntent = new Intent(this, MeshService.class);bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);

这里绑定了mServiceConnection作为Service的回调,一旦绑定了这个Service,就会调用以下方法,来初始化栈和连接CSRmesh桥接设备,自动扫描和桥接:

mService.setHandler(mMeshHandler);//设置Handler,接受来自CSRmesh网络的事件信号。mService.setLeScanCallback(mScanCallBack);//设置蓝牙扫描回调mService.setMeshListeningMode(true, true);mService.autoConnect(1, 15000, 0, 2);

这里要注意在onDestroy里面注销Handler和callBack的绑定以释放资源(注销方法可查看1.3的demo)!
关于MeshService的更详细介绍,如果英文够好可以看看文档,或者看看“子非鱼”的翻译。!!这里就不在翻译了。
扫描桥接完成之后,Handler 会发送 MESSAGE_LE_CONNECTED 信号,注意demo里面的setSecurity跟setTTLForMCPs这两个方法,这里,读取联网密码,并设置uuidHash,网络密钥。这是非常关键的地方。

最后看看APP发送数据给设备的API,CSR Demo里面是针对特定灯具控制的,所以有些API并没有用到,这里我们就需要看文档寻找其他的API了,其中有一个DataModelApi
类,里面有一个sendData方法,普通设备的命令都可以通过这个方法发送,这里有三个参数:
deviceId -设备ID,由于我是以广播的形式发送的,所以发0即可;
data - 需要发送的命令,注意这里不能超过10个字节;
acknowledged -数据块传输,默认false;
另外我这里补充一个MeshHandler 的MeshService.MESSAGE_RECEIVE_BLOCK_DATA,这个是智能设备向APP发送数据时Handler接收数据的标志信号,列如APP发出查询指令时,设备会返回数据,就是在这个ID下获取的。一般蓝牙一次只能发送10个字节,所以我这里是直接用byte数组获取16进制数据。

byte [] data = msg.getData().getByteArray(MeshService.EXTRA_DATA);

基本的调用流程大概就是这样了,如果读者看到有错误的地方,欢迎吐槽。

1 0
原创粉丝点击