扫描有两种类型:被动扫描(passive scanning)和主动扫描(active scanning)。在被动扫描模式下,Link Layer(链接层)只接收广播包,不发送请求包。在主动扫描下,Link Layer(链接层)除了监听广播包外,还可根据不同的封包类型要求对方发送附加信息。
1) LE_Scan_Type 扫描类型
2) LE_Scan_Interval 扫描时间间隔(扫描频率)
3) LE_Scan_Window 扫描时间窗口(扫描时间)
4) Own_Address_Type 自身设备地址类型(公有设备地址、私有地址)
5) Scanning_Filter_Policy 扫描过滤策略
LE_Scan_Type Size:1 Bytes
值 |
参数描述 |
0x00 |
Passive scanning(被动扫描),不会发送扫描请求包(SCAN_REQ)(Default) |
0x01 |
Active scanning(主动扫描),可发送扫描请求包(SCAN_REQ) |
0x02 – 0xFF |
Reserved for future use |
LE_Scan_Interval Size:2 Bytes
值 |
参数描述 |
0xXXXX |
范围:0x0004 – 0x4000 默认:0x0010(10ms) 时间 = N * 0.625ms 时间范围:2.5ms – 10.24s |
LE_Scan_Window Size:2 Bytes
值 |
参数描述 |
0xXXXX |
范围:0x0004 – 0x4000 默认:0x0010(10ms) 时间 = N * 0.625ms 时间范围:2.5ms – 10.24s |
LE_Scan_Window表示一次扫描事件里实际扫描所占用的时间,这个时间要小于等于LE_Scan_Interval,如果LE_Scan_Window等于LE_Scan_Interval,那就表示所有的时间都用于扫描。所有LE_Scan_Interval的值决定了扫描的频率,LE_Scan_Window的值决定了扫描的时间长度。
Own_Address_Type Size:1 Bytes
值 |
参数描述 |
0x00 |
Public Device Address (Default),公有设备地址 |
0x01 |
Random Device Address,私有设备地址 |
0x02 – 0xFF |
保留 |
Scanning_Filter_Policy Size:1 Bytes
值 |
参数描述 |
0x00 |
接受所有的广播包(默认) 对于定向广播包,忽略不是本设备地址的广播包。 |
0x01 |
只接受来自白名单设备的广播包(默认) 对于定向广播包,忽略不是本设备地址的广播包。 |
0x02 – 0xFF |
保留 |
对于查询来说,一个蓝牙设备总是处于可发现和不可发现这两种模式的其中一种。可发现模式又可分为:有限可发现模式(LimitedDiscoverable Mode)和普通可发现模式。
GAPRole_StartDevice(……); // 广播者、从设备角色
GAPCentralRole_StartDevice(……); // 集中器角色(主设备)
GAPObserverRole_StartDevice(……); // 发现者角色
它们最终都是通过调用:GAP_DeviceInit(……)来实现角色的初始化。
参数 |
描述 |
GAPObserverRole_StartDiscovery |
(uint8 mode, uint8 activeScan, uint8 whiteList) |
功能 |
开始扫描设备 |
参数:mode |
寻找设备的发现模式: DEVDISC_MODE_NONDISCOVERABLE: No discoverable setting DEVDISC_MODE_GENERAL: General Discoverable devices DEVDISC_MODE_LIMITED : Limited Discoverable devices DEVDISC_MODE_ALL: Not filtered |
参数:activeScan |
扫描类型:主动扫描或被动扫描 |
参数:whiteList |
是否启用白名单过滤策略 |
参数 |
描述 |
GAPObserverRole_CancelDiscovery |
|
功能 |
终止扫描 |
当收到一个新的广播包时(由于蓝牙控制器会过滤掉重复的广播包,只有不一样的广播包才会发送到Host层,所以在一次扫描过程中,Host层每收到一个广播包就是扫描到一个新的设备),TI蓝牙协议栈会以OSAL消息的形式发送一个 GAP_DEVICE_INFO_EVENT 事件。
当收到一个扫描请求回应包时,同样也会发送一个GAP_DEVICE_INFO_EVENT 事件。
GAP_DEVICE_INFO_EVENT事件所携带数据格式下表所示:
gapDeviceInfoEvent GAP_DEVICE_INFO_EVENT
参数 |
描述 |
hdr |
GSP_MSG_EVENT and status |
opcode |
GAP_DEVICE_INFO_EVENT |
eventType |
广播类型 |
addrType |
地址类型 |
Add |
地址 |
Rssi |
接收信号强度:RSSI |
dataLen |
数据长度 |
pEvtDat |
广播数据或扫描回应数据 |
当扫描过程结束时(由 TGAP_GEN_DISC_SCAN 和 TGAP_LIM_DISC_SCAN 指定的时间),会收到GAP_DEVICE_DISCOVERY_EVENT 事件。
GAP_DEVICE_DISCOVERY_EVENT事件所携带数据格式下表所示:
gapDevDiscEvent_t GAP_DEVICE_DISCOVERY_EVENT
参数 |
描述 |
Hdr |
GAP_MSG_EVENT and status |
opcode |
GAP_DEVICE_DISCOVERY_EVENT |
numDevs |
Number of devices found during scan |
pDevList |
array of device records |