Biu~笔记:高通蓝牙ADK(21)--自定义BLE服务

       Bui~续上篇抄完的gatt库作业之后,BLE服务的功能基本完成了,服务属性的配置,收发数据的一级处理都在库里面完成了。一级处理只是将收到的数据筛选一遍,取出正确有效的数据传到应用层做二级处理。所以在做自定义服务时,gatt库修改会比较少,而应用层的二级处理的改动就会比较多。本着做事有始有终的原则,这一篇将继续带大家抄剩下的应用层处理,就像鲁迅说的“如果要抄,就抄它们全家桶”。

       首先熟练地在应用层找一个简单的服务,但由于目前的ADK用到的服务比较少,只能选DIS(device info server)

路径: qcc514x-qcc304x-src-1-0_qtil_standard_oem_earbud\adk\src\domains\bt\gatt\servers

然后就信手拈来地Copy,Paste,Rename,Go home  o(* ̄3 ̄)o

开玩笑,这一次就不能那么草率了,因为这里的处理因服务的功能而异,还是需要了解一下里面的逻辑。顺便提醒一下,新加入工程的文件夹需要在工程配置中的INCPATHS加入对应的路径

       而copy的文件就两个,头文件和源文件,所以大家不必害怕去完全看完。其中最重要的函数当然是gatt库的初始化

DIS的gatt库初始化时有五个形参,而小编的是四个,这个是无所谓的,DIS多一个参数是要把应用层的数据带给gatt库去,另外四个和小编写的是一样的。

第一个:应用层的task,gatt库用这个task给应用层发消息和数据。

第二个:服务数据变量,这是一个应用层的全局变量,传了个指针给gatt库,是为了获取gatt库的环境参数,主要还是两个task。

第三个和第四个就是上一篇说到的handle的始终值,注意这里的定义是包在gatt_handler_db_if.h这个头文件里,所以只要把名字写对了就可以了。另外,生成handle的.dbi文件需要被包在gatt_handler_db.db文件中,这才能生成真正有用的handle(名字还是不变)。

这个初始化函数后面还带了一个设置广播的初始化,这部分就回头看前面的BLE广播篇啦
->点我带你去看BLE广播<-

->点我看第二篇<-

最后把这个初始化函数放到earbud_init.c中的appInitTable中跟着其他大佬一起被初始化。

       另外一个重要的函数是二级处理函数,gatt库发上来的消息,都会在这里逐个被处理

因为小编的服务只有读写功能,所以这部分在gatt库就识别为两个独立消息发上来,处理时就按每个消息的意义来处理即可。小编做的功能是把写指令的数据存到全局变量里,读指令就把全局变量的数据发回去,功能非常简单。另外这的读是有回复函数的,这个回复函数和上篇说的gatt库回复函数在根本上是一样的,只是这个回复不在gatt层执行,是在应用层装了数据之后再回复。在ADK里面别的服务会将这个函数封装好几层,这只是为了方便使用。对于BLE的其他数据传输方式,例如Notification,Indication,Command这些,都是类似的处理,只是数据发起方向不一样(也就是传输数据使用的API不一样),或是两个task接收的消息或flag不一样,再就是用不用回应这样的区别,大部分都可以在ADK默认的服务中找到参考的,所以不怕抄不到作业。

       好啦,BLE简单的读写服务就讲到这里,更深层次的应用,就等大家去探索啦!(#^.^#)




(前方班主任附体,牢骚预警!!!)

BLE服务是个很广的功能模块,但基本都是gatt库上去延伸出来的花样,例如fast pair的功能有一堆文件,但是gatt库里面的文件和核心处理的函数还是那几样东西,只是他的characteristic比较多,characteristic可以认为是不同功能的指令,不同功能就带来不同领域的处理,所以文件自然就多了;所有的函数调用还是离不开gatt库的task,应用层的task,handle,data,还有一个是cid(connect id 这个在连接之后参数的,在gatt库收到的消息都带有这个参数,用来区分连接链路)。来来去去都是这些参数,所以不需要害怕BLE,精密的5nm IC,它的原材料也只是沙子。就像鲁迅说过的那句话“我好像是一只牛,吃的是草,挤出的是奶”,我一直很好奇草是怎么合成动物乳蛋白的。

 


       以上是本期博文的全部内容,如有疑问请在博文下方评论留言,或者有什么想了解的都可以留言,我会尽量安排上(o´ω`o)و。不管你看到这篇文章是什么时候, 2020可能快要或已经过去了,谢谢大家在这一年的支持,让小编霸榜了一年,啊哈哈哈哈(▰˘◡˘▰)  接下的2021,小编还会为各位观众老爷带来还可以的干货(・ω<),望各位多多支持,Thanks♪(・ω・)ノ。


2021新年快乐!!!

 

      
       对了,这两篇的BLE说的都是抄作业,所以就不放代码了。但是有谁想抄小编的作业,emmmmm~我想了一个很傻X和折腾的方法,我想让新用户扫码注册,但是新用户能看到这里就已经不是新用户了,所以我还是想傻X一下:扫描下方二维码,注册成为新用户,再到这篇博文下面留言,我看到新用户留言了,我就会在我的客户列表里面找到这个新用户的邮件,然后就会把作业发给你抄(可能你会觉得我是奸商,不要这样觉得啦,我就是奸商ー( ̄~ ̄)ξ)

 


多看文档,多上官网

多看文档,多上官网

多看文档,多上官网

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论

rogerhu

rogerhu

2022年8月24日
1
访客

访客

2022年7月20日
为什么模仿了gatt_imm_server这个服务后,可以被手机app发现,但是名字那些还是显示immedia alert?而且不可以读写,点击读写会出现chracteristic读取失败,是不是读写那一块没有修改好?
奔向大海

奔向大海

2022年5月16日
在qcc5125上面增加了自建gatt并创建ble服务不成功
Jeffrey_AA

Jeffrey_AA

2022年4月26日
来学习啦
Wanga

Wanga

2022年1月6日
我刚刚注册新用户了,能不能把作业发给我邮箱呢?
我很菜

我很菜

2021年6月16日
小编大大,能撩你不
方老板

方老板

2021年4月14日
以前的新用户可以吗
Rain Zhang

Rain Zhang

2021年2月8日
那你可能需要把博客抄送到CSDN 简书上,就是不知道你引流的二维码会不会被墙了 哈哈哈
叉烧

叉烧

2021年1月29日
这小编适合做娱乐主持人