前面几篇文章介绍了设备管理对上层的接口和bt profile层的实现,其中涉及到蓝牙开关(初始化)、设备扫描、服务发现、安全管理、功耗管理等等模块,本文将挑选几个模块介绍bt stack层的实现,其他模块(如安全管理)将在后续专门讲述。
使能蓝牙
协议栈中使能蓝牙的入口是BTM_DeviceReset
,即打开蓝牙时会复位controller,复位之后会获取controller中的信息,然后将状态上报到上层。
其中,controller模块和HCI的内容在HCI相关的文章中介绍。
从上至下完整梳理使能蓝牙的流程如下:
设备扫描
在上层介绍设备管理时包含了设备扫描和服务发现,本文介绍设备扫描,服务发现使用的SDP,在后续介绍。
在stack层中对上提供设备扫描相关的API如下:
// inquiry/inquiry scan/page/page scan设置
tBTM_STATUS BTM_SetInquiryMode(uint8_t mode);
tBTM_STATUS BTM_SetInquiryScanType(uint16_t scan_type);
tBTM_STATUS BTM_SetPageScanType(uint16_t scan_type);
extern void BTM_WritePageTimeout(uint16_t timeout);
// 设置/获取本机可被发现及参数(inquiry scan)
tBTM_STATUS BTM_SetDiscoverability(uint16_t inq_mode, uint16_t window, uint16_t interval);
uint16_t BTM_ReadDiscoverability