android蓝牙hfp协议分析(二.1)--HF发起hfp协议连接

一般我们认为AG侧为headset服务器端,因为它提供音频,而我们的HF侧,例如车载蓝牙为客户端,那么从HF侧发起连接的时候,从上层自然是调用BluetoothHeadsetClient中的connect函数

接着我们跟着调用,来到BluetoothHeadsetClientBinder类中,这个类中继承了接口,调用里面的connect函数

在这里面我们看到最终调用到来hf状态机,通过状态机发送连接请求

来到hf状态机类中,因为我们刚开始,hfp协议是没有连接的,所以状态为Disconnected,在这里面有一个processMessage函数专门用来处理信息,因为我们发送的是connect消息,所以这里最终可以看到调用connectNative函数,也是从这里进入到c++的接口

这里是hfp client接口的对象,这个hfp client接口是在hfp协议初始化的时候得到的,由于之前介绍了很多协议的初始化,套路都是一样的,所以这里就不过多的介绍的,里面有很多成员函数,在这里我们调用的是connect函数

我们看到,在connect函数中,将要进行hfp连接的蓝牙设备放入队列中

来到btif_queue_connect函数中,我们看到实际的处理函数是queue_int_handle_evt,其中事件类型为BTIF_QUEUE_CONNECT_EVT

在queue_int_handle_evt函数中,我们的事件类型为BTIF_QUEUE_CONNECT_EVT,所以在里面调用queue_int_add函数,将进行连接的hfp设备加入队列,然后接着调用queue_int_connect_next进行进一步处理

在这里我们看到,调用了我们前面传递的连接回调函数,也就是connect_int函数

来到connect_int函数中,在里面调用到BTA_HfClientOpen函数进行连接

来到BTA_HfClientOpen函数,我们又看到了熟悉的消息发送事件,事件类型为BTA_HF_CLIENT_API_OPEN_EVT

hf client的事件最终都会调用到bta_hf_client_hdl_event函数来处理

在函数,根据事件类型,最终选择bta_hf_client_sm_execute函数执行,进入到hf client地状态机轮转

来到bta_hf_client_sm_execute函数,和我们之前大多数地状态机轮转一样,根据hf client当前地状态和接收到地事件,调用合适地处理函数执行

​​​​​​hf client状态机刚开始地状态为init

这里进入到init状态下地hf client状态表

在bta_hf_client_action数组中找到对应地处理函数

在函数地最后调用bta_hf_client_do_disc函数进行服务的搜索

在这里和我们之前的介绍的hfp协议的spec一样,进行sdp服务的搜索,搜索到hfp服务

sdp服务前先进行数据库的初始化,然后进行sdp服务搜索,同时设置了sdp服务搜索完成回调函数

当我们sdp服务搜索完成后,得到hfp服务后,调用我们之前注册的sdp服务搜索完成事件回调函数,也就是bta_hf_client_sdp_cback,在函数里面组装事件消息,然后发送消息

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
蓝牙耳机配置文件(HFP)的初始化主要通过四个模块实现:btif(Bluetooth Interface)、bta(Bluetooth Application)、btm(Bluetooth Manager)和hci(HCI,Host Controller Interface)。 首先,通过Bluetooth Interface(btif)模块接收用户指定启用蓝牙耳机以及设备之间的蓝牙连接请求。btif模块负责处理蓝牙事件,例如应用层指令和连接状态通知。在HFP初始化过程中,btif模块会与bta模块进行通信。 接下来,Bluetooth Application(bta)模块会根据用户指定的蓝牙连接请求进行相关设置和初始化。bta模块主要负责蓝牙连接请求的建立、管理和通信。在HFP初始化过程中,bta模块会与Bluetooth Manager(btm)模块进行通信。 在Bluetooth Manager(btm)模块中,会首先进行蓝牙适配器的初始化,包括蓝牙管理器和底层蓝牙适配器。然后,通过btm模块与Host Controller Interface(hci)模块进行通信。HCI模块用于和蓝牙芯片进行通信,完成蓝牙连接的建立。HCI模块与蓝牙芯片之间的通信协议包括命令和事件。 最后,在HCI模块的基础上,通过蓝牙芯片实现蓝牙连接,即通过无线通信方式与蓝牙耳机进行音频传输。这样,Android设备就成功地初始化了蓝牙耳机的HFP配置。 整个过程可以总结为:用户启用蓝牙耳机后,系统通过btif模块接收到蓝牙连接请求,然后通过bta模块进行处理,进一步与btm模块和hci模块通信,最终通过hci模块与蓝牙芯片建立蓝牙连接。通过这些步骤,Android设备与蓝牙耳机实现了HFP初始化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识分享小达人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值