自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

跟著小白一起學(xué)鴻蒙--簡析藍(lán)牙協(xié)議棧(十三)

系統(tǒng) OpenHarmony
在開源鴻蒙的源碼里和系統(tǒng)功能相關(guān)的部分大多都放在foundation這個(gè)文件夾里,而通訊相關(guān)的部分則是在communication這個(gè)文件夾內(nèi)。

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

在《#跟著小白一起學(xué)鴻蒙# [八] 藍(lán)牙應(yīng)用》我們熟悉了如何在開源鴻蒙開發(fā)藍(lán)牙應(yīng)用。在《#跟著小白一起學(xué)鴻蒙# [十一] WiFi&藍(lán)牙子系統(tǒng)》,我們了解了各種系統(tǒng)內(nèi)的藍(lán)牙和WiFi框架,接下來我們就深入分析下開源鴻蒙的藍(lán)牙結(jié)構(gòu)和各層作用及工作內(nèi)容。

概述

在開源鴻蒙的源碼里和系統(tǒng)功能相關(guān)的部分大多都放在foundation這個(gè)文件夾里,而通訊相關(guān)的部分則是在communication這個(gè)文件夾內(nèi)。我們本篇要分析的藍(lán)牙功能就是在foundation/communication/bluetooth路徑下,具體目錄結(jié)構(gòu)如下:

.
├── bundle.json
├── frameworks //框架層
├── inner
└── js
├── hisysevent.yaml
├── interfaces //接口層
├── inner_api
└── kits
├── LICENSE
├── README.md
├── README_zh.md
├── sa_profile //系統(tǒng)能力配置
├── 1130.xml
└── BUILD.gn
├── services //服務(wù)層
├── bluetooth
└── bluetooth_lite
└── test 測(cè)試代碼
├── example
├── fuzztest
├── moduletest
└── unittest

架構(gòu)簡析

  • 根據(jù)目錄結(jié)構(gòu)和內(nèi)部文件及編譯框架總結(jié)架構(gòu)如下:

#沖刺創(chuàng)作新星# #跟著小白一起學(xué)鴻蒙# [十三]簡析藍(lán)牙協(xié)議棧-開源基礎(chǔ)軟件社區(qū)

  • 接口層:對(duì)外提供js接口,采用d.ts定義,藍(lán)牙文件夾內(nèi)位置interfaces/kits/js具體存放路徑在interface/sdk-js/api/@ohos.bluetooth.d.ts;對(duì)內(nèi)提供c接口,可以供softbus,netmanager,audioframework三個(gè)子系統(tǒng)調(diào)用,藍(lán)牙文件夾內(nèi)位置interfaces/inner_api/include。
  • 框架層:分兩個(gè)子層,NAPI框架實(shí)現(xiàn)層,藍(lán)牙文件夾內(nèi)位置foundation/communication/bluetooth/frameworks/js/napi,實(shí)現(xiàn)所有js層代碼接口適配并調(diào)用innerapi的實(shí)現(xiàn);藍(lán)牙接口實(shí)現(xiàn)層,使用IPC架構(gòu)同藍(lán)牙服務(wù)層通信,將從NAPI收到的命令,或者別的子系統(tǒng)收到的命令經(jīng)由IPC架構(gòu)發(fā)送給服務(wù)層,并注冊(cè)服務(wù)層observer,收聽由服務(wù)層上報(bào)的事件。
  • 服務(wù)層:分三個(gè)子層,系統(tǒng)能力層,藍(lán)牙文件夾內(nèi)位置foundation/communication/bluetooth/services/bluetooth/server,實(shí)現(xiàn)藍(lán)牙系統(tǒng)能力服務(wù),接收從框架層經(jīng)由IPC發(fā)送下來的命令,并收聽藍(lán)牙service傳上來的消息并回傳給藍(lán)牙框架層;藍(lán)牙服務(wù)層,藍(lán)牙文件夾內(nèi)位置foundation/communication/bluetooth/services/bluetooth/service,實(shí)現(xiàn)不同藍(lán)牙能力的adapter(包括classic_adapter和ble_adapter),通過調(diào)用藍(lán)牙協(xié)議棧實(shí)現(xiàn)藍(lán)牙業(yè)務(wù)的邏輯能力;藍(lán)牙協(xié)議棧,藍(lán)牙文件夾內(nèi)位置foundation/communication/bluetooth/services/bluetooth/stack,實(shí)現(xiàn)藍(lán)牙協(xié)議包解析,打包以及藍(lán)牙協(xié)議流程的處理,實(shí)現(xiàn)藍(lán)牙host,藍(lán)牙profile以及藍(lán)牙鏈路和hci接口,最后通過使用藍(lán)牙硬件驅(qū)動(dòng)收發(fā)藍(lán)牙原始數(shù)據(jù);
  • 硬件驅(qū)動(dòng):預(yù)編譯包,通過dlopen提供hci的底層接口,注冊(cè)回調(diào)以及發(fā)送數(shù)據(jù)。

功能簡析

NAPI藍(lán)牙框架藍(lán)牙系統(tǒng)能力藍(lán)牙功能適配藍(lán)牙協(xié)議棧藍(lán)牙驅(qū)動(dòng)同進(jìn)程,函數(shù)調(diào)用跨進(jìn)程,IPC調(diào)用通過samgr獲取服務(wù)Proxy對(duì)象利用adapter和server調(diào)用功能c接口調(diào)用dlopen加載驅(qū)動(dòng)注冊(cè),回調(diào)observer回調(diào)observer回調(diào)observer proxy + stub注冊(cè),回調(diào)NAPI藍(lán)牙框架藍(lán)牙系統(tǒng)能力藍(lán)牙功能適配藍(lán)牙協(xié)議棧藍(lán)牙驅(qū)動(dòng)。

  1. NAPI功能
  • HAP應(yīng)用層通過@ohos.bluetooth.d.ts引用調(diào)用藍(lán)牙接口,藍(lán)牙接口包括bluetooth接口,BLE接口,profile接口。bluetooth接口包括經(jīng)典藍(lán)牙接口,BLE接口接口,和profile接口;目前支持的profile有A2dpSourceProfile,HandsFreeAudioGatewayProfile,HidHostProfile和PanProfile。
  • NAPI框架接口均通過DECLARE_NAPI_FUNCTION,js的回調(diào)也通過此接口經(jīng)由傳入回調(diào)函數(shù)指針實(shí)現(xiàn)。
  • NAPI層通過調(diào)用藍(lán)牙框架層的BluetoothHost實(shí)現(xiàn)功能,通過將g_bluetoothHostObserver注冊(cè)到框架層內(nèi)部實(shí)現(xiàn)來獲得消息回調(diào);同時(shí)NAPI層提供g_Observer存儲(chǔ)js層的回調(diào)函數(shù),在收到框架層的回調(diào)后在g_Observer里查找對(duì)應(yīng)的回調(diào)函數(shù)來實(shí)現(xiàn)應(yīng)用通知;此對(duì)象因?yàn)槭莔ap結(jié)構(gòu)體,所以一個(gè)應(yīng)用只能注冊(cè)一個(gè)并在應(yīng)用內(nèi)部自己處理。
  1. 藍(lán)牙框架功能
  • 藍(lán)牙框架提供cadapter接口和藍(lán)牙框架具體實(shí)現(xiàn)(藍(lán)牙NAPI層調(diào)用的BluetoothHost即在具體實(shí)現(xiàn)層)。
  • cadapter實(shí)現(xiàn)c接口,通過BluetoothHost實(shí)現(xiàn)功能,其他外部模塊均通過cadapter提供的c接口調(diào)用藍(lán)牙能力。
  • 藍(lán)牙框架內(nèi)部實(shí)現(xiàn)層提供接口一一對(duì)應(yīng)cadapter和NAPI接口。BluettoothHost內(nèi)部通過SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager()接口得到samgr,然后通過BLUETOOTH_HOST_SYS_ABILITY_ID標(biāo)識(shí)獲取藍(lán)牙服務(wù)對(duì)象,然后通過藍(lán)牙服務(wù)對(duì)象通過IPC接口調(diào)用藍(lán)牙服務(wù)功能。
  • 藍(lán)牙框架內(nèi)部提供RegisterObserver方式,允許其他層應(yīng)用(比如軟總線層通過調(diào)用cadapter接口GapRegisterCallbacks收聽藍(lán)牙的回調(diào)事件)收聽藍(lán)牙回調(diào)事件。
  • 藍(lán)牙框架因?yàn)槭莿?dòng)態(tài)庫實(shí)現(xiàn),所以如果有多處依賴則會(huì)生成多份實(shí)例,如NAPI和軟總線都依賴藍(lán)牙框架庫,所以在系統(tǒng)里會(huì)有兩份實(shí)例同時(shí)若產(chǎn)生藍(lán)牙通知也會(huì)有兩個(gè)進(jìn)程同時(shí)收到消息。
  1. 藍(lán)牙系統(tǒng)能力
  • 藍(lán)牙系統(tǒng)能力通過繼承SystemAbility,BluetoothHostStub兩個(gè)類實(shí)現(xiàn)藍(lán)牙服務(wù)能力并實(shí)現(xiàn)IPC進(jìn)行通信;IPC通信部分的代碼在藍(lán)牙文件夾foundation/communication/bluetooth/services/bluetooth/ipc內(nèi),提供proxy和stub實(shí)現(xiàn),即btipc_static.a靜態(tài)庫。
  • 藍(lán)牙系統(tǒng)能力可視作藍(lán)牙服務(wù)進(jìn)程,提供包括藍(lán)牙狀態(tài)機(jī),藍(lán)牙adapter(classic,ble),藍(lán)牙profile服務(wù)實(shí)例。
  • 藍(lán)牙系統(tǒng)配置在foundation/communication/bluetooth/services/bluetooth/etc/init目錄內(nèi),此部分內(nèi)容會(huì)在制作鏡像包時(shí)打包到系統(tǒng)文件內(nèi)去;在藍(lán)牙服務(wù)啟動(dòng)的時(shí)候會(huì)讀取藍(lán)牙配置(AdapterConfig::GetInstance()->Load(),ProfileConfig::GetInstance()->Load())并確定藍(lán)牙的snooplog(協(xié)議棧輸出文件)。
  • 藍(lán)牙系統(tǒng)能力內(nèi)部使用Dispatcher模型執(zhí)行任務(wù)事務(wù),在Dispatcher對(duì)象內(nèi)部它通過線程加任務(wù)隊(duì)列的方式處理多條任務(wù)命令,目前實(shí)現(xiàn)方法為但線程依次處理隊(duì)列內(nèi)的事務(wù)。
  • 藍(lán)牙系統(tǒng)能力層通過permission_utils提供應(yīng)用權(quán)限保護(hù)能力,服務(wù)調(diào)用功能時(shí)首先調(diào)用PermissionUtils::VerifyXXXBluetoothPermission(XXX包括,Use,Discover,Manage,Location),然后調(diào)用AuthCenter對(duì)應(yīng)功能,最后調(diào)用PermissionHelper對(duì)應(yīng)接口確認(rèn)權(quán)限;在AuthCenter里內(nèi)部定義了g_permissionAlwaysGrant全局變量,可以方便調(diào)試時(shí)擁有所有權(quán)限。
  1. 藍(lán)牙協(xié)議棧
  • 藍(lán)牙協(xié)議棧通過c接口對(duì)藍(lán)牙服務(wù)層提供接口。
  • 藍(lán)牙協(xié)議棧內(nèi)部他提供任務(wù)隊(duì)列方式處理藍(lán)牙命令(GapRunTaskBlockProcess, GapRunTaskUnBlockProcess),分別對(duì)于藍(lán)牙協(xié)議棧同步接口和異步接口。
  • 藍(lán)牙協(xié)議棧內(nèi)部也有層級(jí),對(duì)上的是gap,中間是btm,對(duì)下的是hci,中間部分和其他藍(lán)牙協(xié)議站定義的內(nèi)容一致,如:att,avctp,avdtp,l2cap,rfcomm,sdp,smp。
  • HCI層它通過g_hdiLib加載藍(lán)牙驅(qū)動(dòng)庫libbluetooth_hdi_adapter.so,并通過加載藍(lán)牙驅(qū)動(dòng)接口(HdiInit,HdiSendHciPacket,HdiClose)實(shí)現(xiàn)藍(lán)牙數(shù)據(jù)發(fā)送,藍(lán)牙數(shù)據(jù)接收(g_hdiCallacks)。

總結(jié)

  1. 藍(lán)牙服務(wù)的結(jié)構(gòu)也是所有開源鴻蒙的結(jié)構(gòu)能力,大致流程均為:NAPI框架,系統(tǒng)服務(wù)框架,IPC框架,Observer框架,原生driver框架(其實(shí)可以采用HDF框架);
  2. 目前開源鴻蒙用的藍(lán)牙協(xié)議站不是android,bluez,btstack這三種主流藍(lán)牙協(xié)議棧,根據(jù)注釋可得其參考《BLUETOOTH SPECIFICATION Version 5.0》實(shí)現(xiàn);目前官方最新的協(xié)議棧是v5.3,參考鏈接如下:https://www.bluetooth.com/specifications/specs/core-specification-5-3/。

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載:

https://ost.51cto.com/resource/2381。

??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??。

責(zé)任編輯:jianghua 來源: 51CTO開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2023-03-30 09:19:54

SELinux安全子系統(tǒng)

2022-11-28 15:42:39

分布式軟總線鴻蒙

2022-11-22 15:15:46

Wi-Fi鴻蒙

2022-12-05 15:02:14

鴻蒙用戶鑒權(quán)

2022-10-10 14:47:04

藍(lán)牙應(yīng)用鴻蒙

2023-02-27 16:30:32

鴻蒙開源協(xié)議分析

2022-11-29 16:35:02

Tetris鴻蒙

2022-12-02 14:20:09

Tetris鴻蒙

2022-10-31 15:35:02

Wi-Fi藍(lán)牙子系統(tǒng)

2022-11-14 17:01:34

游戲開發(fā)畫布功能

2023-03-30 09:32:27

2023-04-04 09:24:11

鴻蒙HiDumper

2022-08-19 19:02:20

開源鴻蒙操作系統(tǒng)

2022-11-25 16:48:54

鴻蒙Stage HAP

2023-01-03 15:09:10

鴻蒙常用工具

2022-11-24 14:34:41

Hap程序鴻蒙

2022-12-06 15:39:16

鴻蒙主干代碼

2023-03-15 16:19:03

BinderIPC工具

2022-10-20 16:40:16

JS應(yīng)用控制LED鴻蒙

2022-10-09 15:05:50

NAPI框架鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)