随笔分类 - Bluetooth
摘要:这篇文章简单分析一下 蓝牙音箱配对流程.现在的音箱基本都支持security simple pairing.所以这里的流程基本上就是ssp的代码流程. 源码参考的是 Android 6.0 上面的bluedroid.这里先介绍一些bluedroid定义的概率. 首先介绍一下 配对的几个状态:pair
阅读全文
摘要:在 文章中分析了Hogp的连接的流程 ,这里分析一下回连的流程. 在使用ble设备的过程中,我们发现当设备和主机配对之后,如果没有解除配对,那么即便设备和主机断开,那么也是可以重新连接而不需要重新走配对的流程,这里的分析的源代码是Android7.0 . 回连的大概的流程是:hogp 连接完成之后,
阅读全文
摘要:之前分析了a2dp profile 的初始化的流程,这篇文章分析一下,音频流在bluedroid中的处理流程。 上层的音频接口是调用a2dp hal 里面的接口来进行命令以及数据的发送的。 关于控制通道的初始化以及建立的过程,这里就不分析了,我们主要看数据的流向和处理。我们从控制通道的最后一个命令s
阅读全文
摘要:如果一个BLE设备已经与蓝牙中心设备连接上,那么当中心设备的断电重启,其依然会和配对过的BLE设备连接上,而不需要重新走配对的流程,这个过程叫做回连。 这篇文章就分析一下当中心设备断电重启之后,其与BLE设备的回连的流程。 当设备重启之后,蓝牙协议栈以及所有的上层的profile 都要重新进行初始化
阅读全文
摘要:bluedroid的alarm 机制实现在osi/osi/src/alarm.cc 中: 这里面实现了很多的接口: 我们先看一个使用alarm 的事例: 在hci_layer.cc 文件中关于hci_module_start_up 的实现: 当startup_timeout_ms 时间到达的时候,如
阅读全文
摘要:A2dp sink的初始化流程和A2dp 的初始化流程,基本一样,这里做简单分析.这里分析的android的版本是Android O. 我们先从service的启动说起吧. 下面 是启动的时候的log: 我们看看 A2dpSinkService.java的start函数的实现: 这里比较重要的地方就
阅读全文
摘要:Legacy pairing 从名字上看可以知道它是老式设备采用的配对方法。 配对的最终目的是为了生成key,key可以给链路加密,保证双方设备通信的安全性。那配对流程的讲述其实就是key的生成过程。 key的生成是经过各种各样的算法,这里不会针对具体的算法讲述,而是着重描述其流程,以及key生成过
阅读全文
摘要:之前写了一篇 bluedroid对于sdp的实现的源码分析 ,他其实对于sdp 协议本身的分析并不多,而是侧重于 sdp 处于Android bluedroid 架构中的代码流程,这篇文章,是针对SDP 的规范来整理SDP 协议本身的一些要点。 概要: 我们想一想,两个陌生的设备(之前未有过交互)如
阅读全文
摘要:Secure Simple Pairing,简称SSP,其流程主要分为六个部分: 接下来将逐个介绍这个六个部分的内容。 IO capabilities exchange 在ssp的过程中,有两个角色:“Initiator ”和“Responder ”,他们是如何确认的呢?主动发起 IO capabi
阅读全文
摘要:LMP 全称是Link Manager Protocol,我们还是要一张图,说明LMP 在哪里? 他是在HCI 以下,baseband 以上,实现在蓝牙控制器中。 按照协议规范,我们分几个部分来分别介绍LMP 下面我们先来看看 整体的介绍部分: Introduction LMP是用来控制和协商两个设
阅读全文
摘要:从蓝牙specispecification中看,基带协议主要分为8个部分来介绍的,分别是概述、物理信道、物理连接、逻辑传输、逻辑连接、封包、比特流的处理、组网行为。这里面会涉及到很多的概念,主要是在概述中解释这些概念,下面分别来介绍上面的几个部分: 概述 首先,我们先看一下基带处于蓝牙的那一层: 其
阅读全文
摘要:在上一篇文章中,我们已经分析了:a2dp初始化流程 这篇文章主要分析a2dp的连接流程,其中还是涉及到一些底层的profile以及protocol,SDP、AVDTP以及L2CAP等。 当蓝牙设备与主机配对完成之后,作为一个BREDR设备,会走SDP的流程进行服务搜索,当服务搜索完成之后,上层应用得
阅读全文
摘要:蓝牙启动的时候,会涉及到各个profile 的启动。这篇文章分析一下,蓝牙中a2dp profile的初始化流程。 我们从AdapterState.java中对于USER_TURN_ON 消息的处理说起: 继续看: 看看setProfileServiceState的实现,他就是实现一个for 循环,
阅读全文
摘要:BREDR的设备 在进行配对完成之后,进行;连接之前都要进行服务的搜索,服务搜索走的流程是SDP,这篇文章就分析一下,bluedroid中SDP的代码流程,我们从配对完成的回调函数开始分析: 我这里分析的设备是音箱,会直接走SDP的流程。也就是会执行上面的btif_dm_get_remote_ser
阅读全文
摘要:当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程。 连接是从framework到JNI,再到协议栈,我们从JNI 分析流程吧。 在HID profile中,与framework
阅读全文
摘要:蓝牙主机和蓝牙设备建立连接之后,会在l2cap 层面上建立相应的channel,这些channel 基本上是用于各种不同的profile 或者protocol 进行通信用的。 当相应的profile或者protocol 不再被使用的时候,这些建立的channel 都要被清除掉。当一条link上面没有
阅读全文
摘要:关于bta_dm_cb.p_sec_cback,这里我们之前已经分析过,他就是bte_dm_evt ,最终调用的函数btif_dm_upstreams_evt : 继续看: btif_dm_save_ble_bonding_keys 很简单,就是保存SMP相关的key 到config文件,bond_
阅读全文
摘要:进行GATT 通信,首先要打开GATT 的通道。下面我们分析BTA_GATTC_Open 这个函数: 这个函数在bta_gattc_api.c 文件中定义,这个是一个接口文件,里面没有做真正的open的动作,最终还是要将open 的事件传递到BTE层面: 接下来我们看看BTA_GATTC_API_O
阅读全文
摘要:我们先来看看在bluedroid 里面有多少地方调用到这里: 可以看出除了 它自己声明的地方,有三处 调用到这个函数。 一处是 进行discovery,一处是进行search的时候,还有一次是bta_dm_sys_hw_cback 中,这个在bta_dm_enable的时候就已经注册了,所有其实最先
阅读全文
摘要:GATT的规范阅读起来还是比较简答, 但是这样的规范在代码上是如何实现的呢?下面就分析一下bluedroid 协议栈关于GATT的代码流程。 BLE的设备都是在SMP之后进行ATT的流程的交互。从代码的实现中发现也是在SMP结束之后做回调的执行过程中进行GATT的搜索流程,SMP结束之后的回调函数是
阅读全文

浙公网安备 33010602011771号