蓝牙学习之通过OP CODE解析输入输出数据

cpp 复制代码
<0000>17:16:57:072 [INFO]:(cmd_name)cfg_cmd_sub_set
<0001>17:16:57:072 [INFO]:(common)VC send to gateway is: e8 ff 00 00 00 00 02 01 04 00 80 1d 04 00 00 10 
<0002>17:16:57:104 [INFO]:(GATEWAY) gateway mesh cmd sendback src:0001 dst:0004,opcode is 1d80: 04 00 00 10
<0003>17:16:57:169 [INFO]:(cmd_rsp)Status Rsp______________: 04 00 01 00 80 1f 00 04 00 00 00 00 10 

在telink的tool上操作cfg_cmd_sub_set后,开发板输出以上信息。下面介绍如何通过op code:1d80来查找标准的输入与输出。

1.在SDK的 app_mesh.h 文件中定义为:#define CFG_MODEL_SUB_DEL_ALL 0x1D80,在Mesh Profile v1.0.1.pdf 的 4.3.4 Messages summary 中 定义为Config Model Subscription Delete All 0x80 0x1D,两者符合。

2.定位文档

字段 大小(字节) 说明
ElementAddress 2 元素的单播地址(其他地址类型如组地址、虚拟地址不允许使用)
ModelIdentifier 2 或 4 模型标识符,分为两种: - 2字节:SIG Model ID(蓝牙技术联盟定义的标准模型) - 4字节:Vendor Model ID(厂商自定义模型)

对<0002>解析如下

字段 值 含义
src 0001 源地址:发送这条消息的节点地址是 0x0001(通常是网关或配网器)。
dst 0004 目的地址:接收这条消息的节点地址是 0x0004(目标设备)。
opcode 1d80 操作码:0x801D(注意:蓝牙Mesh通常使用小端序 Little Endian,日志显示 1d80 实际代表 Opcode 0x801D)。
payload 04 00 00 10 因为小端序,实际为 00 04 10 00,单播地址:0x0004,SIG Model ID:0x1000 在蓝牙Mesh协议中,SIG Model ID 为 1000(十六进制 0x1000) 表示一个由蓝牙技术联盟(SIG)定义的标准模型。具体来说,0x1000 对应的是 Generic OnOff Server 模型。

总结:网关(0x0001)向目标设备(0x0004)发送了一条标准指令 ,目的是清空该设备上"Generic OnOff Server "模型的订阅列表,使其不再响应相关的组播或虚拟地址消息。

3.设备答复<0003>

SDK中的定义为:#define CFG_MODEL_SUB_STATUS 0x1F80,在蓝牙标准文档里:Config Model Subscription Status 0x80 0x1F,两者符合。

字段 (Field) 长度 数据值 (Hex) 解析说明
Status 1字节 00 成功 (Success) 表示刚才的配置操作(如添加或删除订阅)已在设备端成功执行。
ElementAddress 2字节 04 00 0x0004 (小端序) 这是目标设备的单播地址。表示该状态是针对地址为 0x0004 的设备的。
Address 2字节 00 00 0x0000 (小端序) 这是被操作的地址。值为 0x0000 通常出现在"删除所有"操作中,或者表示未分配地址。
ModelIdentifier 2字节 00 00 10 0x1000 (小端序) 这是模型 ID。对应 Generic OnOff Server 模型。
相关推荐
kkkkkkkkkk_Z19 小时前
新手自学嵌入式 | 学习日记:异常与中断基础、i.MX6ULL裸机开发环境搭建、GPIO模块与点灯原理
学习
m4Rk_19 小时前
【论文阅读】Agent 记忆机制(94):MemGen——在推理过程中动态生成并织入潜在记忆
论文阅读·人工智能·学习·开源·github
晓德19 小时前
0、LLM大模型安全学习系列(启)
学习·安全
Titan202420 小时前
MySQL索引学习笔记
笔记·学习·mysql
JWASX21 小时前
Java 转 go 学习 - kitex(5)
学习·golang
AOI小白新手上路21 小时前
VDMamba·AutoDL 复现笔记 · 学习笔记
笔记·学习
~kiss~21 小时前
LangGraph ~ 为图添加跨线程持久化
学习
xianrenli381 天前
水肺潜水学习
学习
凌云若寒1 天前
BarTender提示#807错误:无法在拥有其他许可证的Licensing Service上激活节点锁定的 Professional 版许可证 的解决办法
运维·服务器·前端·学习·软件需求
爱吃苹果的日记本1 天前
离散数学第七课
学习·离散数学