加入收藏
让我们做的更好!
网站公告:

 

毛带片视频在线观看-老婆主动让我添她哪里-顺从的女孩巴巴鱼 您当前所在位置:毛带片视频在线观看-老婆主动让我添她哪里-顺从的女孩巴巴鱼 > 顺从的女孩巴巴鱼 >

Openharmony柔总线之

时间:2022-01-13 13:40 来源:http://www.fu-tah.com 作者:毛带片视频在线观看-老婆主动让我添她哪里-顺从的女孩巴巴鱼 点击:

想晓畅更众内容,请访问:

51CTO和华为官方配相符共建的鸿蒙技术社区

https://harmonyos.51cto.com

柔总线介绍

总线(Bus)是计算机各栽功能部件之间传送新闻的公共通信干线,柔总线与总线制定相通存在相通的功能但又又迥异。总线制定中众个设备议决公共通信干线来进走通信,设备必要具备收发数据功能。openharmony 柔总线必要将分别设备整相符到一首,原由分别的设备通信存在迥异,如wifi与蓝牙之间通信存在迥异,柔总线(bus)必要具备有处理分别类型设备之间通信功能。connect 模块用于这栽分别类型设备管理,自然也包含于分别模块的连接管理,如认证模块,

connection模块

connection 包含的文件类型如下:

connection  │  ├── ble        #矮功耗蓝牙  ├── br         #蓝牙  ├── common        ├── interface  #表部调用接口  ├── manager    #设备模块接入、启停管理  └── tcp        #tcp  

现在设备必要声援的蓝牙/wifi/网口通信(现在蓝牙答该异国完善),其他网口和wifi 都基于tcp制定。蓝牙BLE/BR 基于蓝牙制定,所以当设备A与设备B(wifi)tcp通信时,设备A与设备c(蓝牙)同时必要具备有蓝牙通信能力。

openharmony柔总线之--连接模块分析-鸿蒙HarmonyOS技术社区 g_connManager
ConnectFuncInterface *g_connManager[CONNECT_TYPE_MAX] = {0}; 

g_connManager 用于管理分别类型设备通信功能。其中声援的相通有CONNECT_TCP、CONNECT_BR及CONNECT_BLE。

typedef enum {     CONNECT_TCP = 1,     CONNECT_BR,     CONNECT_BLE,     CONNECT_TYPE_MAX } ConnectType; 

原由分别设备通信存在迥异,必要议决回调来实现通信手段的配置,通信接口如下:

typedef struct {     int32_t (*ConnectDevice)(const ConnectOption *option, uint32_t requestId, const ConnectResult *result);     int32_t (*PostBytes)(uint32_t connectionId, const char *data, int32_t len, int32_t pid, int32_t flag);     int32_t (*DisconnectDevice)(uint32_t connectionId);     int32_t (*DisconnectDeviceNow)(const ConnectOption *option);     int32_t (*GetConnectionInfo)(uint32_t connectionId, ConnectionInfo *info);     int32_t (*StartLocalListening)(const LocalListenerInfo *info);     int32_t (*StopLocalListening)(const LocalListenerInfo *info); } ConnectFuncInterface; 

设备启动时通ConnServerInit 函数进走初首化。ConnInitTcp、ConnInitBr、ConnInitBle 别离对答3栽通信设备类型的初首化

ConnectFuncInterface *ConnInitTcp(const ConnectCallback *callback) {     if (callback == NULL) {         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "ConnectCallback is NULL.");         return NULL;     }     if (InitProperty() != SOFTBUS_OK) {         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "Can not InitProperty");         return NULL;     }     ConnectFuncInterface *interface = SoftBusCalloc(sizeof(ConnectFuncInterface));     if (interface == NULL) {         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "InitTcp failed.");         return NULL;     }     interface->ConnectDevice = TcpConnectDevice;     interface->DisconnectDevice = TcpDisconnectDevice;     interface->DisconnectDeviceNow = TcpDisconnectDeviceNow;     interface->PostBytes = TcpPostBytes;     interface->GetConnectionInfo = TcpGetConnectionInfo;     interface->StartLocalListening = TcpStartListening;     interface->StopLocalListening = TcpStopListening;     g_tcpConnCallback = callback;      if (g_tcpConnInfoList == NULL) {         g_tcpConnInfoList = CreateSoftBusList();         if (g_tcpConnInfoList == NULL) {             SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "Create tcpConnInfoList failed.");             SoftBusFree(interface);             return NULL;         }         g_tcpConnInfoList->cnt = 0;     }     if (g_tcpListener == NULL) {         g_tcpListener = (SoftbusBaseListener *)SoftBusCalloc(sizeof(SoftbusBaseListener));         if (g_tcpListener == NULL) {             SoftBusFree(interface);             DestroySoftBusList(g_tcpConnInfoList);             g_tcpConnInfoList = NULL;             return NULL;         }     }     g_tcpListener->onConnectEvent = TcpOnConnectEvent;     g_tcpListener->onDataEvent = TcpOnDataEvent;     return interface; } 

interface 接口为tcp 通信手段的配置,ConnectDevice 连接设备,DisconnectDevice 断开连接,PostBytes 发送数据,GetConnectionInfo 获取设备端新闻,StartLocalListening 启动监听,StopLocalListening关闭监听,仔细,设备议决g_tcpListener 将设备挂载到柔总线(bus)上面。每个设备必要通太甚别端口竖立首服务端和客服端模式,服务端用于监听数据乞求。当有数据到来时,总线上面触发,经过一系列处理,最后议决g_connManagerCb变量获取对答数据。

openharmony柔总线之--连接模块分析-鸿蒙HarmonyOS技术社区
typedef struct {     void (*OnConnected)(uint32_t connectionId, const ConnectionInfo *info);     void (*OnDisconnected)(uint32_t connectionId, const ConnectionInfo *info);     void (*OnDataReceived)(uint32_t connectionId, ConnModule moduleId, int64_t seq, char *data, int32_t len); } ConnectCallback; 

数据授与函数

ConnManagerRecvData

void ConnManagerRecvData(uint32_t connectionId, ConnModule moduleId, int64_t seq, char *data, int32_t len) {     ConnListenerNode listener;     int32_t ret;     char* pkt = NULL;     int32_t pktLen;      if (data == NULL) {         return;     }      if (len <= (int32_t)sizeof(ConnPktHead)) {         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "len %d \r\n", len);         return;     }      ret = GetListenerByModuleId(moduleId, &listener);     if (ret == SOFTBUS_ERR) {         SoftBusLog(SOFTBUS_LOG_CONN, SOFTBUS_LOG_ERROR, "GetListenerByModuleId fail moduleId %d \r\n", moduleId);         return;     }      pktLen = len - sizeof(ConnPktHead);     pkt = data + sizeof(ConnPktHead);     listener.callback.OnDataReceived(connectionId, moduleId, seq, pkt, pktLen);     return; } 

柔总线通信模块由分别模块组相符而成,如发现,认证等,当认证模块议决connect 接入总线时,数据获取流程为:softbus-> ConnManagerRecvData-> listener.callback.OnDataReceived,能够参考总线认证一块测试用例。

自然原由现在柔总线功能不完善,片面数据流程存在不完善的情况。

想晓畅更众内容,请访问:

51CTO和华为官方配相符共建的鸿蒙技术社区

https://harmonyos.51cto.com

【编辑保举】

鸿蒙官方战略配相符共建——HarmonyOS技术社区 HarmonyOS 项现在实战之通讯录(Java) Kotlin在鸿蒙开发中的实践 鸿蒙轻内核M核源码分析系列之Musl LibC 鸿蒙轻内核M核源码分析系列之Newlib C 鸿蒙轻内核M核源码分析系列之虚拟文件体系VFS