接第一篇
从JNI enable蓝牙,到哪里来着,尼玛好像是那个enableNative
上图就是bluetooth app 加载JNI的地方
各个模块
我们主要看看 android::register_com_android_bluetooth_btservice_AdapterService
上图就是bluetooth app 加载JNI的接口,将sMethods 的接口Load进来就是了,就是喜欢这么玩,就是要封装,java和c的桥梁什么鬼
这么多的接口够吃够用了,扫描配网连接什么的,这只是适配的模块,我们只看enableNative接口喔
sBluetoothInterface这个东东肯定是在hardware定义的 继续找到下面去,要去看看hardware了
找到了,就在hardware/include/hardware/bluetooth.h
enable蓝牙的接口放到这里来,看看实体化的函数在哪里
又找到了,这个人太会找了,就在bluetooth.c,就个是realtek改过的/system/bt,改过的bluedroid,没有改的一样是在bluetooth.c
我要看看enable 实体
是不是到这里感觉又要各种分析了,stack_manager_get_interface 感觉又是深水,事情真多,这种我怎么会
尼玛还除了这个enable函数,还看到init的函数,到底谁先运行。。。是enable先还是init先。。
这个是什么时候调用的,尼玛不知道,去看log好了
我的log放在https://raw.githubusercontent.com/Poco-Ye/rk-7.1_android-bluetooth/master/log.txt
直接打开就可以看
看来是先运行init的,在bluetooth app中AdapterService刚刚create就开始调用了,开始调用到hardware的init,可以的,比enable快
在看看hardware的enable干了什么事情
看了log之后,发现
stack_manager_get_interface()->init_stack() 就是初始化bt协议栈的系统运行osi的module,各种module_init
stack_manager_get_interface()->start_up_stack_async() 就是打开配置,抓包,打开蓝牙等运行的各个模块,开始跑起来,要做的一些事情
操,跑到default.so上面来了,就是真正的bluedroid中,这个要说又要说一年,
再看看event_start_up_stack
找到了,module_start_up的地方,
首先加载的是BTIF_CONFIG_MODULE
我们来看一眼,
整个模块就在btif_config.c,start_up好像是空的。
再看看bt_main_enable
同样的方法看BTSNOOP_MODULE和HCI_MODULE
いいね,这个有start_up了,不看了,有就是会调用,没有就不调用不运行了
这个module就是比较牛了,必须运行的,这个打开串口或者usb,加载模组patch的,必须跑,不跑模组蓝牙没用
这个就是第二部分的核心,就是这个让我们跑到vendor.so上去enable 蓝牙
这个函数中,就会开启到vendor,各种调用vendor.so的callback函数,叫作回调,回调是好东西,经常听到这个东西
1、是别人定义自己实体化吗?
2、不是定义和实体化的问题,是把我的函数指针传给其它函数去调用的时候,就叫作回调
typedef void (*hehe) (void); //这个回调函数,返回为空,参数也为空
void haha(hehe callback)
{
callback();
}
这个就是回调函数,很简单,就是函数指针当形参。所以和定义没有关系,不要想太多
这个就是Vendor了,这个枚举都是以命令的形式调用的,不用说你都猜到了,vendor有switch函数,对对对,兄dei
vendor就是以命令的形式的接口,放到下一篇去说了,太多了