Mesh系统架构

一:Mesh目录结构

Mesh协议栈各个目录的含义和介绍,如下表所示:

一级目录 二级目录 目录介绍
core Mesh各层核心协议栈文件
core api Mesh核心协议API接口。 包含:mesh节点属性参数读写接口,mesh节点控制接口,model消息发送接口。
device_manager 设备管理相关文件
device_manager api 设备管理相关文件对外API接口。 包含:appkey/netkey/devkey的配置与管理
device_manager keys 密钥管理文件
device_manager node_save 节点信息储存文件
examples 测试用例文件
examples simple_generic_onoff_client 开关灯测试用例(Client端)
examples simple_generic_onoff_server 开关灯测试用例(Server端)
examples provisioner_config_level_client provisioner 调节灯的亮度测试用例(client端)
examples simple_generic_level_server 调节灯的亮度测试用例(Server端)
gatt GATT手机连接相关协议文件
gatt api GATT手机连接接口API。 包含:GATT手机连接的连接/断开/等事件的回调通知,回调注册。
gatt provisioning GATT手机连接入网功能文件
gatt proxy GATT手机连接代理功能文件
model Mesh Model协议文件
model api Config Server/Client,以及通用Model的API接口。 包含:config server的各种事件的回调通知,回调注册。通用model的事件通知与注册。 包含:generic onoff model的发送/接受/控制的消息API。
model foundation_models foundation_models层的Config消息配置处理文件
model generics Generic系列Model的实现文件
model health health系列Model的实现文件(预留)
model light_mode light_mode系列Model的实现文件(预留)
provision 入网配置相关文件
provision api 入网配置相关对外API接口。 包含:入网的初始化,参数配置,消息通知的API接口。
tools 常用函数工具箱
tools static_mem_manage 静态内存管理配置文件
tools uart_ctrl 串口控制设备接口的实现

二:Mesh配置文件

用户需要进行配置一些系统工作时候必要的参数,主要分布在下表两个文件中,文件介绍和主要配置内容如下表所示:

文件名
文件介绍
sdk_mesh_config.h
Mesh基础参数配置文件
主要包含以下内容:
1:Server/Client 角色配置
2:节点属性与功能启用开关配置
3:等等
sdk_mesh_config_pro.h
Mesh高级参数配置文件
主要包含以下内容:
1:元素数量配置
2:appkey/device key/network key 缓存大小配置
3:key最大绑定数量配置
4:公司标志符关键字设置
5:默认ADV发送参数设置
6:等等

三:创建Model

Model分为Config Server/Client Model与普通Model,其中Config Server/Client Model在系统已经创建与配置完成,用户无需再进行创建,用户只需要去创建自己的普通Model即可。

创建Model的配置分为两个步骤,分别为实例化Model与配置Model。

可以参考examples\simple_generic_onoff_client\mesh_app.c,以及examples\simple_generic_onoff_server\mesh_app.c文件中的代码。

这里以Server Model为例子来进行介绍Model的创建。

1:实例化Model

DEF_SERVER_MODEL(generic_onoff_server_t , generic_onoff_server_0);
DEF_SERVER_MODEL(generic_onoff_server_t , generic_onoff_server_1);

使用宏定义DEF_SERVER_MODEL可以用来创建Model,其中第一个参数为model数据结构类型,第二个参数为model的句柄。

如果需要创建多个Model,可以多次调用DEF_SERVER_MODEL宏定义。

2:配置Model

配置Model分为4个步骤,分别如下所示:

a:初始化Model

INIT_SERVER_MODEL(generic_onoff_server_0,GENERIC_ONOFF_SERVER_MODEL_ID,true,user_onoff_0_evt_cb);
INIT_SERVER_MODEL(generic_onoff_server_1,GENERIC_ONOFF_SERVER_MODEL_ID,true,user_onoff_1_evt_cb);

使用宏定义INIT_SERVER_MODEL进行初始化Model。

其中第一个参数为model的句柄,第二个参数为Model的Model ID,是三个参数为是否为SigModel,第四个参数为事件回调

如果需要初始化多个Model,可以多次调用INIT_SERVER_MODEL宏定义。

b:将Model放入Element中

mesh_element_init(0,&generic_onoff_server_0.model.base);
mesh_element_init(1,&generic_onoff_server_1.model.base);

使用函数mesh_element_init进行初始化Model所属元素,也就是将Model放入哪一个元素中。

其中第一个参数为要放入的元素的位置,从0开始。第二个参数为model的句柄的统一指针model.base。

如果需要操作多个Model,需要多次调用本函数。本函数一次只能将一个Model放入element中。

c:设置Model初始状态

generic_onoff_server_0.message_format.present_onoff = 1;
generic_onoff_server_1.message_format.present_onoff = 1;

该函数不是必须要执行的函数。有一些Model有默认的初始值,例如灯有默认的状态开或者关,需要在这里统一进行初始化。

如果没有默认的初始状态,则不需要进行设置初始状态。

d:注册config server回调函数

regisite_config_server_evt_cb(user_config_server_evt_cb);

对于Server节点来说,进行Config消息交互时候,需要Config Server Model进行处理。

有一些处理的事件需要通知给用户了解,所以需要在事件的发生的时候,进行通知用户。

这里注册的用户回调函数,就是Config Server收到事件进行通知的回调。只需要注册一次即可。