51822 主从机分析2

来源:互联网 发布:淘宝开店 工商注册 编辑:程序博客网 时间:2024/05/17 01:13

解决第三个问题:如何使能从机上的特征值的notify功能,使其能通过notify方式发送数据

使能从机的notify功能是通过写0x0001到从机的那个具有notify功能的特征的CCCD描述符中来实现的。既然要写那就要先有服务发现过程,服务发现就是找到从机里我们需要的服务以及下面的特征值,描述符等。

因为服务发现过程SDK已经做好了,我们不需要去处理,我们要做的就是注册自己需要找的那个服务,该服务只包含一个具有notify功能的特征值,以用来发送数据给主机,可以再从机的service_init函数中看到,

对于主机端来说,主机端只要找到我们需要的服务以及它下面的那个具有notify功能的特征值和CCD就可以了,然后直接写0x0001到CCCD,就使能从机的notify功能了

前面说到主机工程中的SDK已经做好了服务发现的相关流程,也就是主从连接上从机后会自动开始查找从机里面我们需要的服务,特征值等信息,所以我们需要做的就是直接指明自己想要找的那个服务就行,SDK提供的机制就是注册机制,也就是SDK在执行完服务发现过程前会有个初始化,在这个初始化中注册自己想要的服务,以及对应的回调处理函数。之后会自动进行服务查找,并且查到会调用之前注册的回调函数

所以最终当主机连接完成后,主机执行服务发现过程中,开始查找我们调用ble_db_discovery_evt_register函数注册过要找的服务,当找到了从机上的而服务,然后调用

一同注册回调函数db_discovery_evt_handler.

 

再来看一下这个回调函数的实现:

回调函数的目的就是找到从机上那个服务下面的具有notify特性的特征值,并且记录下是第几个,然后调用写函数,写特征值 附属描述符CCCD来实现使能notify功能,

0 0