沁恒·蓝牙Mesh之中心节点
1. 中心节点示例代码解读
void App_Init(void)
vendor_model_cli_init(vnd_models)
传入参数vnd_models
的来源及其数据类型
模型初始化需要传入一个蓝牙mesh模型实例
vendor_model_cli_init(vnd_models);
vendor_model_cli
是自定义模型数据类型
blemesh_on_sync()
主要是对Mesh参数配置进行同步,传递给下面的协议栈。重点关注
之后就会调用各种配网回调函数
配网回调
调用的顺序如下:
1.prov_complete()
使能配网者角色
2.unprov_recv()
开启配网者功能后,会解析未配网节点发送的广播,并发送配网请求
3.link_open()
当调用发起配网请求函数后,如果正确接收到未配网设备的应答,将会进入此回调
4.link_close()
当 link 连接关闭时会进入 link_close 回调,同时通过参数获取关闭的原因。出现以
下情况时会关闭 link:配网成功
、储存空间不足、配网数据交互错误、接收超时(60s)、
用户主动取消。
5.node_added()
远端节点配网成功,添加到本地节点管理,并开始远端节点配置流程,即中心节点通过CONFIG模型
向网络中的节点发送配置命令
配网者对新入网设备的配置流程
每一个命令都会通过 CONFIG 客户端模型
回调(cfg_cli_rsp_handler
)上报该配置命令执
行的状态,同时只能执行一条命令,只有上一条成功后,才会执行下一条。
主要执行以下三个命令:添加应用密钥、绑定应用密钥到指定模型、添加订阅地址到指定模型
node_stage()
操作的对象是node_t
类型
cfg_cli_rsp_handler()
每一命令成功后会进入cfg_cli_rsp_handler
,因为前面说过,入网配置是通过CONFIG模型
来实现的
node_rsp()
配网者自配网后对自身模型的配置流程
配网者自配网后,会执行下述代码流程。
local_stage()
操作的对象同样是node_t
类型,只不过stage对应的是local。同时还不需要配置订阅地址。(没有设置发布地址,那么node订阅的地址有什么用?)
类似远端节点配置,操作完成后进入cfg_cli_rsp_handler
,然后进入local_rsp
2.总结
本次解读主要分析了中心节点(配网者)实现远端配置和本地配置的方式。
在配网之前,中心节点还需要初始化自己的模型,实现模型事件处理任务,没发现有接受数据的函数?
之后就是添加自身到网络中,再将自身模型进行配置(对于配置参数中的密钥如何使用,还没弄清楚,疑惑在于
通信双方需要约定相同密钥么,然后就是序号,一般是序号与密钥一一对应)
解惑
两个模型间通信,需要相同的self_prov_net_idx, self_prov_app_idx, self_prov_app_key
再添加扫描到的未配网设备.