BT 协议调用流程

android 4.2后的BT协议由原来的bluze更换成了brodcom的协议,代码路径:

external/bluetooth/bluedroid/

 

该协议与android framework层是通过JNI来相互调用

    android的大部份BT协议或功能都在Bluetooth.apk中实现

    源码路径:packages/apps/Bluetooth

    JNI的也在此实现,源文件是:
    jni/com_android_bluetooth_btservice_AdapterService.cpp

 

同时该协议需要用户实现一个bt_vendor_interface_t接口

const bt_vendor_interface_t BLUETOOTH_VENDOR_LIB_INTERFACE = {
    sizeof(bt_vendor_interface_t),
    bt_vnd_init,
    bt_vnd_op,
    bt_vnd_cleanup,
};

 

libbt-vendor.so在协议初始化时被加载

external/bluetooth/bluedroid/hci/src/bt_hw.c

void init_vnd_if(unsigned char *local_bdaddr)
{
    void *dlhandle;

    dlhandle = dlopen("libbt-vendor.so", RTLD_NOW);
    bt_vnd_if = (bt_vendor_interface_t *) dlsym(dlhandle, "BLUETOOTH_VENDOR_LIB_INTERFACE");
    bt_vnd_if->init(&vnd_callbacks, local_bdaddr);
}


 我们可以由上看到,在bt_vendor_interface_t 初始化时实际上传入了一个参数 vnd_callbacks,其实在bt_vendor_interface_t最终还是通过vnd_callbacks来操作设备。

从external/bluetooth/bluedroid/hci/src/bt_hw.c中发现vnd_callbacks中所定义的接口进一步调用的接口有bt_hc_cbacks与p_hci_if,这两种接口都在

external/bluetooth/bluedroid/hci/src/bt_hci_bdroid.c中定义

 

 

 

你可能感兴趣的:(BT 协议调用流程)