沁恒蓝牙Mesh之中心节点

news/发布时间2024/8/25 7:11:02

1. 中心节点示例代码解读

void App_Init(void)

image

vendor_model_cli_init(vnd_models)

传入参数vnd_models的来源及其数据类型
image
模型初始化需要传入一个蓝牙mesh模型实例
vendor_model_cli_init(vnd_models);
image
vendor_model_cli是自定义模型数据类型

blemesh_on_sync()

主要是对Mesh参数配置进行同步,传递给下面的协议栈。重点关注
image
之后就会调用各种配网回调函数

配网回调

image
调用的顺序如下:
1.prov_complete()使能配网者角色
image
2.unprov_recv()开启配网者功能后,会解析未配网节点发送的广播,并发送配网请求
3.link_open()当调用发起配网请求函数后,如果正确接收到未配网设备的应答,将会进入此回调
4.link_close()当 link 连接关闭时会进入 link_close 回调,同时通过参数获取关闭的原因。出现以
下情况时会关闭 link:配网成功、储存空间不足、配网数据交互错误、接收超时(60s)、
用户主动取消。
5.node_added()远端节点配网成功,添加到本地节点管理,并开始远端节点配置流程,即中心节点通过CONFIG模型向网络中的节点发送配置命令
image

配网者对新入网设备的配置流程

每一个命令都会通过 CONFIG 客户端模型回调(cfg_cli_rsp_handler)上报该配置命令执
行的状态,同时只能执行一条命令,只有上一条成功后,才会执行下一条。
主要执行以下三个命令:添加应用密钥、绑定应用密钥到指定模型、添加订阅地址到指定模型

node_stage()

image
image
操作的对象是node_t类型
image

cfg_cli_rsp_handler()

每一命令成功后会进入cfg_cli_rsp_handler,因为前面说过,入网配置是通过CONFIG模型来实现的
image

node_rsp()

image

配网者自配网后对自身模型的配置流程

配网者自配网后,会执行下述代码流程。

local_stage()

操作的对象同样是node_t类型,只不过stage对应的是local。同时还不需要配置订阅地址。(没有设置发布地址,那么node订阅的地址有什么用?)
image
类似远端节点配置,操作完成后进入cfg_cli_rsp_handler,然后进入local_rsp

2.总结

本次解读主要分析了中心节点(配网者)实现远端配置和本地配置的方式。
在配网之前,中心节点还需要初始化自己的模型,实现模型事件处理任务,没发现有接受数据的函数?
之后就是添加自身到网络中,再将自身模型进行配置(对于配置参数中的密钥如何使用,还没弄清楚,疑惑在于
通信双方需要约定相同密钥么,然后就是序号,一般是序号与密钥一一对应

解惑



两个模型间通信,需要相同的self_prov_net_idx, self_prov_app_idx, self_prov_app_key


再添加扫描到的未配网设备.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.liansuoyi.cn/news/23223685.html

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

vue:el-table在resize时报错(element-plus@2.3.12)

一,报错信息: Uncaught runtime errors:ERROR ResizeObserver loop completed with undelivered notifications. at handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58) at eval (webpack-internal:///./node_modules/webpac…

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛)

A. A Xor B Problem(计数)输入5 1 1 2 2 3输出9说明点击查看代码 #include<bits/stdc++.h> #define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0) #define int long longusing namespace std;const int N = 2e5 + 10;unordered_map<int, int> mp; in…

CS2打开可以听到声音,但黑屏问题?

1.问题 我这里原先是可以启动CS2的,但是后来在CS2中重新调整了分辨率等等,之后由于某种原因又调整了屏幕分辨率,导致后面一进入CS2登录界面,橙色登陆界面就会缩在左上角一小块,并且之后就会陷入黑屏但有声音的状态 2.解决方法 参考链接:https://appuals.com/black-screen…

高级系统架构师学习(九)数据库系统

一、数据库概述 数据库模式 三级模式:外模式:视图 模式(也称为概念模式):数据库表 内模式:物理文件两层映像:两层映像可以保证数据库中的数据具有较高的逻辑独立性和物理独立性。外模式 - 模式映像 模式 - 内模式映像物理独立性:即数据库的内模式发生改变时,应用程序不…

传递函数变换到状态空间

1. 分子为1的传递函数 例: \[G(s)=\frac{1}{s^3+a_2s^2+a_1s+a_0} \]首先写成输入输出关系: \[(s^3+a_2s^2+a_1s+a_0)Y(s)=U(s) \]对应的微分方程: \[\dddot{y}(t)+a_2\ddot y(t)+a_1\dot y(t)+a_0y(t)=u(t)\\ \dddot{y}(t)=-a_2\ddot y(t)-a_1\dot y(t)-a_0y(t)+u(t)\\ \]令…

-bash: ifconfig: 未找到命令

#abao { background-color: rgba(245, 245, 245, 1); padding: 10px; text-align: center; width: 800px } 命令: yum -y install ifconfig如果返回为:没有可用软件包 ifconfig。错误:无须任何处理则输入:yum search ifconfig返回:==================== 匹配:ifconfig ==…

SOC芯片架构技术分析(三)

SOC芯片架构技术分析(三) 3.1 汽车:汽车平台未来需要高算力 1)汽车半导体涵盖了汽车芯片、功率器件、传感器等重要电子零部件。汽车的计算芯片包括传统的MCU芯片和SoC芯片。 MCU芯片一般包含CPU一个处理器单元;而汽车SoC一般包含多个处理单元。 2)ECU(Electronic Contro…

python文件操作

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件路径,访问模式)f = open(test.txt, w)读文件:f1 = open(test1.txt,r)content = f1.read()print(content)readLines返回一个列表,可以遍历 f1 = open(test1.txt,r)content = f1.readlines(…

MySQL索引的认识

MySQL表的所有记录,是存储在磁盘中的。 当根据非索引字段进行查询时,MySQL 通常需要执行全表扫描,以查找满足查询条件的记录。全表扫描意味着 MySQL 必须逐一检查表中的每一行,以确定哪些行符合查询条件。 全表扫描会导致磁盘 I/O 次数增加,因为 MySQL 需要读取整个表的数…

Java集合框架(部分)

类图List:有序可重复集合 特点 1.元素允许重复 2.元素有序(元素的顺序就是插入时的顺序) 3.元素可以通过索引来访问或者设置 { ArrayLIst:底层为数组,查询速度快,增删慢 LinkedList:底层是链表,查询速度慢,增删快 两者的优缺点,:效率高,线程不安全 } Set:无序不可…

Go每日一库之172:go-prompt

简介 受python提示工具包的启发,在Go中构建强大的交互式提示 一、代码示例 package mainimport ("fmt""github.com/c-bata/go-prompt" )func completer(d prompt.Document) []prompt.Suggest {s := []prompt.Suggest{{Text: "users", Descripti…

SpringCloud

目录Springcloud介绍注册中心(Eureka)背景注册中心案例总结负载均衡(Ribbon)测试使用负载均衡RibbonRibbon负载均衡流程Ribbon的IRule常见负载均衡策略Ribbon的使用方法远程调用(Open Feign)Feign使用连接池注册中心(Nacos)测试配置集群命名空间Nacos非临时实例配置中心(Nacos)…

RedisInsight安装及使用

前言 RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用 CLI 和连接的 Redis 进行交互(RedisInsight 内置对 Redis 模块支持)。 RedisInsight 提供的功能:唯一支持 Redis Cluster 的…

函数基础和函数参数

第一部分:函数基础 函数的作用意义:1.为了更好地管理代码,可能对应的代码块需要重复多次使用,所以通过一个函数封装起来,便于下次直接调用2.方法实际上是通过函数实现的 例1:# type() # 内置函数 def lis():li=[1,2,3]li.append(4)li.pop(2) # 指定删除# print(li) # …

06. 系统滴答定时器

一、SysTick定时器简介SysTick,即系统滴答定时器,是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,SysTick 的时钟源自 HCLK。当计数值减到 0 时,将从 RELOAD 寄存器中自动重装载定时初值,开始新一轮计数。只要不把它在 SysTick…

【Qt6】列表模型——树形列表

QStandardItemModel 类作为标准模型,主打“类型通用”,前一篇水文中,老周还没提到树形结构的列表,本篇咱们就好好探讨一下这货。 还是老办法,咱们先做示例,然后再聊知识点。下面这个例子,使用 QTreeView 组件来显示数据,使用的列表模型比较简单,只有一列。#include &l…

QT QPixmap QImage内存泄漏

无论是在代码中还是在UI中设置icon都会产生内存泄漏 大概看了下,好像是QPixmap的data_ptr的引用计数,到不了1/0(查看引用计数,释放后,理论上应回到1) 试了下,仅以下两种方式不会产生内存泄漏: 1、从 XPM加载: img = QPixmap(result); //result为 static const cha…

抽象CurrentUser适配Http和Job场景

前言 获取当前请求用户的基础信息是很常见的,诸如当前用户Id,角色,有无访问权限等。通常我们可以直接使用HttpContext.User来拿到当前经过认证后的请求人信息。但是这样对于分层应用不太友好,需要安装AspNetCore.Http.Abstractions的包,这样对于这层(非Web层)来讲也有所侵…

使用 AI 编程助手 CodeWhisperer,开发如有神助

前段时间体验了chatGPT,听说它可以写代码,结果发现更多的只是一个对答写小作文的百度助手,虽然也能写代码,但不是我想要的,可以在 idea 中可以快速生成代码块的。一个偶然的机会,从微信群里了解到,由亚马逊云科技推出的 CodeWishPerer 开发插件,可以在多个开发环境中使…
推荐文章