============ 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 """"""""""""""""" .. code:: c 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 **************** .. code:: c 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中 ************************ .. code:: c 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初始状态 ********************* .. code:: c generic_onoff_server_0.message_format.present_onoff = 1; generic_onoff_server_1.message_format.present_onoff = 1; 该函数不是必须要执行的函数。有一些Model有默认的初始值,例如灯有默认的状态开或者关,需要在这里统一进行初始化。 如果没有默认的初始状态,则不需要进行设置初始状态。 d:注册config server回调函数 ******************************* .. code:: c regisite_config_server_evt_cb(user_config_server_evt_cb); 对于Server节点来说,进行Config消息交互时候,需要Config Server Model进行处理。 有一些处理的事件需要通知给用户了解,所以需要在事件的发生的时候,进行通知用户。 这里注册的用户回调函数,就是Config Server收到事件进行通知的回调。只需要注册一次即可。