<!--
众所周知,SIG Mesh网络中的数据交互是通过元素和模型来实现的;而元素又是模型的集合,即元素更多的是提供一个单播地址即一个入口点,然后进行入口点进行数据流的交互则是在模型中实现;更多元素和模型的内容请参考什么是Element和Model;除了 《Mesh_Model_Specification》 之外,SIG还需要Vendor Model的存在,即自定义模型;这也是本篇章的主题。
在开始讲解Vendor Model之前,我们先看看Model在整个节点是如何存在的;
从上图中,我们可以再次验证小编在前言所说,模型是依附在元素之下的;换一句话就是说,想要与某个模型进行交互,就务必先找到元素;但是,有一点需要强调的是:同一个元素下不能有两种相同的模型存在,如果有相同的模型,必须将其中一个模型依附到另外一个元素下;那么,模型又到底是由哪几部分组成的呢?老规定:上图!!!
每个模型都有唯一一个模型ID,模型又分SIG Model和Vendor Model;因此也就有SIG Model ID和Vendor Model ID之分:
SIG Model ID
该模型的ID是由Bluetooth SIG规定并采用的,长度为16bits;例如下表所示的其中一些SIG Model:
Model Name | SIG Model ID |
---|---|
Configuration Server | 0x0000 |
Configuration Client | 0x0001 |
Health Server | 0x0002 |
Health Client | 0x0003 |
以上的模型ID都可以在Bluetooth官网中找到;
Vendor Model ID
Field | Size(octets) |
---|---|
16-bit Company Identifier | 2 |
16-bit vendor-assigned model identifier | 2 |
其中,公司ID则是由Bluetooth SIG给各个公司分配的一个ID;如果你问:“为啥我找不到我们公司的ID?”
这个是要钱买的,并不是免费给的一个ID;但是,Vendor-assigned model identifier这个ID可以随便整;由上表我们可以知道,Vendor Model ID则是32bits,由Company ID + Vendor-Assigned Model ID组成;例如:“Company ID为0x0059,而Vendor-Assigned Model ID为0x4858,则该Vendor Model ID就为0x00594858”
同理,操作码也分SIG操作码和Vendor操作码,它们的区别如下表所示:
Opcode Format | Notes |
---|---|
0xxxxxxx (excluding 01111111) | 0x0000 |
01111111 | Reserved for Future Use |
10xxxxxx xxxxxxxx | 2-octet Opcodes |
11xxxxxx zzzzzzzz | 3-octet Opcodes |
由上表可知:
其中,1个字节和2个字节的Opcode则已经被Bluetooth SIG占用并 “安排” 的明明白白了,给Vendor Opcode用的仅剩下3个字节类型的Opcode了;例如:“company identifier为0x0059,而manufacturer-specific opcode为0x65,那么Vendor Opcode就为0xE5 0x59 0x00”;
何为消息呢?即Mesh网络中用于通讯时的数据帧;不同的模型就有不同的消息,但其基本的数据帧格式是基本一致的,即Opcode + Parameters + additional features;,这也认为Opcode也是Message中一部分;
Opcode
至于操作码,如上的Opcode所述;Vendor操作码为3个字节,而SIG操作码则为1个字节或者2个字节
Parameters
该变量就是表示指定模型所给携带的有效载荷;至于,要不要携带额外的其他内容则由用户或者模型定义;如Generic OnOff Model除了有效的载荷0或1之外,还定义了时间相关的内容,如什么时候发以及持续多长时间
至于,具体有哪些消息,不管是什么模型,基本上分为以下几种:
SET
该消息主要用于设置服务端模型(Server Model),如 “控制某个节点的On或者Off”;但是,该消息又分为应答和不应答两种;如果是应答,当节点收到该SET消息之后,就会应答消息发送方,否则不做任何应答
GET
该消息用于获取服务端模型(Server Model)的值/内容,如 “某个节点的On或者Off的状态” 或者 “具体的数据内容”,是一个天生自带应答的消息
STATUS
该消息一般返回设置的状态、当前的状态或者数据内容给对端节点,多于配置某个参数之后,返回该消息通知对端节点你的配置已生效,此时携带的内容较少;但是,如果是接收到获取数据内容的GET消息时,该消息返回的内容就会较多,如Config Composition Data Status
至此,Vendor Model的相关内容就讲解完毕,相对来说比较简单;后面小编会结合该篇章的内容和大家最喜欢的代码,创建一个红旭的Vendor Model。