在做蓝牙扫描时,我在gapDeviceInfoEvent_t这个结构体中最多只能获得31位数据,怎么获取剩下的数据呢
BLE的广播的内容格式普通广播
广播包 (Advertising Data)
响应包 (Scan Response),需要扫描设备,发起scan_request 才会被回应.
传统广播模式无论广播包,还是扫描响应包都是31 Byte 最长
扩展广播(>=蓝牙5.0)
广播包长度可以设置到255甚至更长
CH57* 系列的芯片都是BLE 4.2 的,这意味着不能实现5.0以后引入的扩展广播包,当然这跟本帖问题关系不太大.
像很多ble soc 一样,wch的蓝牙协议栈,主机扫描时候,为保持灵活性, 协议栈向应用层送的只是原始的广播数据, 同时广播包和扫描响应包 也是分开的.
在扫描时候,通过GAP_DEVICE_INFO_EVENT 事件,在下面结构体里面的eventype指示该包的类型
eventType的有下面类型:
其中紫色框即意味着,当前的包为 扫描回复包,其他的都是广播包
上面,还有个前提,即: 主动扫描
下面函数的第二个参数,必须为true ,才有可能拿到 扫描回复包.
GAPRole_CentralStartDiscovery( DEFAULT_DISCOVERY_MODE, DEFAULT_DISCOVERY_ACTIVE_SCAN, DEFAULT_DISCOVERY_WHITE_LIST );
扫描回复包,在中心设备中怎么读取、调用?
此结构体成员包含广播包和扫描应答包
如果需要区分广播包和扫描应答包可以根据eventtype进行区分。即上述工程师提供的讲解。