原:android4.2.2蓝牙源码阅读--bluedroid部分
概念:
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部分的更多相关文章
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
- 【原】AFNetworking源码阅读(五)
[原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 【原】AFNetworking源码阅读(二)
[原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
随机推荐
- android设置主mic/副mic录音
//添加MIC设置参数 /hal/audio_extn/audio_extn.c @@ -75,6 +75,7 @@ struct audio_extn_module { bool ras_enabl ...
- 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查
第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...
- e832. 从JTabbedPane中移动卡片
To move a tab, it must first be removed and then reinserted into the tabbed pane as a new tab. Unfor ...
- DNS Bind服务配置解析
DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析: 一.DNS服务器工作模式分类: 1.主服务器:在特定区域内具有唯一 ...
- ASP.NET获取文件名,后缀名
using System.IO; //引入命名空间 string path = "text.aspx"; string pathName = Path.GetFileName(pa ...
- PHP数据库备份与恢复
先说下关于数据库备份与恢复的原理: 1.查找所有表->2.查找所有字段->3.查找所有数据->4.生成SQL 备份注意点: 2=>需要列出所有字段名,字段类型等相关信息 3=& ...
- 清除 Xcode 项目缓存
运行错误.编译错误.发布错误可尝试清除 Xcode 缓存:清除 Xcode 缓存也能减少占用磁盘空间. (1)前往文件夹(control+shift+G),删除里面的文件: /Users/用户名/Li ...
- 主调度器schedule
中断处理完毕后,系统有三种执行流向: 1)直 ...
- rlwrap安装报错You need the GNU readline 解决方法
首先大家肯定知道rlwrap是干什么的? 在linux以及unix中,sqlplus的上下左右.回退无法使用,会出现乱码情况.而rlwrap这个软件就是用来解决这个的. 这个错误曾经困扰我很久很久 ...
- Linux 目录下属性查看操作
1. 查看当前目录所有文件和文件夹的大小 方法一: $du -sh * 或 $du -h -d 0 * '-d 0' 代表查询目录的深度为0 ,也就是当前目录,'-d 3' 表示文件目录深度为3,可以 ...