1. 概述

GKI以库libbt-brcm_gki.a的形式提供给Bluedroid使用

该层是一个适配层,适配了OS相关的进程、内存相关的管理,还可以用于线程间传递消息
主要通过变量gki_cb(结构体tGKI_CB)实现对进程的统一管理

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

2. 线程

2.1 主要函数

 - GKI_init()         初始化变量gki_cb
- GKI_create_task() 创建线程
- GKI_destroy_task() 销毁线程
- GKI_run() 时间相关执行函数,目前不知道有何效果

2.2 功能

使用pthread库实现线程相关功能,GKI管理三个线程

#define BTU_TASK          0
#define BTIF_TASK 1
#define A2DP_MEDIA_TASK 2

3. 事件

3.1 主要函数

 - GKI_wait()       等待事件的发生
- GKI_send_event() 向指定进程发送事件
- GKI_send_msg() 向指定进程发送buffer
- GKI_read_mbox() 从mailbox中读取buffer

3.2 功能

tGKI_CB.os.thread_evt_mutex[]   事件的互斥锁
tGKI_CB.os.thread_evt_cond[] 事件的条件变量
tGKI_CB.com.OSWaitEvt[] 表示当前进程的事件
tGKI_CB.com.OSTaskQFirst[][] 指向进程的mailbox中第一个事件
tGKI_CB.com.OSTaskQLast[][] 指向进程的mailbox中最后一个事件

首先我们要了解Posix互斥锁条件变量的使用
TIP: 值得一提的是pthread_cond_wait()函数在调用后解锁参数中的互斥锁,直至被唤醒后重新对该互斥锁加锁

通过GKI_send_event()/GKI_send_msg()发送事件/MBox事件,接收线程通过GKI_wait()可检测事件的发生,并对不同的事件进行不同的处理;对于MBox事件,需要再循环调用GKI_read_mbox()来得到MBOX Buffer
TIP: 事件可以除了可以发往其他线程,也可以发往本线程

每个线程都有4个Mailbox,16个事件有(evt: 0~15),可依次由EVENT_MASK(evt)得到

其中EVENT分类如下

 - 4个保留事件用于Mailbox消息的接收 evt: 0~3
- 4个保留事件用于超时 evt: 4~7
- 8个通用事件共APP使用 evt: 8~15

Bluedroid之GKI的更多相关文章

  1. BlueDroid代码分析之GKI

    目录 1. 概述 2. 线程 2.1 主要函数 2.2 功能 3. 事件 3.1 主要函数 3.2 功能 1. 概述 GKI以库libbt-brcm_gki.so(Static Lib?)的形式提供给 ...

  2. Android BlueDroid(一):BlueDroid概述 【转】

    转自:http://blog.csdn.net/xubin341719/article/details/40378205 版权声明:本文为博主原创文章,未经博主允许不得转载. 关键词:bluedroi ...

  3. Bluedroid: 蓝牙协议栈源码剖析

    一. 基础知识介绍 1.缩略语 BTIF: Bluetooth Interface BTU : Bluetooth Upper Layer BTM: Bluetooth Manager BTE: Bl ...

  4. 原:android4.2.2蓝牙源码阅读--bluedroid部分

    概念: GKI:统一内核接口 BTE栈: BTU栈:BTU栈开始前必须调用BTE栈初始化 代码阅读: /external/bluetooth/bluedroid/hci/:HCI library实现 ...

  5. Android BlueDroid(三):BlueDroid蓝牙开启过程enable

    关键词:bluedroid  enableNative BTIF_TASK  BTU_TASK bt_hc_work_thread set_power  preload GKI作者:xubin3417 ...

  6. Android BlueDroid(二):BlueDroid蓝牙开启过程init

    关键词:bluedroid  initNative enableNative BTIF_TASK  BTU_TASKbt_hc_work_thread set_power  preload  GKI作 ...

  7. Android BlueDroid(一):BlueDroid概述

    关键词:bluedroid bluez作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误.共同学习.共同进步!! 一.名词解释:(实用信息添加中--) BTI F: ...

  8. Android Bluetooth How To--Based on Android L Bluedroid

    Android Bluetooth How To(Based on Android L Bluedroid) 持续更新中… 1.How to enable btsnoop log? a) UI Set ...

  9. BlueDroid介绍

    目录 1. 基本结构 2. 代码区 自从Android 4.2开始,Android开始使用自己的蓝牙协议栈BlueDroid,而不是bluez BlueDroid可分为两层: - BTE: Bluet ...

随机推荐

  1. 哦?原来Python 面试题是这样的,Python面试题No19

    本面试题题库,由公号:非本科程序员 整理发布 第1题:是否遇到过python的模块间循环引用的问题,如何避免它? 这是代码结构设计的问题,模块依赖和类依赖 如果老是觉得碰到循环引用可能的原因有几点: ...

  2. Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

  3. selenium中webdriver跳转新页面后定位置新页面的两种方式

    刚刚在写Python爬虫的时候用到了selenium , 在跳转新页面时发现无法定位新页面 , 查找不到新页面的元素 一番查询后得到了解决方法 , 便记录下来备忘 , 也与大家分享 # 页面跳转代码. ...

  4. while循环中continue和break的区别

    除了满足while条件外,还有两种方法可以终止循环,它们分别是break和continue.它们唯一的区别是break跳出整个循环,直接执行下面的代码了;而continue是终止当次循环,不执行下面的 ...

  5. libevent 信号事件实现方式

    学会使用libevent,才能真正的掌握其是实现原理,我们先从一个简短的测试用例开始: #include <sys/types.h> #include <sys/stat.h> ...

  6. 893E - Counting Arrays

    E. Counting Arrays time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  7. Diycode开源项目 NotificationActivity

    1.NotificationActivity预览以及布局详解 1.1.首先看一下通知的具体页面. 1.2.然后是布局代码==>activity_fragment.xml <LinearLa ...

  8. SXCPC2018 nucoj2005 大闹上兰帝国

    超 dark van♂全背包 ref1 ref2 #include <iostream> #include <cstring> #include <cstdio> ...

  9. Selenium - WebDriver Advanced Usage

    Explicit Waits # Python from selenium import webdriver from selenium.webdriver.common.by import By f ...

  10. JavaScript: __proto__和prototype

    图来源于:http://www.cnblogs.com/smoothLily/p/4745856.html 个人的理解: 1. 所有对象都有 __proto__属性,返回该对象的原型对象.例如f1由语 ...