原: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操作。

 未完待续。。。

原文地址:https://www.cnblogs.com/albert1017/p/3425793.html