51822服务发现(db_discovery)

来源:互联网 发布:mysql 官网下载旧版本 编辑:程序博客网 时间:2024/06/03 22:05

主要来自:http://blog.csdn.net/qutiezhu/article/details/52318073

主要是讲主从连接后主机如何在从机上找到自己需要的服务的过程,需要和主从通信过程分析教程一起看:

服务查找过程就是主从连接后,主机需要在从机上查找所有的服务以及服务下面的特征值和描述等信息,不过SDK中的主从通信例子因为是个

简单的主从点灯demo,所以服务查找过程中并不是找从句上所有服务,而是根据初始化时注册的要查找的服务来定向找从机的服务,以及下面的特征

和描述符信息。

在ble_db_discovery_start函数中,会提取main函数中调用的db_discovery_init 注册的要找的服务的uuid,来执行服务查找

提取之前注册的服务,执行服务查找,

 

当服务查找完后,协议栈传递BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP事件给派发函数,派发函数在递交给事件处理函数,在该事件处理函数中调用

ble_db_discovery_on_ble_evt函数,该函数就是处理服务发现过程中的相关事件,收到服务发现完成事件后,在进一步到on_rpimary_srv_discovery_rsp函数

中处理,而该函数内部的处理就是开始启动服务中特性的查找

 

每个特性查找万都会返回BLE_GATTC_EVT_CHAR_DISC_RSP事件,于是再进入on_characteritic_discovery_rsp函数处理

其主要功能就是更新已经查找到的特性总数的值,并且判断是否还有可能的特性需要发现,如果有,那么继续执行上面说额特性发现,如果

没有,就开始执行描述符发现过程:

综上,当特性发现后就开始调用descriptor_discover来执行描述符发现过程,该函数的主要就是判断描述符需要发现,如果有的话设置发现需要句柄范围,

描述符发现完成后就会收到BLE_GATTC_EVT_DESC_DISC_RSP,并由相应的函数处理,

该函数中首先会判断发现的描述符是不是CCCD,如果是就记录其下的句柄,然后当发现的描述符是第几个特性下,如果还没达到之前发现的特性总数,

就继续执行查找描述符来查找下一个特性描述符

当所有的买是否发出完成后就会调用下面两个函数

discovery_complete_evt_trigger函数会产生服务发现完成事件给之前main中初始化函数里main注册db_discovery_init的要找的服务找到后会执行回到函数,并将当所 所有注册的要找的都找完后就调用那些回到函数,

而on_srv_disc_completion函数负责判断是否找之前调用db_discovery_init注册所有的服务,如果没有就继续寻找下一个需找的服务,

这两个函数不是一定会在描述符发现完成后才会调用,而可能特性发现完后就直接调用,因为可能没有描述符需要发现

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机为什么总显示内存不足怎么办 小米云服务满了怎么办 魅蓝s6声音小怎么办 华为畅享7s丢失怎么办 华为耳机孔坏了怎么办 苹果手机耳机插孔坏了怎么办 荣耀8听筒声音小怎么办 荣耀8听筒音量小怎么办 华为荣耀6声音小怎么办 华为荣耀v8通话声音小怎么办 华为p20没有耳机孔怎么办 华为荣耀手机耳机声音小怎么办 小米5x显示耳机怎么办 手机进水听音乐人声小怎么办 华为荣耀v8手机音量小怎么办 手机充电孔松了怎么办 华为荣耀7卡顿怎么办 华为手机话筒没声音怎么办 苹果x耳机进水了怎么办 苹果6p进水了怎么办 华为手机声音变耳机模式怎么办 手机设置成耳机模式怎么办 opop耳机一个没有声音怎么办 oppo手机上显示耳机模式怎么办 微信显示耳机模式怎么办 微信变成耳机模式怎么办 5s变成耳机模式怎么办 华为手机一直是耳机模式怎么办 华为手机进水了耳机模式怎么办 蓝牙耳机通话声音小怎么办 华为手机自动进入耳机模式怎么办 华为手机耳机怎么挂了电话怎么办 华为手机听筒声音小怎么办 华为p9手机听筒声音小怎么办 苹果6总是耳机模式怎么办 苹果没有插耳机模式怎么办 苹果手机切换耳机模式怎么办 苹果6s出现耳机模式怎么办 苹果6变成了耳机模式怎么办 苹果手机成耳机模式了怎么办 华为mate8耳机声音小怎么办