文章目录
- 一、Model layer
- 二、Foundation Model layer
- 三、Access layer
- 四、Transport layer
- 五、Network layer
- 六、Bearer layer
一、Model layer
model 定义了一个节点支持的
功能特性
,每一个 model 都定义了自己的op code
和status
。
- 比如
generic onoff model
,定义了Generic ON/OFF/GET/STATUS
。 - 比如……
Provisioner 在组网的时候
- 会通过
get composition data
命令去获取节点支持的所有model id - 然后Provisioner 就能知道节点具体支持什么功能了
- 然后Provisioner 才知道应该给该节点发送什么
op code
Model 又分为 server model 和 client model。
server model
:是一个被控制的角色,有自己的状态,可以被别的节点改变和获取
- 比如一个Led设备,具备
onoff server model
- 可以接收
onoff set/get
命令(App下发的控制开关命令) - 可以回复
onoff status
命令(App查询Led状态的命令) - 但是LED不能自己对外发送
onoff set/get 命令
和onoff status
命令
client model
:是一个控制 server 节点的角色,没有自己的状态
- 比如一个蓝牙遥控器,具备
onoff client model
- 可以发送
onoff set/get
命令(遥控LED或者其他设备) - 可以发送
onoff status
命令(查询LED或者其他设备的状态) - 但是不能回复收到的
onoff status
命令,也不会处理收到的onoff set/get
命令
二、Foundation Model layer
Foundation Model 的模式和 model 基本一样,是基础 model,包含 Configuration Server model
,Configuration Client model
,Health Server model
,Health Client model
。
- 被配网节点都必须包含
Configuration Server model
- provisioner 节点必须包含
Configuration Client model
这两个 model 包含的常用 op code 是 subscription add/delete(即组号添加/删除)等,并且这两个 model 的 access layer 层的加密都使用 device key,所以一般来说只有 provisioner 节点才能发送 configuration model 的 set/get 命令。
三、Access layer
简单的来说,一句话
把 op code 和 parameter 按规定的格式组合在一起。
四、Transport layer
使用 app key 或者 device key(configuration model 使用)进行加解密。判断并确认是否需要执行分包和组包协议。
目前为了兼容 BLE4.2 等不支持长广播包的设备,所以都统一设定 adv 的最大 payload 为31byte。
五、Network layer
对于发送流程
- 对数据包添加 sequence number,等
- 并使用 network key,iv index 对数据进行加密
- 发送完成后 sequence number 会执行“加 1”的操作
对于接收流程
- 使用 network key,iv index 对数据进行解密
- 解密后判断sequence number 是否有效(即是否大于已经接收过的值)
- 如果无效则直接丢弃
六、Bearer layer
把已经执行过加密的数据包通过type
为 LL_TYPE_ADV_NONCONN_IND(0x02)
的广播包发送到mesh
网络中。