蓝牙4.0 - 扫描和发现
来源:互联网 发布:雷军编程水平 编辑:程序博客网 时间:2024/06/01 11:05
1 扫描
1.1 扫描类型
扫描有两种类型:被动扫描(passive scanning)和主动扫描(active scanning)。在被动扫描模式下,Link Layer(链接层)只接收广播包,不发送请求包。在主动扫描下,Link Layer(链接层)除了监听广播包外,还可根据不同的封包类型要求对方发送附加信息。
1.2 扫描参数设置
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
保留
1.3 可发现模式(Discoverable Mode)
对于查询来说,一个蓝牙设备总是处于可发现和不可发现这两种模式的其中一种。可发现模式又可分为:有限可发现模式(LimitedDiscoverable Mode)和普通可发现模式。
2 TI CC2540扫描的实现
2.1 角色设置
GAPRole_StartDevice(……); // 广播者、从设备角色
GAPCentralRole_StartDevice(……); // 集中器角色(主设备)
GAPObserverRole_StartDevice(……); // 发现者角色
它们最终都是通过调用:GAP_DeviceInit(……)来实现角色的初始化。
2.2 启动(终止)扫描
参数
描述
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
功能
终止扫描
2.3 扫描事件(消息通知)
2.3.1 GAP_DEVICE_INFO_EVENT
当收到一个新的广播包时(由于蓝牙控制器会过滤掉重复的广播包,只有不一样的广播包才会发送到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
广播数据或扫描回应数据
2.3.2 GAP_DEVICE_DISCOVERY_EVENT
当扫描过程结束时(由 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
- 蓝牙4.0 - 扫描和发现
- Android蓝牙扫描和连接!
- 蓝牙4.0BLE抓包(三) – 扫描请求和扫描响应
- 蓝牙4.0BLE抓包(三) – 扫描请求和扫描响应
- 蓝牙4.0BLE抓包(三) – 扫描请求和扫描响应
- 蓝牙4.0BLE抓包(三) – 扫描请求和扫描响应
- 蓝牙扫描
- Android开发--蓝牙操作 经典蓝牙 扫描和连接
- android 6.0升级 对应蓝牙扫描 和二维码扫描
- 网络扫描(主机发现和端口扫描)
- 蓝牙(WLAN)扫描发现设备在6.0以上的bug
- android 蓝牙扫描
- 蓝牙扫描枪开发
- Eddystone蓝牙扫描
- android 蓝牙重复扫描
- Android蓝牙扫描
- 蓝牙扫描startLeScan测试
- Android蓝牙ble扫描
- Adobe Illustrator CC for Mac 中文破解版下载
- 《Programming in Lua 3》读书笔记(十一)
- socket通信——通过Udp传输方式,将一段文字数据发送出去
- Jsp中response对象的所有属性详细介绍
- 2014年软件设计师考试后记
- 蓝牙4.0 - 扫描和发现
- 使用java进行文件编码转换
- Runtime.getRuntime().exec(...),参数带有空格的解决方法
- UML类图
- myeclipse去除jsp,js校验错误
- poj --1321
- Eclipse中快捷键的使用
- CMA连续物理内存用户空间映射---(二)
- 设计模式学习笔记——装饰模式