<!--
继前面的一序列多篇幅的理论基础讲解,我估计读者们都磨刀霍霍想要狠狠地 “撸一发代码”;你们所想的,小编我已经Get到了,这不,这篇章就让大家结合之前诸多篇章所学到的知识,融会贯通到代码中来。
我不知道读者们对小编之前的SIG MESH各个角色的功能简介中的内容还有没有印象,我在该篇文章提到,Mesh网络有以下几个角色:
但是,前四个角色中的一个或者多个并不是必须要存在于一个设备中;换句话说就是:一个想要加入Mesh网络的设备仅仅是普通节点也是可以的
上述的Mesh网络拓扑图再次证实了普通节点也是可以加入SIG Mesh网络,那么这个时候可能会有读者会问:“普通节点是如何加入SIG MESH网络的?”;这样的问题又间接地引出了另外的知识点即:
除了PB-GATT的Provisioner之外,但凡是SIG Mesh网络的节点,那么其必须支持ADV Bearer;这个也就是说除了Provisioner与Proxy节点通过GATT Bearer进行通讯之外,所有的Mesh数据都是通过ADV Bearer来交互的;
既然讲到多角色,那么是不是一个设备可以同时做为上述的所有角色,显然这是不行的!!!它们的组合关系如下所示:
上述就是当前设备能同时共存的角色的两种组合,其中重点说一下Normal节点,即普通节点;小编在之前的篇章不止说过一次,Proxy、Relay、Friend、Low Power这些特征是可以除能的,什么意思呢? 举个例子:“如果一个Proxy节点,把其Proxy特性关掉,那么其就暂时失去Proxy的特性变成了一个普通的节点,但是此时它仍然是Mesh网络中的一员,后继可以再次将该特性打开,其就又变为Proxy节点”;如果还是有读者不明白,那小编再举一个例子 “如今人手都有一部智能手机,而智能手机的蓝牙功能是可以开关的,开表示手机有了蓝牙功能,关了蓝牙功能就消失了”
有了Role的理论知识铺垫,那么读者就知道目前只有两种组合,那么小编就带大家如果在源码中实现组合一:
这里小编就以Nordic52840 SDK为蓝本,展开接下来一序列的探讨;如果想购买相对应的开发板,可以在我们红旭无线的淘宝中找到它;
Proxy
想要实现Proxy特性,我们只须要打开下述的宏即可:
/** PB-GATT feature. To be enabled only in combination with linking GATT files. */
/** GATT proxy feature. To be enabled only in combination with linking GATT proxy files. */
但是,需要注意的是这两个宏必须同时开或者同时关,否则Proxy特性不会被使能。前者用于使能Provisioning相关的函数,而后者则是使能了Proxy协议相关的函数
Relay
想要实现Relay特性,则可以使能下述的宏打开该功能:
xxxxxxxxxx
/** Relay feature */
要实现Relay特性相对于Proxy特性而言,则简单地多;只需要在接收到网络封包之后,如果该宏被使能则判断该Network PDU满不满足中继的条件,如果满足则中继,否则直接处理或者抛弃;至于,一个网络封包是否被中继的判断条件请参考BLE Mesh各层帧包格式详解中的TTL章节内容
Friend
同理,想要实现该特性则使能下述的宏:
xxxxxxxxxx
/** Friend feature. */
当Friend特性被激活,则需要额外初始朋友订阅列表、朋友队列等相关的参数,其他的则跟Relay特性有点类似即在接收到Network PDU之后,都会先进行Friend相关的验证,接着才会继续向Upper Transport Layer
Normal
这个就更加简单了,只要上传的特性 (包括下述的Low Power特性) 均不使能就是Norma节点,但是mesh协议栈相关的函数还是要初始化以及使能的
至于该组合的节点,Proxy和Normal则同上述,这里仅介绍Low Power特性的使能;这里可能有读者会有疑问 “为什么Proxy特性和Low Power特性可以共存”,其实这个很好解释,当LPN还没有入网之前,其不见得能处于低功耗模式,如果它要加入现有的Mesh网络,其可以通过PB-GATT或者PB-ADV,又或者相要通过GATT Bearer配置LPN都是允许的;同理,想要实现该特性则使能下述的宏:
xxxxxxxxxx
/** LPN feature */
基本上Multi Role的实现相对比较简单,因为Mesh协议栈基本上帮你做完了,而用户只需要将相对应的宏打开即可;至于,打开了某个特性,协议栈做了什么操作,我们不必在这方面深究,因为这个因不同的芯片厂商而不同;但是,大体的操作基本上如Proxy、Relay、Friend、Normal和Proxy、Low Power、Normal所述。