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

 未完待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM