蓝牙学习之发送 Mesh Provisioning Service advertising

Mesh Provisioning Service advertising

未组网时发送的可连接的广播包,供GATT provisioner发现用。对应的payload设置API是 set_adv_provision()。数据格式详见 V1.1 spec的"7.1.2.2.1 Advertising"这个章节。 sample data详见 "8.5 Provisioning Service sample data"。

cpp 复制代码
int gatt_adv_prepare_handler(rf_packet_adv_t * p, int rand_flag){
            ...
            else if(provision_mag.gatt_mode == GATT_PROVISION_MODE){
                set_adv_provision(p);
                ret=1;
                // dispatch proxy part adv 
            }
            else if (provision_mag.gatt_mode == GATT_PROXY_MODE){
                set_adv_proxy(p);
                ret=1;
            }
}
cpp 复制代码
void set_pb_gatt_adv(u8 *p,u8 flags)
{
	PB_GATT_ADV_DAT *p_pb_adv;
	u8 temp_uuid[2]=SIG_MESH_PROVISION_SERVICE;
	p_pb_adv = (PB_GATT_ADV_DAT *)(p);
	p_pb_adv->flag_len = 0x02;
	p_pb_adv->flag_type = 0x01;
	p_pb_adv->flag_content = flags;
	p_pb_adv->uuid_len= 0x03;
	p_pb_adv->uuid_type=0x03;
	p_pb_adv->uuid_pb_uuid[0] = temp_uuid[0];//0x27
	p_pb_adv->uuid_pb_uuid[1] = temp_uuid[1];//0x18
	p_pb_adv->service_len = 0x15;//21
	p_pb_adv->service_type = 0x16;
	p_pb_adv->service_uuid[0] = temp_uuid[0];
	p_pb_adv->service_uuid[1] = temp_uuid[1];
	memcpy(p_pb_adv->service_data,prov_para.device_uuid,16);
	memcpy(p_pb_adv->oob_info , prov_para.oob_info,2);
	return;
}
void set_adv_provision(rf_packet_adv_t * p) 
{
	set_pb_gatt_adv(p->data,6);
	p->header.type = LL_TYPE_ADV_IND;
	memcpy(p->advA,tbl_mac,6);
	memcpy(p->data, p->data, 29);
	p->rf_len = 6 + 29;
	p->dma_len = p->rf_len + 2;	
	return ;
} 

使用 set_pb_gatt_adv() 来构造 PB-GATT Advertising Data

实际输出的Log如下:

复制代码
[ERR]:uuid_create_by_mac(),uuid = 30 ca e9 e9 d8 3e 4f 3c ae 51 cd ab 3a 00 02 84
[13:21:07.773]收←◆[INFO]:set_adv_provision(),p->data=02 01 06 03 03 27 18 15 16 27 18 30 ca e9 e9 d8 3e 4f 3c ae 51 cd ab 3a 00 02 84 00 00 

Flags:
02 01 06 
Service UUID List:
03 03 27 18 
Mesh Provisioning Service Data:
15 16 27 18 30 ca e9 e9 d8 3e 4f 3c ae 51 cd ab 3a 00 02 84 00 00 

✅ 0x1827 --- Mesh Provisioning Service (简单来说:0x1827 = "请把我加入网络")

中文名:Mesh 配网服务

用途:在设备未入网(unprovisioned) 时,供 GATT Provisioner(如手机 App)通过 BLE 连接后完成配网(provisioning)流程。

关键功能:

传输 Provisioning PDU(如邀请、公钥交换、认证、密钥分发等)

实现 PB-GATT(Provisioning Bearer over GATT)协议

何时使用:

设备处于出厂状态,尚未加入任何 Mesh 网络

广播中包含此 UUID(在可连接广播中),以便被发现

规范位置:Bluetooth Mesh Profile 7.1.2.2.1 Advertising

设备未组网时,会交替发送不可连接的广播包(Unprovisioned Device Beacon)和可连接的广播包(Mesh Provisioning Service advertising)。Unprovisioned Device Beacon 供 ADV-based Provisioner(如其他 Mesh 节点)发现并发起配网(PB-ADV),对应的payload设置API是 unprov_beacon_send()。Mesh Provisioning Service advertising 供GATT provisioner发现用,对应的payload设置API是 set_adv_provision()。

相关推荐
今天只学一颗糖7 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
testpassportcn8 小时前
AWS DOP-C02 認證完整解析|AWS DevOps Engineer Professional 考試
网络·学习·改行学it
游乐码11 小时前
c#变长关键字和参数默认值
学习·c#
饭碗、碗碗香12 小时前
【Python学习笔记】:Python的hashlib算法简明指南:选型、场景与示例
笔记·python·学习
魔力军12 小时前
Rust学习Day4: 所有权、引用和切片介绍
开发语言·学习·rust
wubba lubba dub dub75013 小时前
第三十六周 学习周报
学习
学编程的闹钟13 小时前
PHP字符串表示方式全解析
学习
Lbs_gemini060313 小时前
01-01-01 C++编程知识 C++入门 工具安装
c语言·开发语言·c++·学习·算法
饭碗、碗碗香14 小时前
【Python学习笔记】:Python 加密算法全景指南:原理、对比与工程化选型
笔记·python·学习
麟听科技14 小时前
HarmonyOS 6.0+ APP智能种植监测系统开发实战:农业传感器联动与AI种植指导落地
人工智能·分布式·学习·华为·harmonyos