UUID----私有服务与公有服务

一、什么是公有UUID和私有UUID

公有 = 官方身份证,大家都认识,直接用短号码。

私有 = 自己印的身份证,先把模板交给协议栈备案(sd_ble_uuid_vs_add),然后用短号码 + 类型

二、基础UUID、服务UUID、特性UUID

三、UUID的配置

1、公有服务UUID设置

公有服务UUID:你只需要填一个 16 位数字(服务 UUID)

复制代码
BLE_UUID_BLE_ASSIGN(ble_uuid, BLE_UUID_BATTERY_SERVICE);  // 0x180F
  • 你只写了一个 16 位数字 0x180F。

  • 没有"基础 UUID"出现。

  • 特性 UUID(如 0x2A19)是在添加特性时单独填的,也是 16 位数字。

公共服务的特性UUID:

复制代码
static ret_code_t battery_level_char_add(ble_bas_t * p_bas, const ble_bas_init_t * p_bas_init)
{
    // ...
    memset(&add_char_params, 0, sizeof(add_char_params));
    add_char_params.uuid = BLE_UUID_BATTERY_LEVEL_CHAR;   // <--- 这里就是特性 UUID
    // ...
}

2、私有服务UUID设置

私有服务:你需要填一个 128 位数组(基础 UUID)+ 多个 16 位数字(服务 UUID 和特性 UUID)

步骤 1:填基础 UUID(128 位数组)

复制代码
ble_uuid128_t base_uuid = {LBS_UUID_BASE};  // 这里是一堆 0x23,0xD1,...

步骤 2:把这个 128 位数组注册给协议栈

复制代码
sd_ble_uuid_vs_add(&base_uuid, &p_lbs->uuid_type);

步骤 3:填服务 UUID(16 位数字)

复制代码
ble_uuid.uuid = LBS_UUID_SERVICE;   // 比如 0x1523
ble_uuid.type = p_lbs->uuid_type;   // 告诉协议栈用刚才那个 128 位数组去扩展

私有服务的特性UUID:

复制代码
add_char_params.uuid = LBS_UUID_LED_CHAR;   // 比如 0x1525
add_char_params.uuid_type = p_lbs->uuid_type;  // 同样用那个类型

四、解释

四、一句话总结区别

  • 公有服务:只填 16 位数字(服务 UUID 和特性 UUID),协议栈自带基础 UUID 模板。

  • 私有服务:先填一个 128 位数组(基础 UUID),再填多个 16 位数字(服务 UUID 和特性 UUID),并告诉协议栈它们属于同一个基础 UUID。

相关推荐
智者知已应修善业44 分钟前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
辰哥单片机设计2 小时前
STM32智能药盒丨2027单片机新项目
stm32·单片机·嵌入式硬件
LCG米12 小时前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
女神下凡19 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
何粥学1 天前
Vivado 2024.2 开发记录(AC820 Zynq-7020)——软件使用,点亮led灯
单片机·嵌入式硬件·zynq
Sakura_j_h_1 天前
51 单片机驱动四位数码管:动态扫描、限流电阻与消影的取舍
单片机·嵌入式硬件·51单片机·嵌入式·数码管·动态扫描·限流电阻
HANDY092001 天前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
飞凌嵌入式1 天前
千次静电放电试炼,守住飞凌嵌入式硬件可靠底线
嵌入式硬件
无敌贵点大王2 天前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件