07 2018 档案

摘要:当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程。 连接是从framework到JNI,再到协议栈,我们从JNI 分析流程吧。 在HID profile中,与framework 阅读全文
posted @ 2018-07-30 20:45 雪山飞燕 阅读(5356) 评论(1) 推荐(2)
摘要:蓝牙主机和蓝牙设备建立连接之后,会在l2cap 层面上建立相应的channel,这些channel 基本上是用于各种不同的profile 或者protocol 进行通信用的。 当相应的profile或者protocol 不再被使用的时候,这些建立的channel 都要被清除掉。当一条link上面没有 阅读全文
posted @ 2018-07-27 20:06 雪山飞燕 阅读(2074) 评论(0) 推荐(1)
摘要:关于bta_dm_cb.p_sec_cback,这里我们之前已经分析过,他就是bte_dm_evt ,最终调用的函数btif_dm_upstreams_evt : 继续看: btif_dm_save_ble_bonding_keys 很简单,就是保存SMP相关的key 到config文件,bond_ 阅读全文
posted @ 2018-07-26 20:59 雪山飞燕 阅读(1629) 评论(0) 推荐(1)
摘要:进行GATT 通信,首先要打开GATT 的通道。下面我们分析BTA_GATTC_Open 这个函数: 这个函数在bta_gattc_api.c 文件中定义,这个是一个接口文件,里面没有做真正的open的动作,最终还是要将open 的事件传递到BTE层面: 接下来我们看看BTA_GATTC_API_O 阅读全文
posted @ 2018-07-26 20:57 雪山飞燕 阅读(3642) 评论(0) 推荐(0)
摘要:我们先来看看在bluedroid 里面有多少地方调用到这里: 可以看出除了 它自己声明的地方,有三处 调用到这个函数。 一处是 进行discovery,一处是进行search的时候,还有一次是bta_dm_sys_hw_cback 中,这个在bta_dm_enable的时候就已经注册了,所有其实最先 阅读全文
posted @ 2018-07-25 11:03 雪山飞燕 阅读(1595) 评论(0) 推荐(0)
摘要:GATT的规范阅读起来还是比较简答, 但是这样的规范在代码上是如何实现的呢?下面就分析一下bluedroid 协议栈关于GATT的代码流程。 BLE的设备都是在SMP之后进行ATT的流程的交互。从代码的实现中发现也是在SMP结束之后做回调的执行过程中进行GATT的搜索流程,SMP结束之后的回调函数是 阅读全文
posted @ 2018-07-20 20:51 雪山飞燕 阅读(4695) 评论(0) 推荐(0)
摘要:有时候设备驱动需要做一些与其他的设备通信的操作,但是驱动本身又不可以去实作,那这个时候就可以通过调用用户态的软件,通过这个软件和其他的设备进行通信。 那在内核态如何去调用用户态的程序呢?call_usermodehelper() 可以做到。这个linux kernel提供的一个接口,并且这个程序具体 阅读全文
posted @ 2018-07-18 17:23 雪山飞燕 阅读(2707) 评论(0) 推荐(0)
摘要:蓝牙关闭的流程比打开流程要简单,主要就是一些profile的断连以及协议栈相关结构的释放。 这里简单说一下其流程,就直接从协议栈的disable的接口说起了。 简单看下stack_manager_get_interface : 看shut_down_stack_async的具体实现: 这里就是把关闭 阅读全文
posted @ 2018-07-15 17:45 雪山飞燕 阅读(3733) 评论(0) 推荐(0)