[蓝牙 Mesh & Zephyr]-[004]-Model
规范中定义了 4 个 基础 Model,如下表:
一个 Eement 可以包含多个 Model,一个 Model 有多个 State。
一个 State 有时候需要用多个 opcode(Message) 来维护,一般是 Set, Get, Status 分别使用一个opcode。
Client 是用来配置 Server 的,一般使用带 “Set” 的 Message 对 Server 的 State 进行配置,用带 “Get” 的 Message 获取对应的 State 数据。
一般 Client 发送 “xxx Set” 或者 “xxx Get” Message 给 Server 后,Server 会发送一个带 “Status” 的 Message 给 Client。
由上表可知,Mesh 中的 Configuration Server 有很多个 State,其中 GATT Proxy 又包含了一个子 “Configuration Server”,并且只有一个 State(Node Identity)。
用于配置 Configuration Server model 中的State,或者获取 State 内容。
Health Server model 只有4个State。
用于配置 Health Server model 中的State,或者获取 State 内容。
Message Name | Opcode |
---|---|
Config AppKey Add | 0x00 |
Config AppKey Delete | 0x80 0x00 |
Config AppKey Get | 0x80 0x01 |
Config AppKey List | 0x80 0x02 |
Config AppKey Status | 0x80 0x03 |
Config AppKey Update | 0x01 |
Config Beacon Get | 0x80 0x09 |
Config Beacon Set | 0x80 0x0A |
Config Beacon Status | 0x80 0x0B |
Config Composition Data Get | 0x80 0x08 |
Config Composition Data Status | 0x02 |
Config Config Model Publication Set | 0x03 |
Config Default TTL Get | 0x80 0x0C |
Config Default TTL Set | 0x80 0x0D |
Config Default TTL Status | 0x80 0x0E |
Config Friend Get | 0x80 0x0F |
Config Friend Set | 0x80 0x10 |
Config Friend Status | 0x80 0x11 |
Config GATT Proxy Get | 0x80 0x12 |
Config GATT Proxy Set | 0x80 0x13 |
Config GATT Proxy Status | 0x80 0x14 |
Config Heartbeat Publication Get | 0x80 0x38 |
Config Heartbeat Publication Set | 0x80 0x39 |
Config Heartbeat Publication Status | 0x06 |
Config Heartbeat Subscription Get | 0x80 0x3A |
Config Heartbeat Subscription Set | 0x80 0x3B |
Config Heartbeat Subscription Status | 0x80 0x3C |
Config Key Refresh Phase Get | 0x80 0x15 |
Config Key Refresh Phase Set | 0x80 0x16 |
Config Key Refresh Phase Status | 0x80 0x17 |
Config Low Power Node PollTimeout Get | 0x80 0x2D |
Config Low Power Node PollTimeout Status | 0x80 0x2E |
Config Model App Bind | 0x80 0x3D |
Config Model App Status | 0x80 0x3E |
Config Model App Unbind | 0x80 0x3F |
Config Model Publication Get | 0x80 0x18 |
Config Model Publication Status | 0x80 0x19 |
Config Model Publication Virtual Address Set | 0x80 0x1A |
Config Model Subscription Add | 0x80 0x1B |
Config Model Subscription Delete | 0x80 0x1C |
Config Model Subscription Delete All | 0x80 0x1D |
Config Model Subscription Overwrite | 0x80 0x1E |
Config Model Subscription Status | 0x80 0x1F |
Config Model Subscription Virtual Address Add | 0x80 0x20 |
Config Model Subscription Virtual Address Delete | 0x80 0x21 |
Config Model Subscription Virtual Address Overwrite | 0x80 0x22 |
Config NetKey Add | 0x80 0x40 |
Config NetKey Delete | 0x80 0x41 |
Config NetKey Get | 0x80 0x42 |
Config NetKey List | 0x80 0x43 |
Config NetKey Status | 0x80 0x44 |
Config NetKey Update | 0x80 0x45 |
Config Network Transmit Get | 0x80 0x23 |
Config Network Transmit Set | 0x80 0x24 |
Config Network Transmit Status | 0x80 0x25 |
Config Node Identity Get | 0x80 0x46 |
Config Node Identity Set | 0x80 0x47 |
Config Node Identity Status | 0x80 0x48 |
Config Node Reset | 0x80 0x49 |
Config Node Reset Status | 0x80 0x4A |
Config Relay Get | 0x80 0x26 |
Config Relay Set | 0x80 0x27 |
Config Relay Status | 0x80 0x28 |
Config SIG Model App Get | 0x80 0x4B |
Config SIG Model App List | 0x80 0x4C |
Config SIG Model Subscription Get | 0x80 0x29 |
Config SIG Model Subscription List | 0x80 0x2A |
Config Vendor Model App Get | 0x80 0x4D |
Config Vendor Model App List | 0x80 0x4E |
Config Vendor Model Subscription Get | 0x80 0x2B |
Config Vendor Model Subscription List | 0x80 0x2C |
Health Attention Get | 0x80 0x04 |
Health Attention Set | 0x80 0x05 |
Health Attention Set Unacknowledged | 0x80 0x06 |
Health Attention Status | 0x80 0x07 |
Health Current Status | 0x04 |
Health Fault Clear | 0x80 0x2F |
Health Fault Clear Unacknowledged | 0x80 0x30 |
Health Fault Get | 0x80 0x31 |
Health Fault Status | 0x05 |
Health Fault Test | 0x80 0x32 |
Health Fault Test Unacknowledged | 0x80 0x33 |
Health Period Get | 0x80 0x34 |
Health Period Set | 0x80 0x35 |
Health Period Set Unacknowledged | 0x80 0x36 |
Health Period Status | 0x80 0x37 |
Opcode 分为 1, 2, 3 字节,如下表:
Opcode Format | Notes |
---|---|
0xxxxxxx (excluding 01111111) | 1-otect Opcode |
01111111 | Reserved for Future Use |
10xxxxxx xxxxxxxx | 2-otect Opcode |
11xxxxxx zzzzzzzz zzzzzzzz | 3-otect Opcode |
1 字节的操作码是 Bluetooth SIG 定义的应用操作码(application opcodes),一共 127 个。 0x7F 保留以后扩展使用。
2 字节的操作码是 Bluetooth SIG 定义的应用操作码(application opcodes),一共 16384 个。
3 字节操作码是厂商自定义的,每个公司可以定义 64 个,使用上表中的 “x”,如果有需要,公司可以进一步使用子类操作码(在应用负载中定义?)。公司标识符是由蓝牙SIG定义的16位值,并被编码为3个八位字节操作码的第二个和第三个八位比特,使用表3.43中的“z”标识,使用第3.7.1节中定义的字节序。公司特定的操作码由与标识符关联的公司管理。
例子:厂商指定的操作码为 0x23,公司识别码为 0x0136 [6],那么 3 字节操作码为 0xE3 0x36 0x01。
每个 Model 都有唯一的识别码,Bluetooth SIG 的识别码为 16 bits (SIG Model ID),供应商的识别码为 32 bits(Vendor Model ID),SIG Model IDs 请看 4.4.5 章节。
供应商识别码包含两个部分:16 bits Bluetooth 分配的公司识别码 [6],16bits 厂商自定义 model 识别码。格式如下表:
一个 Model 可以绑定到多个 AppKey(主账号和访客的 AppKey 可以是不一样的)。
这是官方给出的双路插座设备 Model 模型。
Socket number | Model |
---|---|
1 | Health Server,Generic Power Level,Sensor Server,Configuration Server |
2 | Health Server,Generic Power Level,Sensor Server |