🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 简介 本文档用于 PHY6252 Mesh 的介绍以及使用方法,它有助于您了解和理解本公司 Mesh提供的组件,样例的使用方法,并且帮助您如何从提供的样例开始进行 BLE Mesh 的开发。 ![](https://img.kancloud.cn/73/df/73dfc4b2eadd2836aaa9b20eebfb7c35_612x466.png) # 1mesh 协议栈 这一协议栈建立在低功耗蓝牙技术之上。下图描绘了协议栈的层级。 ![](https://img.kancloud.cn/a1/ab/a1ab967ce7c366790cb28b4613b64308_381x481.png) ## 1.1 协议栈层 * [ ] 模型层(Model Layer):模型层与模型等的实施、以及诸如行为、消息、状态等的 实施有关。 * [ ] 基础模型层(Foundation Model Layer):基础模型层负责实现与 mesh 网络配置和管 理相关的模型。 * [ ] 访问层(Access Layer):负责应用数据的格式、定义并控制上层传输层中执行的加密和解密过程,并在将数据转发到协议栈之前,验证接收到的数据是否适用于正确的网络和应用 * [ ] 上层传输层(Upper Transport Layer):负责对接入层进出的应用数据进行加密、解密和认证。它还负责称为“传输控制消息”(transport control messages)这一特殊的消息,包括与“friendship”相关的心跳和消息。 * [ ] 底层传输层(Lower Transport Layer):在需要之时,底层传输层能够处理 PDU 的分段和重组。 * [ ] 网络层(Network Layer):网络层定义了各种消息地址类型和网络消息格式。中继和代理行为通过网络层实施。 * [ ] 承载层(Bearer Layer):承载层定义了如何使用底层低功耗堆栈传输 PDU。目前定义了两个承载层:广播承载层(Advertising Bearer)和 GATT 承载层。 ## 1.2 消息处理流程 ![](https://img.kancloud.cn/7d/bd/7dbdcd7af70868f0cbaca410589598b5_665x796.png) ![](https://img.kancloud.cn/6d/30/6d303edec31d946165328027c54a78ff_503x701.png) Mesh 消息传输流程如上两图所示,mesh 消息从 bear 层通过 ADV/GATT 进入之后,在网络层解码通过接口输入过滤器之后,如果是中继或者代理消息则在网络层实现,非中继消息会进入底层传输层进行拆分和重组之后进入上层传输层进行传输解密,在访问层经过合法性检查发送给基础模型层,最后通过模型层的实施来实现。 发送消息时则通过模型层实例发送,经过访问层定义数据格式,在上层传输层加密,传入底层传输层进行拆包与组包,在网络层进行加密,通过接口输出过滤器进入承载层之后输出。 ![](https://img.kancloud.cn/16/fa/16fae4bcd426b3946a1262bdad150c7e_509x283.png) 设备的配置是使用发送配置 pdu 的配置协议完成的。配置 pdu 通过通用配置层传输到未配置的设备。这一层定义了如何将配置 pdu 作为可以分割和重新组装的事务进行处理。 这些处理是通过一个配置承载层发送的。配置承载层定义如何建立会话,以便将来自通用配置层的事务交付到单个设备。最后,配置体系结构的底部是承载层。 # 2 工程及 api 介绍 ## 2.1 工程介绍 ![](https://img.kancloud.cn/3f/f1/3ff11f10ecff331b8d00bc3e79fdd286_573x404.png) ## 2.2 公共模块定义 一些公共的模块定义与其他 sdk demo 类似,以下是 mesh 方面的定义。 ![](https://img.kancloud.cn/69/f3/69f3209bd80efd697f1d813de752a5e9_548x166.png) ### 2.2.1 Mesh Sample 介绍 PHY62XX Mesh 内部接口都在 lib 库中,常用的 lib 为 libethermind\_ecdh.lib、libethermind\_mesh\_core.lib、libethermind\_mesh\_models.lib 和 libethermind\_utils.lib;功能如下: 1\. libethermind\_ecdh.lib:跟 ecdh 相关,目前 sdk 没有使用 2\. libethermind\_mesh\_core.lib:mesh 协议栈相关;provision、config 和 message 处理都在这里面进行 3\. libethermind\_mesh\_models.lib:mesh model 相关;目前使用的 on/off 等 model 的实现都在这里面处理 4\. libethermind\_utils.lib:mesh 存储相关 除了 lib 之外,用户接触和更改的文件一般在 appl\_sample\_mesh\_XXX.c,本章节重点介绍 sample 相关的接口和定义(以常用的 mesh\_light 为例)。 ### 2.2.2 定义 model ![](https://img.kancloud.cn/e5/69/e569ef55cb7cd73b527d233843560953_562x460.png) Vendormodel 如果使能的话,会自动使能 easy bonding(目前我们使用的 sdk 是这样考虑的,配合 Phy mesh app 使用)。 ## 2.3 api 介绍 ### 2.3.1 UI_health_server_cb * [ ] Health server 的回调函数 | 类型 | 参数名 |说明| | --- | --- |---| | MS_ACCESS_MODEL_HANDLE* | handle |model handle | |UINT8|event_type|event 的类型| |UINT8*|event_param|event的参数内容| |UINT16|param_len|参数长度| * [ ] 返回值 | | | | --- | --- | |API_SUCCESS | 成功 | |API_FAILER |失败 |