概述
fluoride 协议栈在整个软件框架中作为一个中间件的角色,向上对接APP,向下对接蓝牙芯片。fluoride采用C++语言实现,与APP(Jave)通信采用JNI机制;与蓝牙芯片通信使用HCI硬件接口(HCI软件协议参考蓝牙核心规范),同时fluoride还实现了蓝牙协议栈中的Host层,蓝牙应用的profile,设备管理等等。
构建角度
android 7.0之前采用make(Android.mk)方式构建,因效率太低引入了ninja和kati来编译,Ninja的配置文件就是Android.bp,Android系统使用Blueprint和Soong工具来解析Android.bp转换生成ninja文件,在当前的Android构建系统中一部分采用了ninja,一部分采用了make的方式。因ninja网上资料较多,此处不做过多介绍,可自行查阅资料。
通过查看源码中的Android.bp梳理出框架如下:
软件角度
软件上fluoride 分为4层:bt interface、bt application、bt host、hci。interface 向上提供api供framework层的service 调用,application层中实现蓝牙的各个应用/profile,bt host层中实现host中各模块,hci层实现hci 包的拆包/组包,数据接收/发送。
在每个模块内部,大多采用API+状态机+事件处理+数据收发的框架,在后续各个模块中将做详细描述