协议栈和厂商代码交互
###完整的蓝牙调用图###
协议栈所在的目录是/system/bt;厂商代码所在的目录是hardware/broadcom/libbt。
这两个不同的目录反应的是协议栈和厂商固件的交互流程,它们通过hci层进行交互,在bluez时代hci层是在linux kernel实现的,bluedroid时代放在了android层实现。两者交互的主要目录是system/bt/hci。
</system/bt/hci/src/vendor.c>
static const char *VENDOR_LIBRARY_NAME = "libbt-vendor.so";
static const char *VENDOR_LIBRARY_SYMBOL_NAME = "BLUETOOTH_VENDOR_LIB_INTERFACE";
46 static bool vendor_open(
47 const uint8_t *local_bdaddr,
48 const hci_t *hci_interface) {
49 assert(lib_handle == NULL);
50 hci = hci_interface;
51
52 lib_handle = dlopen(VENDOR_LIBRARY_NAME, RTLD_NOW);
53 if (!lib_handle) {
54 LOG_ERROR("%s unable to open %s: %s", __func__, VENDOR_LIBRARY_NAME, dlerror());
55 goto error;
56 }