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

Openharmony軟總線之連接模塊分析

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

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

軟總線介紹

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

connection模塊

connection 包含的文件類型如下:

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

 當(dāng)前設(shè)備需要支持的藍(lán)牙/wifi/網(wǎng)口通信(目前藍(lán)牙應(yīng)該沒有完善),其他網(wǎng)口和wifi 都基于tcp協(xié)議。藍(lán)牙BLE/BR 基于藍(lán)牙協(xié)議,因此當(dāng)設(shè)備A與設(shè)備B(wifi)tcp通信時(shí),設(shè)備A與設(shè)備c(藍(lán)牙)同時(shí)需要具備有藍(lán)牙通信能力。

openharmony軟總線之--連接模塊分析-鴻蒙HarmonyOS技術(shù)社區(qū)

g_connManager

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

 g_connManager 用于管理不同類型設(shè)備通信功能。其中支持的類似有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; 

 由于不同設(shè)備通信存在差異,需要通過回調(diào)來實(shí)現(xiàn)通信方式的配置,通信接口如下:

  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; 

 設(shè)備啟動(dòng)時(shí)通ConnServerInit 函數(shù)進(jìn)行初始化。ConnInitTcp、ConnInitBr、ConnInitBle 分別對(duì)應(yīng)3種通信設(shè)備類型的初始化

  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 連接設(shè)備,DisconnectDevice 斷開連接,PostBytes 發(fā)送數(shù)據(jù),GetConnectionInfo 獲取設(shè)備端信息,StartLocalListening 啟動(dòng)監(jiān)聽,StopLocalListening關(guān)閉監(jiān)聽,注意,設(shè)備通過g_tcpListener 將設(shè)備掛載到軟總線(bus)上面。每個(gè)設(shè)備需要通過不同端口建立起服務(wù)端和客服端模式,服務(wù)端用于監(jiān)聽數(shù)據(jù)請(qǐng)求。當(dāng)有數(shù)據(jù)到來時(shí),總線上面觸發(fā),經(jīng)過一系列處理,最終通過g_connManagerCb變量獲取對(duì)應(yīng)數(shù)據(jù)。

openharmony軟總線之--連接模塊分析-鴻蒙HarmonyOS技術(shù)社區(qū)
  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; 

 數(shù)據(jù)接收函數(shù)

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

軟總線通信模塊由不同模塊組合而成,如發(fā)現(xiàn),認(rèn)證等,當(dāng)認(rèn)證模塊通過connect 接入總線時(shí),數(shù)據(jù)獲取流程為:softbus-> ConnManagerRecvData-> listener.callback.OnDataReceived,可以參考總線認(rèn)證一塊測(cè)試用例。

當(dāng)然由于當(dāng)前軟總線功能不完善,部分?jǐn)?shù)據(jù)流程存在不完善的情況。

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-03-18 15:29:02

Harmony鴻蒙架構(gòu)

2021-07-02 09:16:21

鴻蒙HarmonyOS應(yīng)用

2022-03-21 15:02:05

Harmonyhiperf鴻蒙

2022-05-26 15:28:03

網(wǎng)絡(luò)管理Socket 模塊

2022-04-24 15:07:09

GPS模塊on函數(shù)鴻蒙

2021-07-01 14:21:58

鴻蒙HarmonyOS應(yīng)用

2022-08-12 19:13:07

etswifi連接操作

2022-11-28 15:42:39

分布式軟總線鴻蒙

2022-07-19 20:04:31

NAPI模塊鴻蒙

2023-04-17 16:10:14

鴻蒙藍(lán)牙

2023-04-26 15:36:51

WPA鴻蒙

2022-06-13 14:31:02

資源調(diào)度鴻蒙

2015-09-11 09:15:32

RyuSDN

2023-04-26 15:29:35

NAPI模塊鴻蒙

2022-03-03 18:39:01

Harmonyioremap鴻蒙

2022-02-09 19:25:49

Hi3861WiFi操作鴻蒙

2021-02-16 10:55:02

Nodejs模塊

2022-01-26 15:07:04

bytrace工具OpenHarmon

2022-09-06 15:25:22

Wifi設(shè)備開發(fā)

2021-08-20 14:27:50

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

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