【BLE学习笔记】BLE协议中的16位UUID和128位UUID有啥区别?
BLE的UUID有16位和128位之分,你了解过吗?你知道它们的转换吗?
1 写在前面2 UUID的简要介绍3 UUID位数的转换1)16位UUID转128位UUID2)128位UUID转16位UUID4 知识点总结5 更多分享
1 写在前面熟悉BLE开发的技术朋友可能都一定知道UUID这个东西,它表示的一种身份标识;可能用于标识某一个服务厂商,也可能用于标识某一个具体的属性服务。
本文通过一个简短的介绍,带你了解下UUID的那些事儿,顺带给大家如何将16位的UUID与128位的UUID互相转换。
2 UUID的简要介绍蓝牙核心规范制定了两种不同的UUID,一种是基本的128位UUID,一种是代替基本UUID的16位UUID。 所有的蓝牙技术联盟定义UUID共用了一个基本的UUID:
复制0x0000xxxx-0000-1000-8000-00805F9B34FB
为了进一步简化基本UUID,每一个蓝牙技术联盟定义的属性有一个唯一的16位UUID,以代替上面的基本UUID的‘x’部分。例如,心率测量特性使用0X2A37作为它的16位UUID,因此它完整的128位UUID为:
复制0x00002A37-0000-1000-8000-00805F9B34FB
虽然蓝牙技术联盟使用相同的基本UUID,但是16位的UUID足够唯一地识别蓝牙技术联盟所定义的各种属性。蓝牙技术联盟所用的基本UUID不能用于任何定制的属性、服务和特性。对于定制的属性,必须使用另外完整的128位UUID。
SoftDevice 根据蓝牙技术联盟定义UUID类似的方式定义UUID:先增加一个特定的基本UUID,再定义一个16位的UUID(类似于一个别名),再加载在基本UUID之上。这种采用为所有的定制属性定义一个共用的基本UUID的方式使得应用变为更加简单,至少在同一服务中更是如此。
3 UUID位数的转换在实战编程中,我们常常会遇到16位UUID与128位UUID的互相转换,下面将为大家以源码的形式呈现。
**注意,下面的代码中,默认代码运行的主机的存储结构是 ** 小端存储 。
1)16位UUID转128位UUID
复制#define ATT_UUID_128_LEN 16 void ble_uuid_128_to_16(uint8_t *uuid128, uint16_t *uuid16) { uint8_t cursor = 12; /* get the UUID on 12th to 13th location of UUID */ *uuid16 = uuid128_base[cursor + 1] << 8 | uuid128_base[cursor]; }很简单,其实就是从UUID128的第12-13字节中抽出UUID16,然后再通过出参返回。
2)128位UUID转16位UUID
复制#define ATT_UUID_128_LEN 16 void ble_uuid_16_to_128(uint8_t *uuid128_base, uint8_t *uuid128, uint16_t uuid16) { uint8_t cursor = 12; /* place the UUID on 12th to 13th location of UUID */ uuid128_base[cursor] = (uint8_t)(uuid16 & 0xFF); uuid128_base[cursor + 1] = (uint8_t)((uuid16 >> 8) & 0xFF); /* update value */ memcpy(&uuid128[0], &uuid128_base[0], ATT_UUID_128_LEN); }很简单,其实就是将UUID16填充到BASE_UUID128的第12-13字节中,然后再通过出参uuid12返回。
4 知识点总结UUID这个知识点还是比较重要的,我们主要掌握以下几点:
UUID的基本含义 128位UUID与16位UUID的转换 BLE规范定义的base UUID UUID的表示方法(大、小端存储格式)[注]:本文部分描述来源于博客:
5 更多分享[架构师李肯]
架构师李肯 ( 全网同名 ),一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于主流RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、主流IoT云平台的对接、嵌入式IoT系统的架构设计等等。拥有多项IoT领域的发明专利,热衷于技术分享,有多年撰写技术博客的经验积累,连续多月获得RT-Thread官方技术社区原创技术博文优秀奖,荣获[CSDN博客专家]、[CSDN物联网领域优质创作者]、[2021年度CSDN&RT-Thread技术社区之星]、[2022年RT-Thread全球技术大会讲师]、[RT-Thread官方嵌入式开源社区认证专家]、[RT-Thread 2021年度论坛之星TOP4]、[华为云云享专家(嵌入式物联网架构设计师)]等荣誉。坚信【知识改变命运,技术改变世界】!
审核编辑:汤梓红
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:【BLE学习笔记】BLE协议中的16位UUID和128位UUID有啥区别?-ble4.0协议 https://www.yhzz.com.cn/a/5915.html