概念:

GKI:统一内核接口

BTE栈:

BTU栈:BTU栈开始前必须调用BTE栈初始化

代码阅读:

/external/bluetooth/bluedroid/hci/:HCI library实现

其中/external/bluetooth/bluedroid/hci/src/bt_hw.c中加载了libbt-vendor.so库,它由/device/common/libbt里面的对应vendor生成,初始化了最重要的bt_vnd_if!

void init_vnd_if(unsigned char *local_bdaddr)
{
void *dlhandle; dlhandle = dlopen("libbt-vendor.so", RTLD_NOW);
if (!dlhandle)
{
ALOGE("!!! Failed to load libbt-vendor.so !!!");
return;
} bt_vnd_if = (bt_vendor_interface_t *) dlsym(dlhandle, "BLUETOOTH_VENDOR_LIB_INTERFACE");
if (!bt_vnd_if)
{
ALOGE("!!! Failed to get bt vendor interface !!!");
return;
} bt_vnd_if->init(&vnd_callbacks, local_bdaddr);
}

通过bt_vnd_if->init将bluedroid的回调函数传过去。

而/external/bluetooth/bluedroid/hci/src/bt_hci_bdroid.c中的bt_hc_interface_t包装了bt_vnd_if,提供给BTE调用。

/external/bluetooth/bluedroid/hci/src/bt_hw.c中定义了一些vendor调用的函数。

/external/bluetooth/bluedroid/main/bte_main.c中是BTE核心栈的初始化和关闭代码。其中的bt_hc_if就是上面说的bt_hc_interface_t。

其中的bte_main_hci_send是由上层栈调用发送msg的。

/external/bluetooth/bluedroid/btif/:

其中的/external/bluetooth/bluedroid/btif/src/bluetooth.c是硬件抽象层HAL的实现。

而/external/bluetooth/bluedroid/btif/src/btif_core.c是连接HAL与BTE的核心函数实现,在bluetooth.c中调用了其中的很多函数。

即bluetooth.c调用btif_core.c封装的BTA操作。

未完待续。。。

原:android4.2.2蓝牙源码阅读--bluedroid部分的更多相关文章

  1. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  2. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  3. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

  4. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  5. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  6. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  7. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  8. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

  9. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

随机推荐

  1. C++多线程中调用python api函数

    错误场景:一直等待全局锁. 解决方法: 一.首先定义一个封装类,主要是保证PyGILState_Ensure, PyGILState_Release配对使用,而且这个类是可以嵌套使用的. #inclu ...

  2. Java如何创建用户自定义异常?

    在Java编程中,如何创建用户自定义异常? 此示例显示如何通过扩展Exception类来创建用户定义的异常. package com.yiibai; class MyException extends ...

  3. 详解Paste deploy

    原创作品,转载注明本文出处:http://www.cnblogs.com/Security-Darren/p/4087587.html 谈到WSGI,就免不了要了解paste,其中paste depl ...

  4. IE10弹窗showModalDialog关闭之后提示SCRIPT5011:不能执行已释放的Script代码

    在Web开发中,经常使用showModalDialog弹窗 今天遇到一个小问题,IE10中弹窗关闭之后提示SCRIPT5011:不能执行已释放的Script代码 网上搜罗了一些资料,发现大多都提到对象 ...

  5. Jquery Gritter set position

    You can try... //css .gritter-center{ position:fixed; left:33%; right:33%; top:33% } //Javascript $. ...

  6. CSS3和jQuery实现的自定义美化Checkbox和Radiobox

    现在经常可以在网络上看到一些非常奇特的表单元素,例如Checkbox复选框和Radiobox单选框,浏览器默认的样式确实是太丑了,而且更让人蛋疼的是各个浏览器的样式还不统一,考虑到现在越来越多的用户使 ...

  7. Web4个实验题目DOM+JS

    实验目的: 1. 掌握DOM对象的基本语法 2. 掌握getElementById函数 3. 掌握getElementsByTagName函数 来源http://www.cnblogs.com/xia ...

  8. Android学习之——单击ActionBar实现ListView返回顶部

    不知道大家在刷微博时,有没有遇到过,刷新太多,想返回顶部看之前的微博的情况.其实,单击顶部的ActionBar能返回顶部.而不用一直向下拉. 废话不多说,讲讲Android中怎么实现这一功能. 首先, ...

  9. koa2实现拦截器进行登录前session校验

    //定义允许直接访问的url const allowpage = ['/login','/api/login'] //拦截 function localFilter(ctx) { let url = ...

  10. 常用Linq示例代码

    class Program { static void Main(string[] args) {   //1. Aggregate int[] testArr = new int[] { 1, 2, ...