06 2018 档案
摘要:首先介绍一下和inquiry的相关的流程。 inquiry是从协议栈下发的一个HCI命令。其格式如下: 这里简单介绍下第二个参数,是inquiry的持续时间, 从上图看出 inquiry持续的时间是 设定值乘以1.28s,如果设定值是10,那么实际持续的时间就是12.8s 那么下了这个HCI命令之后
阅读全文
摘要:setting 界面开始搜索的时候,通常也会同时进行le scan,这一点在inquiry流程之命令下发中已经讲述。此篇文章主要是分析一下对于controller 搜索到的广播包的处理。这里以Android O的bluedroid的代码作为分析对象。 上面可以看出 btu_hci_msg_proce
阅读全文
摘要:Android 上面的蓝牙inquiry 是在设置界面,打开蓝牙就会自动搜索周边的蓝牙设备,其最终调用到协议栈的start_discovery接口,此篇文章分析该接口的调用流程以及与controller交互过程。 上面代码的主要做的事情是,设置相关的搜索的参数,然后调用BTA_DmSearch(&i
阅读全文
摘要:inquiry流程一般持续有12s多,当inquiry完成的时候,设备端会上报一个Event: Inquiry Complete 上来,那协议栈是如何把这个事件上传到应用层的呢?本篇文章来分析一下其具体的流程。 看btu_hcif_inquiry_comp_evt 的实现: 继续看btm_proce
阅读全文
摘要:蓝牙进程中有多个线程,其中HCI 线程是负责处理蓝牙主机端和控制器的数据处理和收发的工作。 本篇文章就是分析一下该线程的数据处理流程。 1.跟HCI相关的接口 首先看看hci的相关的接口:在hci_layer.c中: 主要是结构是:hal,packet_fragmenter以及vendor,下面看看
阅读全文
摘要:蓝牙的通信分为host和controller,host端发送数据和命令到controller,controller 上传event以及数据到host端,这要求上下两端的通信要求状态一致性。 当发生状态不一致的时候,Bluetooth进程应该有预案去重新初始化蓝牙。 这篇文章就介绍一种case,当控制
阅读全文
摘要:在蓝牙enable的过程中会进行多个线程的创建以及将线程与队列进行绑定的工作。该篇文章主要分析一下处理hci数据这个 线程。 剩下的enable 的工作会在这个函数中btu_task_start_up继续做: 这里绑定的含义就是当被绑定的队列里面有数据可以读写的时候,就会在该线程中处理,处理的函数就
阅读全文
摘要:此篇文章简单分析一下蓝牙解除配对在协议栈中的工作流程。分析的协议栈版本是Android8.0 协议栈的接口都定义在bluetooth.cc这个文件中: 这里需要注意一下bt_bdaddr_t 是一个结构体,内部一个元素是数组。 进入btif_dm_remove_bond: 这个函数btif_tran
阅读全文
摘要:BLE scan 在bluedroid的实现中,有两个接口:一个是discovery,一个是ble observe,这两者有什么区别呢? 这里追了一下代码发现,inquiry 是上层调用search 相关的接口的实现函数,ble observe 是调用GATT scan的接口的实现函数,这篇文章分析
阅读全文

浙公网安备 33010602011771号