问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Zephyr BLE 协议栈自动发现 CCC

发布网友 发布时间:2023-06-22 23:00

我来回答

1个回答

热心网友 时间:2024-11-16 07:44

自动发现 CCC 是指在订阅某一个特征值的通知或指示时,可以只用特征值的 handle,不用指定 CCC 的 handle,协议栈会自动执行一个发现过程,帮我们查找的 CCC 的 handle。

那么如何使用呢?

我们先来看看正常情况下如何订阅一个特征值的通知:

这样成功订阅之后,每次 GATT Server 发生来一个通知,协议栈都会回调 nofity_function_cb() 回调函数。 但这样我们需要在 GATT 发现过程中手动查找 CCC 的 handle 并保存,稍微麻烦一点。

现在我们来看看如何用协议栈的自动发现 CCC 。

先来看看订阅参数结构体:

使能自动发现 CCC CONFIG_BT_GATT_AUTO_DISCOVER_CCC 后,该结构体多了两个参数 end_handle 和 disc_params 。

于是我们现在订阅一个特征值的通知过程如下:

这样就能够成功订阅特征值的通知了。

关键点如下:

配置内核 CONFIG_BT_GATT_AUTO_DISCOVER_CCC=y ,然后在 bt_gatt_subscribe_params 结构体里,

注意:使用自动发现 CCC 对于 end_handle 的选择需要十分注意,否则就会包含隐藏的 BUG 。自动发现 CCC 的过程找到的是 之间的第一个 CCC 的 handle 。这会导致这样的问题,若该范围内有一个 CCC,但是该特征值本身是没有 CCC 的,但是自动发现 CCC 的过程也会找到它,这就导致了错误。

因此在使用自动发现 CCC 订阅通知时,需要提前知道该特征值是否具有通知属性。如果具有通知属性,则可以直接将 end_handle 设置为 0xFFFF,不会产生任何隐藏 BUG 。

原理浅析

在整个工程里全局搜索 CONFIG_BT_GATT_AUTO_DISCOVER_CCC 就能够看到整个实现了。

核心部分为:

可以看到,在 bt_gatt_subscribe() 函数里,若开启了 CONFIG_BT_GATT_AUTO_DISCOVER_CCC 宏,并且传入参数的 ccc_handle 值为 0,则会先执行一个 GATT 发现过程,将发现得到的 CCC handle 存入参数 params 里,最后调用 gatt_write_ccc() 写服务端的 CCC 使能通知。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 领淘通淘客助手这个软件怎么样? 劳动合同法是否造成了用工成本的大幅度上升? 陨石的收藏价值 邱小平:《劳动合同法》对企业用工成本影响有限 为什么生产资料成本大幅度提升会导致通货膨胀 请问陨石有收藏价值吗? 电动车生产成本涨两成引起大家关注,为何电瓶车的生产成本大幅度... 成本高幅度增加是病句吗? 首谒范纯仁,纯仁贤之,荐于司马光的意思 平潭小型电动车在福州仓山能上牌吗 有部电影拿到币的人就可以逢赌必赢 只要有钱就想去赌博翻本 ...就发誓再也不赌了,可是一旦有钱他又会去赌直到输光屡教 如果给一个赌徒每个月一百万他还会赌吗? 赌鬼都是谎话连篇的,连自己都骗,有钱就想赌。如果你们家里有人是这 ... 我只要有钱就会拿去赌怎么办?家人给我交保险的钱都输了。该怎么办?还... 为什么一有钱非要赌光呢连自己生活费也不留? 鸟语花香写一句话怎么写 阳泉市到村社区工作大学生会有前途吗 蜂鸣器发出2000hz声音 圣剑宗陈天极是哪本小说主角? 社会运行成本上升的原因有什么? 英国茅草屋自然环境怎么样? 成本为什么会大幅度超支 王亮曾经在一家有名的外商独资企业中担任过销... 茅草屋顶的房子有哪些特点? 使用所谓的高档食材,真的大幅度增加了月饼的生产成本吗? 茅草屋的生活方式是什么 茅草屋的设计灵感来自于哪里? 2,4-二氨基-5-甲酰氨基-6-羟基嘧啶的美国海关编码是什么? 2-(3-(甲基氨基甲酰)-[1,1-联苯]-4-基)乙酸的韩国海关编码是什么? 3-(4-氰基苯基)甲酰氨苯基硼酸的欧盟海关编码是什么? 额定电流250A工业防水插座 为什么银行资本过高会增加筹集资金的成本 支付宝手机端上有一个扫一扫,还有一个付款,如果用我的支付宝向别人的... 中行采取紧缩货币政策,企业的筹资成本为什么会上升? 股票筹资比债务筹资的成本高,其原因包括()。 股票筹资资金成本高的原因 为什么股权筹资成本高? 你认为哪个对孩子更有利,严厉的父母还是宽容的父母? 参加三下乡社会实践对将来求职有什么好处? 参加三下乡活动对我们有什么好处