成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

跟著小白一起學鴻蒙--簡析藍牙協議棧(十三)

系統 OpenHarmony
在開源鴻蒙的源碼里和系統功能相關的部分大多都放在foundation這個文件夾里,而通訊相關的部分則是在communication這個文件夾內。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

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

在《#跟著小白一起學鴻蒙# [八] 藍牙應用》我們熟悉了如何在開源鴻蒙開發藍牙應用。在《#跟著小白一起學鴻蒙# [十一] WiFi&藍牙子系統》,我們了解了各種系統內的藍牙和WiFi框架,接下來我們就深入分析下開源鴻蒙的藍牙結構和各層作用及工作內容。

概述

在開源鴻蒙的源碼里和系統功能相關的部分大多都放在foundation這個文件夾里,而通訊相關的部分則是在communication這個文件夾內。我們本篇要分析的藍牙功能就是在foundation/communication/bluetooth路徑下,具體目錄結構如下:

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

架構簡析

  • 根據目錄結構和內部文件及編譯框架總結架構如下:

#沖刺創作新星# #跟著小白一起學鴻蒙# [十三]簡析藍牙協議棧-開源基礎軟件社區

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

功能簡析

NAPI藍牙框架藍牙系統能力藍牙功能適配藍牙協議棧藍牙驅動同進程,函數調用跨進程,IPC調用通過samgr獲取服務Proxy對象利用adapter和server調用功能c接口調用dlopen加載驅動注冊,回調observer回調observer回調observer proxy + stub注冊,回調NAPI藍牙框架藍牙系統能力藍牙功能適配藍牙協議棧藍牙驅動。

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

總結

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

文章相關附件可以點擊下面的原文鏈接前往下載:

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

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

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

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2023-03-30 09:19:54

SELinux安全子系統

2022-12-05 15:02:14

鴻蒙用戶鑒權

2022-11-22 15:15:46

Wi-Fi鴻蒙

2022-11-28 15:42:39

分布式軟總線鴻蒙

2022-10-10 14:47:04

藍牙應用鴻蒙

2023-02-27 16:30:32

鴻蒙開源協議分析

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發畫布功能

2022-10-31 15:35:02

Wi-Fi藍牙子系統

2023-04-04 09:24:11

鴻蒙HiDumper

2022-08-19 19:02:20

開源鴻蒙操作系統

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-09 15:05:50

NAPI框架鴻蒙

2022-10-20 16:40:16

JS應用控制LED鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品1区 | 欧美中文字幕一区 | 综合五月婷 | 97国产精品视频 | 欧美日韩亚洲三区 | 日本在线免费看最新的电影 | 国产欧美精品一区二区色综合朱莉 | 亚洲欧洲成人 | 日韩电影免费观看中文字幕 | 激情欧美一区二区三区中文字幕 | 精品一区二区三区四区在线 | 久久草视频 | 久久av一区 | 欧美久久久久久 | 亚洲国产网址 | 久久精品国产v日韩v亚洲 | 久久一二区 | 国产激情一区二区三区 | 91网站在线看 | 久久999 | 国产一区高清 | 亚洲欧美日韩久久久 | 日韩欧美高清 | 国产在线中文字幕 | 四虎永久免费在线 | 国产在线二区 | 国产视频精品在线观看 | 亚州春色| 欧美xxxx性xxxxx高清 | 国产成人免费在线观看 | 亚洲欧美综合精品久久成人 | 婷婷丁香激情 | 日韩激情视频一区 | 欧美人人| 欧美激情欧美激情在线五月 | 久久久久久久久一区 | 中文字幕视频免费 | 99国产精品一区二区三区 | 欧美精品二区 | 91免费小视频 | 四虎在线观看 |