0
点赞
收藏
分享

微信扫一扫

Android 蓝牙连接配对流程源码分析(3)-获取对端蓝牙设备io capabilities

非凡兔 2022-04-14 阅读 75
android

更多蓝牙A2dp hfp opp rfcomm pbap sdp l2cap源代码流程图,请点击此链接

Android 蓝牙配对连接源码分析文档大全

 

处理controller上报读取对端蓝牙设备版本的响应事件

在上一章中,我们不是发送命令去获取对端蓝牙设备的各种信息吗,对端蓝牙设备收到命令后,然后返回信息,controller收到消息,上报接收到的事件给host

在里面继续调用btm_read_remote_version_complete函数

这里将获取到的对端蓝牙设备的版本信息,子版本信息,生产商等信息存储到数据库中

之前有发送命令获取远端蓝牙设备的feature,那么这里controller上报对端蓝牙传递过来的消息给到host

 

 

在里面接着调用btm_read_remote_features_complete

 在这里我们获取到了对端蓝牙设备的特性,并将其存储到数据库中,但是还不够,接着发送获取对端蓝牙设备扩展特性的请求

 在这里再一次来到了btu_hcif_process_event中,这次获取的是对端蓝牙设备的扩展特性

 在里面继续调用btm_read_remote_evt_features_complete

 

在这个函数中,做了两件事,先说第一件

1.读取远端蓝牙设备扩展特性并进行保存,然后接着判断远端蓝牙设备是否还有下一个扩展特性,如果有,并且我们还有保存空间,则接着读取远端蓝牙设备的扩展特性

 

这里就是第二件事,调用btm_process_remote_ext_feature函数

2.处理从远端蓝牙设备获取到的扩展特性

 

我们看到当所有的对端蓝牙的扩展特性都获取到了以后,将它们一个接一个的给到btm_process_remote_ext_features_page函数处理

根据这些特性,可以知道host端没有保存link key,那么就需要走配对流程

 

 在蓝牙连接流程中,我们说到过会获取对端蓝牙设备的特性以及扩展特性,其中最重要的就是获取对端蓝牙设备的io capabilities,也就是对端蓝牙设备所支持的人机接口,这个和我们后面的鉴权方式息息相关,这里controller向主机获取io capabilies

 继续调用btm_io_capabilities_req

 在这个函数中,组件了一个io cap,请求类型为BTM_DEFAULT_AUTH_REQ,数据为BTM_OOB_NONE,也就是不支持使用OOB鉴权,改变配对状态为BMT_PAIR_STATE_WAIT_PIN_REQ

 在这里将io capabilities存储到对应的通道控制块

 

在上面我们不仅获取了自己的io capabilities,进行了保存,同时也获取到对端蓝牙设备的io capabilities

 在里面接着调用btm_io_capablities_rsp

 在这里,我们获取到了对端蓝牙设备的io capabilities,将它发送给到上层进行保存

 之前我们也说过,btm_cb.api.p_sp_callback就是bta_dm_sp_cback函数,根据传入的事件BTM_SP_IO_RSP_EVT,这里调用bta_dm_co_io_rsp函数

 将获取到的对方蓝牙设备的io capabilities向上层继续传递

 在这里进行赋值,保存认证请求和io capabilities

在这里就主要讲述了获取对端蓝牙设备特性,以及扩展特性,其中最重要的特性就是io capabilities,根据它来知道对方支持怎么样的人机交互接口,后面的鉴权就是根据所支持的人机交互方式选择合适的鉴权方式,今天就说到这里。

举报

相关推荐

0 条评论