概念:
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操作。
未完待續。。。