上一篇:蓝牙 Mesh SDK 快速上手 | 《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》第三章>>>
下一篇:蓝牙 Mesh 开关开发实例 | 《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》第五章>>>
点击免费下载
《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》>>>
1.1目的
这里以Mesh Model组件里已有的vendor model为例,介绍如何开发自己私有的Mesh model
1.2 基本概念
开发Mesh Model前先了解一些基本的概念:
元素:元素(Element)是节点中可寻址的最小单元,分为主要元素和次要元素,简单的节点通常只包含一个主要元素,元素通常由一个或者多个模型(model)组成
模型:Mesh model是蓝牙 Mesh 协议中基础业务单元,一个或者多个模型对应特定的业务,模型又分为服务模型(Server Model)以及终端模型(Client Model);mesh 模型可分为基础模型(Foundation Model)、通用模型(Generic Model)、以及厂家自定义模型(Vendor Model),用户使用基础模型和通用模型通常能组合出大部分应用,也可以开发私有Mesh Model实现自定义的服务
状态:state描述的模型的属性,给其它模型提供属性进行操作的的是Server Model;对其它模型状态进行操作的模型是Client Model
消息:蓝牙Mesh网络中所有的交互都是通过消息(message)完成的,定义消息的目的是为了完成对状态的操作
1.3 vendor model 设计
这里以Mesh组件已有vendor model中自动配网属性设计为例,介绍vendor model开发流程.vendor model设计主要包含消息回调函数设计以及消息api设计
1.3.1 消息回调函数实现
Mesh model消息回调函数的设计主要基于btmeshmodel_op(结构体),该结构体定义如下
以下为 Mesh 组件已有 vendor srv model 部分消息回调函数实现
1.3.2 消息 api 实现
对于 Mesh srv/cli 模型,大多数情况下是通过 cli 模型主动操作,srv model 通过消息回调函数被动响应的模式,因此设计主要是 cli model 的 api, 这里涉及 VENDOROPATTRMESHAUTOCONFIG 以 及VENDOROPATTRMESHAUTOCONFIG_GET 两条 api, 该类 api 的设计方法如下:
1.3.3 model 结构体实现
实现消息回调函数及mesh api设计后,将消息回调函数结构体填充到BTMesh MODEL_VND( 结构体 ),参见该结构体定义。
以下为 Mesh 组件已有 vendor srv model pub 实现。
struct bt_mesh_model_pub g_vendor_srv_model_alibaba_pub = {
.msg = NET_BUF_SIMPLE(3 + 377 + 4), // 这里只定义了 pub 消息所使用的地址 };
如下为 Mesh 组件已有 vendor srv model 实现,至此就完成了一个私有Mesh
model 的设计。
#define MESH_MODEL_VENDOR_SRV(_user_data) BT_MESH_MODEL_VND(BT_MESH_MODEL_ VND_COMPANY_ID,
BT_MESH_MODEL_VND_MODEL_SRV,g_vendor_srv_model_alibaba_op,&g_
vendor_srv_model_alibaba_pub, _user_data)