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收到事件进行通知的回调。只需要注册一次即可。