概述
fluoride 協(xié)議棧在整個軟件框架中作為一個中間件的角色忍捡,向上對接APP儿子,向下對接藍牙芯片梦湘。fluoride采用C++語言實現(xiàn)税娜,與APP(Jave)通信采用JNI機制;與藍牙芯片通信使用HCI硬件接口(HCI軟件協(xié)議參考藍牙核心規(guī)范)婉徘,同時fluoride還實現(xiàn)了藍牙協(xié)議棧中的Host層漠嵌,藍牙應(yīng)用的profile咐汞,設(shè)備管理等等。
構(gòu)建角度
android 7.0之前采用make(Android.mk)方式構(gòu)建儒鹿,因效率太低引入了ninja和kati來編譯化撕,Ninja的配置文件就是Android.bp,Android系統(tǒng)使用Blueprint和Soong工具來解析Android.bp轉(zhuǎn)換生成ninja文件约炎,在當前的Android構(gòu)建系統(tǒng)中一部分采用了ninja植阴,一部分采用了make的方式。因ninja網(wǎng)上資料較多圾浅,此處不做過多介紹掠手,可自行查閱資料。
通過查看源碼中的Android.bp梳理出框架如下:
軟件角度
軟件上fluoride 分為4層:bt interface狸捕、bt application喷鸽、bt host、hci灸拍。bt interface 是fluoride最上層做祝,向framework中的bt service 提供接口,中間通過JNI實現(xiàn)java和c++的轉(zhuǎn)換鸡岗,bt interface 的實現(xiàn)主要在btif文件夾中混槐,接口聲明在include/hardware文件夾中,這一層中沒有復(fù)雜的處理邏輯轩性。application層中實現(xiàn)藍牙的各個應(yīng)用/profile声登,常見的a2dp、avrcp揣苏、hfp悯嗓、gatt等等,bt host層中實現(xiàn)host中各模塊舒岸,如l2cap、sdp芦圾、rfcomm蛾派、gap等等。hci層實現(xiàn)hci 包的拆包/組包个少,數(shù)據(jù)接收/發(fā)送洪乍。fluoride軟件架構(gòu)大致如下:
在每個模塊內(nèi)部,大多采用API+狀態(tài)機+事件處理+數(shù)據(jù)收發(fā)的框架夜焦,在后續(xù)各個模塊中將做詳細描述
接下來的一系列文章將從上至下的詳細介紹各個模塊壳澳。