1. BLE广播扫描模式基础解析
在Windows平台上进行蓝牙低功耗(BLE)设备扫描时,开发者需要理解Active和Passive两种扫描模式的核心差异。这两种模式决定了扫描设备如何与广播设备交互,以及能够获取哪些类型的广播数据。
1.1 BLE广播机制基础
BLE设备通过广播信道(37/38/39)周期性发送广播报文,这些报文分为两种类型:
- 普通广播报文:包含设备的基本信息(如设备名称、服务UUID等)
- 扫描响应报文:仅在收到扫描请求后发送的补充信息
广播间隔通常在20ms到10.24s之间,由设备厂商设定。较短的间隔能提高被发现概率但会增加功耗,这是BLE设备设计时需要权衡的关键参数。
1.2 Windows平台扫描模式实现
Windows通过BluetoothLEAdvertisementWatcher类提供BLE扫描功能,其核心模式选择通过ScanningMode属性设置:
cpp复制g_watcher.ScanningMode(BluetoothLEScanningMode::Active); // Active模式
// 或
g_watcher.ScanningMode(BluetoothLEScanningMode::Passive); // Passive模式
在底层实现上,Windows BLE API会将这些设置转换为对应的HCI命令发送给蓝牙控制器,不同模式会影响控制器对广播报文的处理方式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Active扫描模式深度剖析
2.1 技术实现原理
Active模式下,扫描设备的工作流程分为两个阶段:
- 监听广播信道上的普通广播报文
- 收到广播后立即发送扫描请求(Scan Request)
- 目标设备回应扫描响应(Scan Response)
这种模式下能获取最完整的设备信息,因为扫描响应通常包含设备名称等补充数据。从代码中可以看到,我们通过注册Received事件回调来处理收到的广播:
cpp复制g_watcher.Received(OnAdvertisementReceived);
2.2 实战代码解析
示例代码中的关键处理逻辑集中在OnAdvertisementReceived回调函数:
cpp复制
