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

Openharmony軟總線之連接模塊分析

系統
openharmony 軟總線需要將不同設備整合到一起,由于不同的設備通信存在差異,如wifi與藍牙之間通信存在差異,軟總線(bus)需要具備有處理不同類型設備之間通信功能。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

軟總線介紹

總線(Bus)是計算機各種功能部件之間傳送信息的公共通信干線,軟總線與總線協議類似存在相似的功能但又又差異。總線協議中多個設備通過公共通信干線來進行通信,設備需要具備收發數據功能。openharmony 軟總線需要將不同設備整合到一起,由于不同的設備通信存在差異,如wifi與藍牙之間通信存在差異,軟總線(bus)需要具備有處理不同類型設備之間通信功能。connect 模塊用于這種不同類型設備管理,當然也包含于不同模塊的連接管理,如認證模塊,

connection模塊

connection 包含的文件類型如下:

  1. connection 
  2.  │ 
  3.  ├── ble        #低功耗藍牙 
  4.  ├── br         #藍牙 
  5.  ├── common       
  6.  ├── interface  #外部調用接口 
  7.  ├── manager    #設備模塊接入、啟停管理 
  8.  └── tcp        #tcp  

 當前設備需要支持的藍牙/wifi/網口通信(目前藍牙應該沒有完善),其他網口和wifi 都基于tcp協議。藍牙BLE/BR 基于藍牙協議,因此當設備A與設備B(wifi)tcp通信時,設備A與設備c(藍牙)同時需要具備有藍牙通信能力。

openharmony軟總線之--連接模塊分析-鴻蒙HarmonyOS技術社區

g_connManager

  1. ConnectFuncInterface *g_connManager[CONNECT_TYPE_MAX] = {0}; 

 g_connManager 用于管理不同類型設備通信功能。其中支持的類似有CONNECT_TCP、CONNECT_BR及CONNECT_BLE。

  1. typedef enum { 
  2.     CONNECT_TCP = 1, 
  3.     CONNECT_BR, 
  4.     CONNECT_BLE, 
  5.     CONNECT_TYPE_MAX 
  6. } ConnectType; 

 由于不同設備通信存在差異,需要通過回調來實現通信方式的配置,通信接口如下:

  1. typedef struct { 
  2.     int32_t (*ConnectDevice)(const ConnectOption *option, uint32_t requestId, const ConnectResult *result); 
  3.     int32_t (*PostBytes)(uint32_t connectionId, const char *data, int32_t len, int32_t pid, int32_t flag); 
  4.     int32_t (*DisconnectDevice)(uint32_t connectionId); 
  5.     int32_t (*DisconnectDeviceNow)(const ConnectOption *option); 
  6.     int32_t (*GetConnectionInfo)(uint32_t connectionId, ConnectionInfo *info); 
  7.     int32_t (*StartLocalListening)(const LocalListenerInfo *info); 
  8.     int32_t (*StopLocalListening)(const LocalListenerInfo *info); 
  9. } ConnectFuncInterface; 

 設備啟動時通ConnServerInit 函數進行初始化。ConnInitTcp、ConnInitBr、ConnInitBle 分別對應3種通信設備類型的初始化

  1. ConnectFuncInterface *ConnInitTcp(const ConnectCallback *callback) 
  2.     if (callback == NULL) { 
  3.         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "ConnectCallback is NULL."); 
  4.         return NULL
  5.     } 
  6.     if (InitProperty() != SOFTBUS_OK) { 
  7.         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "Can not InitProperty"); 
  8.         return NULL
  9.     } 
  10.     ConnectFuncInterface *interface = SoftBusCalloc(sizeof(ConnectFuncInterface)); 
  11.     if (interface == NULL) { 
  12.         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "InitTcp failed."); 
  13.         return NULL
  14.     } 
  15.     interface->ConnectDevice = TcpConnectDevice; 
  16.     interface->DisconnectDevice = TcpDisconnectDevice; 
  17.     interface->DisconnectDeviceNow = TcpDisconnectDeviceNow; 
  18.     interface->PostBytes = TcpPostBytes; 
  19.     interface->GetConnectionInfo = TcpGetConnectionInfo; 
  20.     interface->StartLocalListening = TcpStartListening; 
  21.     interface->StopLocalListening = TcpStopListening; 
  22.     g_tcpConnCallback = callback; 
  23.  
  24.     if (g_tcpConnInfoList == NULL) { 
  25.         g_tcpConnInfoList = CreateSoftBusList(); 
  26.         if (g_tcpConnInfoList == NULL) { 
  27.             SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "Create tcpConnInfoList failed."); 
  28.             SoftBusFree(interface); 
  29.             return NULL
  30.         } 
  31.         g_tcpConnInfoList->cnt = 0; 
  32.     } 
  33.     if (g_tcpListener == NULL) { 
  34.         g_tcpListener = (SoftbusBaseListener *)SoftBusCalloc(sizeof(SoftbusBaseListener)); 
  35.         if (g_tcpListener == NULL) { 
  36.             SoftBusFree(interface); 
  37.             DestroySoftBusList(g_tcpConnInfoList); 
  38.             g_tcpConnInfoList = NULL
  39.             return NULL
  40.         } 
  41.     } 
  42.     g_tcpListener->onConnectEvent = TcpOnConnectEvent; 
  43.     g_tcpListener->onDataEvent = TcpOnDataEvent; 
  44.     return interface; 

interface 接口為tcp 通信方式的配置,ConnectDevice 連接設備,DisconnectDevice 斷開連接,PostBytes 發送數據,GetConnectionInfo 獲取設備端信息,StartLocalListening 啟動監聽,StopLocalListening關閉監聽,注意,設備通過g_tcpListener 將設備掛載到軟總線(bus)上面。每個設備需要通過不同端口建立起服務端和客服端模式,服務端用于監聽數據請求。當有數據到來時,總線上面觸發,經過一系列處理,最終通過g_connManagerCb變量獲取對應數據。

openharmony軟總線之--連接模塊分析-鴻蒙HarmonyOS技術社區
  1. typedef struct { 
  2.     void (*OnConnected)(uint32_t connectionId, const ConnectionInfo *info); 
  3.     void (*OnDisconnected)(uint32_t connectionId, const ConnectionInfo *info); 
  4.     void (*OnDataReceived)(uint32_t connectionId, ConnModule moduleId, int64_t seq, char *data, int32_t len); 
  5. } ConnectCallback; 

 數據接收函數

ConnManagerRecvData

  1. void ConnManagerRecvData(uint32_t connectionId, ConnModule moduleId, int64_t seq, char *data, int32_t len) 
  2.     ConnListenerNode listener; 
  3.     int32_t ret; 
  4.     char* pkt = NULL
  5.     int32_t pktLen; 
  6.  
  7.     if (data == NULL) { 
  8.         return
  9.     } 
  10.  
  11.     if (len <= (int32_t)sizeof(ConnPktHead)) { 
  12.         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "len %d \r\n", len); 
  13.         return
  14.     } 
  15.  
  16.     ret = GetListenerByModuleId(moduleId, &listener); 
  17.     if (ret == SOFTBUS_ERR) { 
  18.         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "GetListenerByModuleId fail moduleId %d \r\n", moduleId); 
  19.         return
  20.     } 
  21.  
  22.     pktLen = len - sizeof(ConnPktHead); 
  23.     pkt = data + sizeof(ConnPktHead); 
  24.     listener.callback.OnDataReceived(connectionId, moduleId, seq, pkt, pktLen); 
  25.     return

軟總線通信模塊由不同模塊組合而成,如發現,認證等,當認證模塊通過connect 接入總線時,數據獲取流程為:softbus-> ConnManagerRecvData-> listener.callback.OnDataReceived,可以參考總線認證一塊測試用例。

當然由于當前軟總線功能不完善,部分數據流程存在不完善的情況。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-03-18 15:29:02

Harmony鴻蒙架構

2021-07-02 09:16:21

鴻蒙HarmonyOS應用

2022-03-21 15:02:05

Harmonyhiperf鴻蒙

2022-05-26 15:28:03

網絡管理Socket 模塊

2022-04-24 15:07:09

GPS模塊on函數鴻蒙

2022-08-12 19:13:07

etswifi連接操作

2021-07-01 14:21:58

鴻蒙HarmonyOS應用

2022-11-28 15:42:39

分布式軟總線鴻蒙

2022-07-19 20:04:31

NAPI模塊鴻蒙

2023-04-17 16:10:14

鴻蒙藍牙

2023-04-26 15:36:51

WPA鴻蒙

2022-06-13 14:31:02

資源調度鴻蒙

2022-03-03 18:39:01

Harmonyioremap鴻蒙

2023-04-26 15:29:35

NAPI模塊鴻蒙

2015-09-11 09:15:32

RyuSDN

2022-01-26 15:07:04

bytrace工具OpenHarmon

2022-02-09 19:25:49

Hi3861WiFi操作鴻蒙

2022-09-06 15:25:22

Wifi設備開發

2021-02-16 10:55:02

Nodejs模塊

2023-08-17 15:01:08

ArkUI布局渲染
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人激情视频 | 日韩精品一区二区三区中文在线 | 91在线视频一区 | 国产成人精品午夜视频免费 | 日本一区视频在线观看 | 精品视频久久久久久 | 亚洲网站在线观看 | 国产精品永久免费 | 亚洲国产精品一区二区三区 | 国产精品无码专区在线观看 | 黄色一级电影免费观看 | 韩国理论电影在线 | 99热国产在线播放 | 国产91丝袜在线播放 | 久久人体 | 男人天堂视频在线观看 | www久久久 | 国产成人精品久久二区二区 | 国产精品一区二区福利视频 | 国产精品一区二区欧美 | 久久久精品一区二区三区 | 亚洲欧洲成人av每日更新 | 国产欧美在线一区二区 | 狠狠干网站| 日韩国产一区二区三区 | 日本精品免费在线观看 | 一级黄色毛片免费 | 天天操操操操操 | 日本视频在线 | 精品久久久久久亚洲国产800 | 最新黄色毛片 | a级片在线 | 国内自拍视频在线观看 | 一区二区日韩 | 蜜桃视频成人 | www.色.com| 成人av一区 | 色在线看 | 欧美不卡 | 中文字幕在线精品 | 羞羞的视频免费看 |