蓝牙学习之Provision(7)bind (1)

在 Bluetooth Mesh 网络中,设备完成 Provisioning(配网) 后,虽然已分配了 地址(Unicast Address) 和 网络密钥(NetKey),但此时它还不能接收任何应用层命令(如开关灯、调光等),因为它的 Model 尚未绑定 AppKey。

未绑定 AppKey 的 Model 会丢弃所有应用消息,即使地址匹配!Binding(绑定)就是将一个 AppKey 与某个 Model 关联,表示该 Model 可以处理使用此 AppKey 加密的消息。

cpp 复制代码
bind_all
<0000>10:07:34:788 [INFO]:(KEYBIND)start key bind and the appkey is : 60 96 47 71 73 4f bd 76 e3 b4 05 19 d1 d9 4a 48 
<0001>10:07:34:788 [INFO]:(GATEWAY)HCI_GATEWAY_CMD_START_KEYBIND : e9 ff 0b 00 00 00 60 96 47 71 73 4f bd 76 e3 b4 05 19 d1 d9 4a 48 

为model绑定app_key。点击bind_all为model绑定app_key。
bind_all对应的命令为:HCI_CMD_GATEWAY_CTL+ HCI_GATEWAY_CMD_START_KEYBIND + fast_bind + +app_key index(2 byte)+app_key(16 bytes)。即:e9 ff + 0b + fast_bind + app_key index(2 byte)+app_key(16 bytes)。

fast_bind → 00 
app_key index(2 byte) → 00 00 
app_key(16 bytes)     → 60 96 47 71 73 4f bd 76 e3 b4 05 19 d1 d9 4a 48 

关于fast_bind标志位
fast_bind为1时:网关只会下发appkey add,被provision的设备需打开默认绑定功能(PROVISION_FLOW_SIMPLE_EN设置为1)。
fast_bind为0时:网关默认绑定全部model id,为了节省时间,用户可选择需要绑定的model id。网关端打开宏MD_BIND_WHITE_LIST_EN,需要绑定的model id详见Mesh_common.c文件中master_filter_list[],用户可根据需要自行修改。

<0002>10:07:34:868 [INFO]:(GATEWAY) gateway mesh cmd sendback src:0001 dst:0002,opcode is 0880: ff  → 在SDK里有定义:#define COMPOSITION_DATA_GET 0x0880
GATEWAY(0x0001)发送给设备(0x0002),opcode为0x0880

<0003>10:07:35:748 [INFO]:(cmd_rsp)Status Rsp______________: 02 00 01 00 02 00 11 02  01 00 33 33 69 00 07 00  00 00 0c 01 00 00 02 00  03 00 00 10 02 10 04 10 06 10 07 10 00 13 01 13  03 13 04 13 11 02 00 00  00 00 02 00 02 10 06 13  

02 00:Destination Address
01 00:Source Address
02 00:unicastAddress
11 02:Company ID
01 00:Product ID
33 33:Version ID
69 00:CRPL
07 00:Features → 支持 Relay(1) + Proxy(2) + Friend(4)
-------------------element1------------------
00 00:u16 location;
0c :u8  num_s → SIG Models = 12
01 :u8  num_v → Vendor Models = 1
00 00:  0x0000 -- Configuration Server
02 00:  0x0002 -- Health Server
03 00:  0x0003 -- Health Client
00 10:  0x1000 -- Generic OnOff Server
02 10:  0x1002 -- Generic Level Server
04 10:  0x1004 -- Generic Power OnOff Server
06 10:  0x1006 -- Light Lightness Server
07 10:  0x1007 -- Light CTL Server
00 13:  0x1300 -- Scene Server
01 13:  0x1301 -- Scene Setup Server
03 13:  0x1303 -- Scheduler Server
04 13:  0x1304 -- Scheduler Setup Server
11 02 00 00: 0x00000211 → Vendor Model
-------------------element2------------------
00 00 :u16 location;
02 :u8  num_s → SIG Models = 2
00 :u8  num_v → Vendor Models = 0
02 10:  0x1002 -- Generic Level Server
06 13:  0x1306 -- Light HSL Server

关于u16 location的说明,参考下表:

✅ Location = 0x0000 的含义:

"未指定位置" 或 "位置不重要"

这是 Bluetooth SIG 定义的保留值,表示:

  • 该 Element 没有明确的物理位置;
  • 或者设备是单一功能单元(如一个灯泡),无需区分位置;
  • 或者厂商未配置具体位置信息。

Specifications | Bluetooth® Technology Website

值(Hex) 含义
0x0000 Unassigned / Not Specified(未分配)✅
0x0001 Top
0x0002 Bottom
0x0003 Front
0x0004 Back
0x0005 Left
0x0006 Right
0x0007 Primary (主单元)
0x0008 Secondary (副单元)
... (还有更多,如 Ceiling、Wall、Outdoor 等)

关于:

00 00: 0x0000 -- Configuration Server

02 00: 0x0002 -- Health Server

03 00: 0x0003 -- Health Client

相关推荐
小小de风呀3 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程3 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
Song_RsHt4 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
~kiss~7 小时前
PRO-LONG: Programmatic Memory Enables Long-Horizon Reasoning 程序式记忆赋能长程推理
学习
程序猿编码7 小时前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
ms72wx8 小时前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker
外收内放9 小时前
FastAPI猜字谜实战(4):让AI主持人开口
开发语言·python·学习·fastapi
叶子野格9 小时前
《JAVA学习:前置知识》
学习
小猪佩奇TONY9 小时前
Linux 内核学习(19) --- linux swap 机制
linux·学习·swap·kswapd
andrsted10 小时前
企业培训时间难统一?练题簿让在线免费刷题与培训考核更好安排
学习·微信小程序·小程序·学习方法·刷题