安卓蓝牙启动(第二篇)

 

接第一篇

从JNI enable蓝牙,到哪里来着,尼玛好像是那个enableNative

安卓蓝牙启动(第二篇)_第1张图片

 上图就是bluetooth app 加载JNI的地方

各个模块

我们主要看看 android::register_com_android_bluetooth_btservice_AdapterService

 

安卓蓝牙启动(第二篇)_第2张图片

上图就是bluetooth app 加载JNI的接口,将sMethods 的接口Load进来就是了,就是喜欢这么玩,就是要封装,java和c的桥梁什么鬼

 

安卓蓝牙启动(第二篇)_第3张图片

这么多的接口够吃够用了,扫描配网连接什么的,这只是适配的模块,我们只看enableNative接口喔

安卓蓝牙启动(第二篇)_第4张图片

sBluetoothInterface这个东东肯定是在hardware定义的 继续找到下面去,要去看看hardware了

安卓蓝牙启动(第二篇)_第5张图片

 

找到了,就在hardware/include/hardware/bluetooth.h

enable蓝牙的接口放到这里来,看看实体化的函数在哪里

安卓蓝牙启动(第二篇)_第6张图片

 

又找到了,这个人太会找了,就在bluetooth.c,就个是realtek改过的/system/bt,改过的bluedroid,没有改的一样是在bluetooth.c

我要看看enable 实体

安卓蓝牙启动(第二篇)_第7张图片

 

是不是到这里感觉又要各种分析了,stack_manager_get_interface 感觉又是深水,事情真多,这种我怎么会

 

尼玛还除了这个enable函数,还看到init的函数,到底谁先运行。。。是enable先还是init先。。

安卓蓝牙启动(第二篇)_第8张图片

 

这个是什么时候调用的,尼玛不知道,去看log好了

我的log放在https://raw.githubusercontent.com/Poco-Ye/rk-7.1_android-bluetooth/master/log.txt

直接打开就可以看

安卓蓝牙启动(第二篇)_第9张图片

看来是先运行init的,在bluetooth app中AdapterService刚刚create就开始调用了,开始调用到hardware的init,可以的,比enable快

在看看hardware的enable干了什么事情

安卓蓝牙启动(第二篇)_第10张图片

看了log之后,发现

stack_manager_get_interface()->init_stack() 就是初始化bt协议栈的系统运行osi的module,各种module_init

stack_manager_get_interface()->start_up_stack_async() 就是打开配置,抓包,打开蓝牙等运行的各个模块,开始跑起来,要做的一些事情

操,跑到default.so上面来了,就是真正的bluedroid中,这个要说又要说一年,

安卓蓝牙启动(第二篇)_第11张图片

再看看event_start_up_stack

 

安卓蓝牙启动(第二篇)_第12张图片

 

找到了,module_start_up的地方,

首先加载的是BTIF_CONFIG_MODULE

我们来看一眼,

安卓蓝牙启动(第二篇)_第13张图片

整个模块就在btif_config.c,start_up好像是空的。

再看看bt_main_enable

安卓蓝牙启动(第二篇)_第14张图片

同样的方法看BTSNOOP_MODULE和HCI_MODULE

安卓蓝牙启动(第二篇)_第15张图片

 

いいね,这个有start_up了,不看了,有就是会调用,没有就不调用不运行了

安卓蓝牙启动(第二篇)_第16张图片

 

这个module就是比较牛了,必须运行的,这个打开串口或者usb,加载模组patch的,必须跑,不跑模组蓝牙没用

 

这个就是第二部分的核心,就是这个让我们跑到vendor.so上去enable 蓝牙

 

安卓蓝牙启动(第二篇)_第17张图片

安卓蓝牙启动(第二篇)_第18张图片

安卓蓝牙启动(第二篇)_第19张图片

 

 

这个函数中,就会开启到vendor,各种调用vendor.so的callback函数,叫作回调,回调是好东西,经常听到这个东西

1、是别人定义自己实体化吗?

2、不是定义和实体化的问题,是把我的函数指针传给其它函数去调用的时候,就叫作回调

typedef  void  (*hehe) (void);  //这个回调函数,返回为空,参数也为空

void haha(hehe  callback)

{

    callback();

这个就是回调函数,很简单,就是函数指针当形参。所以和定义没有关系,不要想太多

 

安卓蓝牙启动(第二篇)_第20张图片

 

这个就是Vendor了,这个枚举都是以命令的形式调用的,不用说你都猜到了,vendor有switch函数,对对对,兄dei

vendor就是以命令的形式的接口,放到下一篇去说了,太多了

 

 

 

 

 

 

 

 

你可能感兴趣的:(蓝牙)