理解CSR uEnergySDK
From KaiFa.Chen
这个不是SDK的使用介绍,我觉得使用一个SDK刚开始的时候最难的不是怎么让一个工程运行在电脑上,而是这个工程同时可以在工程师的大脑中也运行起来,工程师可以知道程序会如何执行,消息会跑到程序中的哪个位置,想要增加的功能应该加在哪个位置,BUG可能出现的位置在哪里,等等,所以这个文档是帮助初学CSR uEnergySDK的工程师建立对整个BLE工程理解的介绍文档。
学习CSR uEnergySDK,首先需要搭建一个平台,你需要有一个CSR1010的开发板,一个串口转换电平的板,并把它们连接到电脑,这个和做小MCU开发类似,不懂的自己百度。另外用Iphone手机安装好LightBlue,这个做为BLE测试工具。本文的SDK是CSR_uEnergy_SDK-2.3.0.31,其他版本的SDK可能没有我提到的内容。如果想学习,又没有这些工具,那赶紧去CSR代理商买一套吧。
现在我们选择一个容易上手的工程,我推荐security_tag这个工程。
第一步为这个工程的一些位置加打印到串口的信息,如果我们已经了解过蓝牙Ble4.0,就会知道这些位置应该是广播信息和连接,以及数据读写位置。仔细看CSR的文档介绍,我们知道bool AppProcessLmEvent(lm_event_code event_code, LM_EVENT_T *p_event_data)这个API是最主要的消息接收函数,我们为这个函数里面的每个Case增加打印信息,不要觉得这是个麻烦的事情,实际上当在增加打印信息的时候,我们也会对程序结构有个进一步的了解。
接下来让SDK编译并运行,选择正确的波特率(默认为2400),就可以在电脑的串口助手上看到打印出来的消息,这个时候我们发现只看到了“GATT_ADD_DB_CFM”,程序执行到这里会进入Advertising,这个地方我们还没有增加打印信息,等下再说明。这个时候打开手机的LightBlue可以到名为“CSR Sescuiry Tag”的设备,可是过了一会儿就变成一个灰的状态显示,默认的程序会在一定时间会停止Advertising,所以这里怎么让Advertising可以一直广播是一个很好的练习题目。(提示:需要对TimerCreat()函数和GapSetMode()函数有所了解,并且gap_mode_discover_general和gap_mode_discover_limited可以实现两种一直的广播方法。其中gap_mode_discover_general只要不停止广播,可以一直广播;gap_mode_discover_limited,需要在广播停止的时候,重新广播)在学习的时候,最
好在gattSetAdvertParams()加些DEBUG,还有gattAdvertTimerHandler()。
明白了如何Advertising后,接下来说下LightBlue可以发现CSR Sescuiry Tag这个名字,在代码上体现在哪里。用SDK的查搜索LsStoreAdvScanData函数,可以看到一个关键的函数addDeviceNameToAdvData,在这个函数里面你可以看到设备的名字如何被赋值,最后用LsStoreAdvScanData()去广播这个数据段。除了广播名字外,还可以广播UUID,功率,厂商信息等,这些请参考LsStoreAdvScanData()对参数的描述。感兴趣的话,可以多做些尝试DEBUG下。
通过以上的学习,我们大概了解让LightBlue发现CSR Sescuiry Tag,CSR1010需要的运行的流程。接下点击LightBlue,如果没有运气差的事情发生,LightBlue就会顺利连接上,串口的DEBUG会出现“GATT_CONNECT_CFM”,“LS_CONNECTION_PARAM_UPDATE_CFM”连接上的信息。走到这里,我们就大概了解了BLE的连接,其实很短暂,就是得到“GATT_CONNECT_CFM”。有了GATT通道了,那我们就可以基于这个连接收发数据了。在LightBlue上选择一个可以写的属性Characteristic,比如Alert Level,然后写一个数
据,可以在串口看到“GATT_ACCESS_IND”的DEBUG,如果你没有看到请检查下你加的DEBUG有没有这个“GATT_ACCESS_IND”case。然后从这个case一步步地把LightBlue发数据DEBUG出来,这个是写的路径的学习,对应的如果在LightBlue上读数据,也会触发“GATT_ACCESS_IND”,你需要从这个case一步步的到程序最终通过哪个函数把数据回给APP。
sdk 如果理解了以上流程,接下为尝试为这个工程增加一个自定义的SERVICE,并且可以通过LightBlue收发数据。这里你需要先学习下CSR关于BD文件描述的文档,具体在DOC文件里面。参照工程中GATT_db_files的DB文件做到有一个了解,如何尝试自己创建一个DB文件,尝试把这个DB加到这个工程中,最后增加在Characteristic中的接收和发送的代码。如果让LightBlue连接起来,可以把数据收发转到自己定义的Characteristic这个case上,那么恭喜你已经初步掌握了这个SDK。
以上这些步骤需要自己去理解和尝试,手把手教不会,自己动手,孰能生巧!我也是这样苦逼学习过来的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论