蓝牙学习之发送 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()。

相关推荐
2501_945318491 天前
备考方案:针对数据分析师的知识结构,制定攻克赛一认证的最优学习路径
学习·百度
2301_792674861 天前
java学习day29(juc)
java·开发语言·学习
qq_571099351 天前
学习周报四十
学习
瑶光守护者1 天前
【一文读懂】OpenClaw系统架构分析:自主人工智能智能体的范式迁移与技术底座分析
人工智能·笔记·学习·系统架构·边缘计算·openclaw
炽烈小老头1 天前
【每天学习一点算法 2026/04/13】两数相除
学习·算法
_李小白1 天前
【OSG学习笔记】Day 45: osg::Camera::DrawCallback (抓取图片)
笔记·学习
青苔猿猿1 天前
OpenWebUI(20)源码学习-版本升级
人工智能·学习·ai·openwebui
不灭锦鲤1 天前
网络安全学习第166天
学习
Century_Dragon1 天前
世纪龙-驶入未来课堂:新能源汽车故障诊断虚拟实训软件助力职教
学习
Westward-sun.1 天前
OpenCV + dlib 人脸关键点检测学习笔记(68点)
人工智能·笔记·opencv·学习·计算机视觉