【RealMCU】瑞昱Simple BLE Service UUID 配置说明
【RealMCU】瑞昱Simple BLE Service UUID 配置说明概述本文档详细说明在 Realtek BLE SDK 中如何将 Simple BLE Service 的 UUID 从默认的16位配置切换为128位配置。核心差异集中在simple_ble_service_tbl[]属性表中的各项配置。一、16位 UUID 配置默认方式1.1 头文件依赖16位 UUID 的具体数值通常定义在simple_ble_config.h中如GATT_UUID_SIMPLE_PROFILE、GATT_UUID_CHAR_SIMPLE_V1_READ等这些宏本质上就是纯数字如0xFFF0、0xFFF1等。1.2 Primary Service 声明服务UUID{(ATTRIB_FLAG_VALUE_INCL|ATTRIB_FLAG_LE),/* flags */{/* type_value */LO_WORD(GATT_UUID_PRIMARY_SERVICE),// 0x00HI_WORD(GATT_UUID_PRIMARY_SERVICE),// 0x28 → 组合为 0x2800LO_WORD(GATT_UUID_SIMPLE_PROFILE),// 服务UUID低字节16位数值拆分为2字节HI_WORD(GATT_UUID_SIMPLE_PROFILE)// 服务UUID高字节},UUID_16BIT_SIZE,/* bValueLen 2 */NULL,/* p_value_context */GATT_PERM_READ/* permissions */},关键点flags使用ATTRIB_FLAG_VALUE_INCL表示属性值16位UUID直接内嵌在 type_value 中type_value共4字节前2字节是 Primary Service 声明UUID0x2800后2字节是自定义服务UUIDbValueLenUUID_16BIT_SIZE即 2p_value_contextNULL因为值已内嵌在 type_value 中1.3 Characteristic 声明特征声明始终不变{ATTRIB_FLAG_VALUE_INCL,/* flags */{/* type_value */LO_WORD(GATT_UUID_CHARACTERISTIC),// 0x2803HI_WORD(GATT_UUID_CHARACTERISTIC),GATT_CHAR_PROP_READ/* characteristic properties */},1,/* bValueLen */NULL,GATT_PERM_READ/* permissions */},注意Characteristic 声明使用标准 GATT UUID0x2803始终是16位的16位和128位配置中此处完全相同。1.4 Characteristic Value 声明特征值UUID{ATTRIB_FLAG_VALUE_APPL,/* flags */{/* type_value */LO_WORD(GATT_UUID_CHAR_SIMPLE_V1_READ),// 16位特征UUID低字节HI_WORD(GATT_UUID_CHAR_SIMPLE_V1_READ)// 16位特征UUID高字节},0,/* bValueLen */NULL,GATT_PERM_READ/* permissions */},关键点flagsATTRIB_FLAG_VALUE_APPL仅此一个标志表示应用层负责读写该属性值type_value中直接填入LO_WORD/HI_WORD宏拆分的16位UUIDbValueLen0属性值由应用层动态提供不由表定义p_value_contextNULL1.5 CCCD 声明始终不变{ATTRIB_FLAG_VALUE_INCL|ATTRIB_FLAG_CCCD_APPL,/* flags */{/* type_value */LO_WORD(GATT_UUID_CHAR_CLIENT_CONFIG),// 0x2902HI_WORD(GATT_UUID_CHAR_CLIENT_CONFIG),LO_WORD(GATT_CLIENT_CHAR_CONFIG_DEFAULT),HI_WORD(GATT_CLIENT_CHAR_CONFIG_DEFAULT)},2,/* bValueLen */NULL,GATT_PERM_READ|GATT_PERM_WRITE/* permissions */},注意CCCD 使用标准 GATT 描述符UUID0x2902始终是16位的16位和128位配置中此处完全相同。二、128位 UUID 配置2.1 头文件中定义 128位 UUID 宏在simple_ble_service.h中使用宏定义 128位 UUID16字节格式为蓝牙标准的小端序#defineSIMP_UUID_BLE_BUFFER0xFB,0x34,0x9B,0x5F,0x80,0x00,0x00,0x80,#defineSIMP_READ_UUID_BLE_BUFFER0xFB,0x34,0x9B,0x5F,0x80,0x00,0x00,0x80,#defineSIMP_WRITE_UUID_BLE_BUFFER0xFB,0x34,0x9B,0x5F,0x80,0x00,0x00,0x80,#defineSIMP_NOTIFY_UUID_BLE_BUFFER0xFB,0x34,0x9B,0x5F,0x80,0x00,0x00,0x80,#defineSIMP_INDICATE_UUID_BLE_BUFFER0xFB,0x34,0x9B,0x5F,0x80,0x00,0x00,0x80,2.2 .c 文件中定义 128位 UUID 数组staticuint8_tsimple_uuid_ble[16]{SIMP_UUID_BLE_BUFFER};2.3 Primary Service 声明服务UUID → 128位{(ATTRIB_FLAG_LE|ATTRIB_FLAG_VOID),/* flags */{/* type_value */LO_WORD(GATT_UUID_PRIMARY_SERVICE),// 0x00HI_WORD(GATT_UUID_PRIMARY_SERVICE),// 0x28 → 组合为 0x2800},UUID_128BIT_SIZE,/* bValueLen 16 */simple_uuid_ble,/* p_value_context → 指向128位UUID数组 */GATT_PERM_READ/* permissions */},关键变化项目16位128位flagsATTRIB_FLAG_VALUE_INCL | ATTRIB_FLAG_LEATTRIB_FLAG_LE | ATTRIB_FLAG_VOIDtype_value4字节声明UUID 服务UUID2字节仅声明UUIDbValueLenUUID_16BIT_SIZE2UUID_128BIT_SIZE16p_value_contextNULLsimple_uuid_ble指向128位UUID数组的指针核心逻辑128位 UUID 无法像16位那样直接内嵌在type_value中type_value只有16字节空间因此改为通过p_value_context指针引用。相应地flags中去掉ATTRIB_FLAG_VALUE_INCL改用ATTRIB_FLAG_VOID。2.4 Characteristic Value 声明特征值UUID → 128位{(ATTRIB_FLAG_VALUE_APPL|ATTRIB_FLAG_UUID_128BIT),/* flags */{SIMP_READ_UUID_BLE_BUFFER},/* type_value → 128位UUID */UUID_128BIT_SIZE,/* bValueLen 16 */NULL,GATT_PERM_READ/* permissions */},关键变化项目16位128位flagsATTRIB_FLAG_VALUE_APPLATTRIB_FLAG_VALUE_APPL | ATTRIB_FLAG_UUID_128BITtype_valueLO_WORD(xx), HI_WORD(xx)2字节{SIMP_READ_UUID_BLE_BUFFER}16字节bValueLen0UUID_128BIT_SIZE16核心逻辑新增ATTRIB_FLAG_UUID_128BIT标志告知协议栈该属性使用的是128位UUID。type_value中直接展开16字节的UUID宏。三、gatt.h中关键标志位速查表以下是gatt.h中与 UUID 配置最相关的宏定义3.1 ATTRIB_FLAG 标志位宏定义值含义ATTRIB_FLAG_VOID0x0000属性值由p_value_context指向且不内嵌16位UUIDvalue_len需设为实际长度ATTRIB_FLAG_UUID_128BIT0x0001属性使用128位 UUID16字节ATTRIB_FLAG_VALUE_INCL0x0002属性值16位UUID直接内嵌在type_value字段中ATTRIB_FLAG_VALUE_APPL0x0004应用层负责提供该属性的读写值ATTRIB_FLAG_ASCII_Z0x0008属性值为 ASCII-Z 字符串ATTRIB_FLAG_CCCD_APPL0x0010应用层接收 CCCD 值变更通知ATTRIB_FLAG_CCCD_NO_FILTER0x0020CCCD 被写入时无条件通知应用层ATTRIB_FLAG_LE0x0800用于 Primary Service 声明表示 GATT over BLE3.2 UUID 尺寸宏定义值含义UUID_16BIT_SIZE216位 UUID 占用 2 字节UUID_128BIT_SIZE16128位 UUID 占用 16 字节3.3 T_ATTRIB_APPL 结构体typedefstruct{uint16_tflags;/* 属性标志位 ref GATT_ATTRIBUTE_FLAG */uint8_ttype_value[214];/* 16位UUID 内嵌值 或 128位UUID */uint16_tvalue_len;/* 值的长度 */void*p_value_context;/* 指向属性值的指针当 VALUE_INCL 和 VALUE_APPL 都未设置时使用 */uint32_tpermissions;/* 属性权限 ref GATT_ATTRIBUTE_PERMISSIONS */}T_ATTRIB_APPL;注意type_value字段固定为2 14 16字节。这个设计很巧妙16位模式前2字节放UUID后14字节可内嵌值如ATTRIB_FLAG_VALUE_INCL模式128位模式16字节全部放UUID配合ATTRIB_FLAG_UUID_128BIT标志四、完整对比总结4.1 需要修改的条目属性表条目16位配置128位配置Primary Serviceflags:VALUE_INCL | LEflags:LE | VOIDtype_value: 4字节声明服务UUIDtype_value: 2字节仅声明UUIDvalue_len:UUID_16BIT_SIZE(2)value_len:UUID_128BIT_SIZE(16)p_value_context:NULLp_value_context:simple_uuid_bleCharacteristic Valueflags:VALUE_APPLflags:VALUE_APPL | UUID_128BIT每个特征值各一个type_value:LO_WORD/HI_WORDtype_value:{SIMP_xxx_UUID_BLE_BUFFER}value_len:0value_len:UUID_128BIT_SIZE(16)4.2 不需要修改的条目属性表条目原因Characteristic 声明0x2803始终使用标准16位 GATT 声明UUIDCCCD0x2902始终使用标准16位 GATT 描述符UUIDUser Description0x2901始终使用标准16位 GATT 描述符UUID4.3 标志位组合逻辑16位模式的服务 UUID 内嵌流程 ATTRIB_FLAG_VALUE_INCL ATTRIB_FLAG_LE → 协议栈从 type_value[2..3] 读取16位服务UUID → value_len 2 128位模式的服务 UUID 指针引用流程 ATTRIB_FLAG_VOID ATTRIB_FLAG_LE → 协议栈从 p_value_context 读取128位UUID → value_len 16 16位模式的 Characteristic Value ATTRIB_FLAG_VALUE_APPL → 协议栈从 type_value[0..1] 读取16位UUID → value_len 0应用层动态提供 128位模式的 Characteristic Value ATTRIB_FLAG_VALUE_APPL ATTRIB_FLAG_UUID_128BIT → 协议栈从 type_value[0..15] 读取128位UUID → value_len 16五、从16位迁移到128位的操作步骤在simple_ble_service.h中定义5组128位UUID宏服务UUID 4个特征UUID每个16字节。在simple_ble_service.c中声明一个static uint8_t simple_uuid_ble[16]数组用于存放服务UUID。修改simple_ble_service_tbl[]中的 Primary Service 条目flags从(ATTRIB_FLAG_VALUE_INCL | ATTRIB_FLAG_LE)改为(ATTRIB_FLAG_LE | ATTRIB_FLAG_VOID)type_value中去掉服务UUID只保留LO_WORD/HI_WORD(GATT_UUID_PRIMARY_SERVICE)bValueLen从UUID_16BIT_SIZE改为UUID_128BIT_SIZEp_value_context从NULL改为simple_uuid_ble修改每个 Characteristic Value 条目共4个Read、Write、Notify、Indicateflags加上ATTRIB_FLAG_UUID_128BIT即从ATTRIB_FLAG_VALUE_APPL改为(ATTRIB_FLAG_VALUE_APPL | ATTRIB_FLAG_UUID_128BIT)type_value从LO_WORD/HI_WORD形式改为{SIMP_xxx_UUID_BLE_BUFFER}宏展开形式bValueLen从0改为UUID_128BIT_SIZECharacteristic 声明、CCCD、User Description 条目保持不变无需修改。

相关新闻

百度网盘密道转存工具2025新版功能与使用指南

百度网盘密道转存工具2025新版功能与使用指南

1. 百度网盘密道转存工具2025新版功能解析作为长期使用百度网盘的老用户,我最近测试了这款2025新版的密道转存工具,发现它在批量转存和自动化管理方面确实有不少实用改进。不同于市面上那些需要付费的第三方工具,这个版本在保持免费的同时&am…

2026/10/15 0:50:43 阅读更多 →
Style2Paints V4.5:如何用AI将草图秒变专业彩图的终极指南

Style2Paints V4.5:如何用AI将草图秒变专业彩图的终极指南

Style2Paints V4.5:如何用AI将草图秒变专业彩图的终极指南 【免费下载链接】style2paints sketch style paints :art: (TOG2018/SIGGRAPH2018ASIA) 项目地址: https://gitcode.com/gh_mirrors/st/style2paints 在数字绘画的世界里,你是否曾为繁…

2026/10/15 0:50:36 阅读更多 →
终极窗口管理方案:3分钟学会强制调整任意软件界面大小

终极窗口管理方案:3分钟学会强制调整任意软件界面大小

终极窗口管理方案:3分钟学会强制调整任意软件界面大小 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为老旧软件界面太小而烦恼吗?是否经常遇到游戏窗…

2026/10/11 15:34:41 阅读更多 →

最新新闻

SSH.NET 2023.1.0 升级连接失败的三大兼容性断层与修复

SSH.NET 2023.1.0 升级连接失败的三大兼容性断层与修复

简介:本资源为适配高安全级别Linux系统的C# SSH.NET最新稳定版类库,面向.NET平台开发者、系统运维工程师及需通过C#代码远程管理OpenEuler等现代Linux发行版的技术人员。针对旧版Renci.SshNet.dll因加密协议过时(如不支持OpenEuler 22.0.3默认…

2026/10/15 0:50:41 阅读更多 →
Flash停用后,如何用Ruffle和现代后端盘活老游戏服务器

Flash停用后,如何用Ruffle和现代后端盘活老游戏服务器

简介:这份资源围绕Flash游戏与配套服务器的通信实现展开,面向想理解网络游戏服务端架构、学习TCP编程与I/O多路复用的开发者,尤其适合具备一定C与网络基础、希望从实例入手的中级学习者。压缩包共15个文件,约649KB,以c…

2026/10/15 0:50:41 阅读更多 →
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 里的建表与增删改查手法

SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 里的建表与增删改查手法

很多人对 SQL 编辑器的使用方式,停留在把它当成高级记事本:敲完语句、点一下执行、把结果复制走,补全、格式化、事务块、执行计划这些能力一概没碰。出了慢查询或误删数据,只能靠经验硬扛。 只靠「手写 执行」的常规做法为什么不…

2026/10/15 0:50:41 阅读更多 →
Codex 让浏览器自己干活:从 MCP 接入到批量任务落地的完整链路

Codex 让浏览器自己干活:从 MCP 接入到批量任务落地的完整链路

在多数团队里,真正吃掉时间的不是写代码,而是每天重复的网页手工操作:登录后台、翻页筛选、导出报表、再粘到表格里核对,一套动作十几分钟,一天重复好几轮。 传统 Playwright 自动化脚本解决过一部分问题,但…

2026/10/15 0:50:41 阅读更多 →
股票量化软件推荐 三款工具的盈利质量研究门槛

股票量化软件推荐 三款工具的盈利质量研究门槛

股票量化软件推荐,如果准备研究企业盈利质量,可以比较BigQuant、牛股王股票和米筐研究工具。愿意自己组织财务表达与筛选过程,可考察BigQuant;希望从已有基本面因子建立规则,可核查牛股王股票;需要直接审读…

2026/10/15 0:50:41 阅读更多 →
当AI原生公司开始“吃掉”制片厂:影视工业的边界正在溶解

当AI原生公司开始“吃掉”制片厂:影视工业的边界正在溶解

🌊 专注 AI 大模型与前沿科技深度解析,习惯从工程师视角拆解技术热点,让我们一起在技术浪潮中保持清醒与好奇 🚀当AI原生公司开始“吃掉”制片厂:影视工业的边界正在溶解30 秒结论 本文判断:AI原生影视公司…

2026/10/15 0:49:41 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →