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

簡析開源鴻蒙藍牙能力

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


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

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

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

藍牙功能是無線短距的重要能力,在工作、生活中有很多藍牙設備,比如車載藍牙設備,藍牙耳機,藍牙鍵盤。1994年由電信商愛立信發展出這個技術,最初藍牙的設計是系統創建出一個RS-232數據線的無線通信技術替代版,能夠鏈接多個設備并克服同步問題。目前藍牙技術由藍牙技術聯盟(SIG Special Interest Group)來負責維護其技術標準,IEEE曾經將藍牙技術標準化為IEEE 802.15.1,但是這個標準已經不再繼續使用。接下來我們就深入分析下開源鴻蒙的藍牙結構和各層作用及工作內容。

概述

在開源鴻蒙的源碼里和系統功能相關的部分大多都放在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的底層接口,注冊回調以及發送數據。

功能簡析

簡析開源鴻蒙藍牙能力-開源基礎軟件社區

  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/。

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

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

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

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

2010-09-10 09:52:44

開源協議棧

2022-11-08 15:43:45

開源鴻蒙藍牙協議棧

2022-11-22 15:15:46

Wi-Fi鴻蒙

2022-11-28 15:42:39

分布式軟總線鴻蒙

2024-06-20 13:00:26

2012-05-29 13:43:36

紫光清華掃描儀

2011-07-12 14:04:58

2023-06-25 12:17:44

2009-06-08 21:25:29

Java聲音技術

2010-09-08 16:25:39

SIP協議棧

2010-09-13 16:58:13

2009-08-13 15:48:57

C#指針

2022-06-04 16:11:14

勒索軟件加密Nokoyawa

2010-05-07 12:39:05

SQL Server負載均衡

2011-07-20 10:20:04

2010-06-21 14:05:08

Linux APM

2011-07-22 11:05:15

光纖通信

2010-04-12 15:39:37

無線接入技術應用

2013-12-05 10:13:25

iOS圖標

2010-04-19 12:28:57

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区三区四区在线观看 | 欧美精品在欧美一区二区少妇 | 国产精品一区二区三区在线播放 | 国产精品夜夜春夜夜爽久久电影 | 91高清在线视频 | 亚洲综合视频 | 日本欧美大片 | 丁香五月网久久综合 | 日韩中文字幕 | 亚洲高清av在线 | 欧美精品在线播放 | 岛国二区 | 99精品视频免费在线观看 | 91av免费看| 久久成人精品视频 | 一区二区三区日本 | 日韩伦理电影免费在线观看 | 91精品亚洲| 精品无码久久久久国产 | 亚洲欧美国产精品久久 | 欧洲一级黄 | 特a毛片 | 亚洲精品久久久久久久久久久久久 | 精品国产一区二区三区性色 | 日韩一区中文字幕 | 91精品国产91久久久久久最新 | 黑人精品欧美一区二区蜜桃 | 婷婷久久综合 | 亚洲大片一区 | 日日摸日日碰夜夜爽2015电影 | 国产精品成人一区 | 欧美不卡| 国产精品亚洲综合 | 免费看片在线播放 | 一级做a爰片性色毛片16美国 | 欧美日韩亚洲国产综合 | 日韩网站在线观看 | 欧美日韩高清在线一区 | 久久免费国产视频 | 日韩一区在线观看视频 | 欧美大片一区 |