鸿蒙子系统解读-分布式软总线子系统初步研究(上)

鸿蒙子系统解读-分布式软总线子系统初步研究(上)

本文作者:江苏润和软件股份有限公司 郎建中

1.总体描述

1.1.总体介绍

设备通信方式多种多样(USB/WIFI/BT等),不同通信方式使用差异很大且繁琐,同时通信链路的融合共享和冲突无法处理,通信安全问题也不好保证。分布式软总线致力于实现近场设备间统一的分布式通信能力管理,提供不区分链路的设备发现和传输接口。目前实现能力包含:

l 服务发布:服务发布后周边的设备可以发现并使用服务。

l 数据传输:根据服务的名称和设备ID建立一个会话,就可以实现服务间的传输功能。

l 安全:提供通信数据的加密能力。

分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发任务和传输数据。分布式软总线架构示意图如下:

在这里插入图片描述

1.2. 设备发现

在分布式软总线子系统中,设备分为发现端和被发现端。

发现端:请求使用服务的设备。一般指智慧屏设备。

被发现端:发布服务的设备。一般指轻量设备。

约束:目前必须保证发现端和被发现端处于同一个局域网内。

(1) 发现端设备,发起discover请求后,使用coap协议在局域网内发送广播。报文如下:
在这里插入图片描述

(2) 被发现端设备使用****PublishService****接口发布服务,接收端收到广播后,发送coap协议单播给发现端。报文格式如下:

在这里插入图片描述

(3) 发现端设备收到报文会更新设备信息。

被发现端发布服务的例子代码如下:

在这里插入图片描述

发现的流程图如下:

在这里插入图片描述

1.3. 数据传输

软总线提供统一的基于Session的传输功能,业务可以通过sessionId收发数据或获取其相关基本属性。当前本项目只实现被动接收Session连接的功能,业务可根据自身需要及Session自身属性判断是否接受此Session,如不接受,可以主动拒绝此连接。本项目暂未提供打开Session的相关能力。

下面是被发现端(服务提供端)向软总线申请创建Session Server的代码:

// 定义业务自身的业务名称,会话名称及相关回调

const char *g_moduleName = "BUSINESS_NAME";

const char *g_sessionName = "SESSION_NAME";

struct ISessionListener * g_sessionCallback= NULL;

 

// 回调实现:接收对方通过SendBytes发送的数据,此示例实现是接收到对端发送的数据后回复固定消息

void OnBytesReceivedTest(int sessionId, const void* data, unsigned int dataLen)

{

  printf("OnBytesReceivedTest\n");

  printf("Recv Data: %s\n", (char *)data);

  printf("Recv Data dataLen: %d\n", dataLen);

  char *testSendData = "Hello World, Hello!";

  ***\*SendBytes\****(sessionId, testSendData, strlen(testSendData));

  return;

}

 

// 回调实现:用于处理会话关闭后的相关业务操作,如释放当前会话相关的业务资源,会话无需业务主动释放

void OnSessionClosedEventTest(int sessionId)

{

  printf("Close session successfully, sessionId=%d\n", sessionId);

}

 

// 回调实现:用于处理会话打开后的相关业务操作。返回值为0,表示接收;反之,非0表示拒绝。此示例表示只接受其他设备的同名会话连接

int OnSessionOpenedEventTest(int sessionId)

{

  if (strcmp(***\*GetPeerSessionName\****(sessionId), SESSION_NAME) != 0) {

​    printf("Reject the session which name is different from mine, sessionId=%d\n", sessionId);

​    return -1;

  }

  printf("Open session successfully, sessionId=%d\n", sessionId);

  return 0;

}

 

// 向SoftBus注册业务会话服务及其回调

int StartSessionServer()

{

  if (g_sessionCallback == NULL) {

​    g_sessionCallback = (struct ISessionListener*)malloc(sizeof(struct ISessionListener));

  }

  if (g_sessionCallback == NULL) {

​    printf("Failed to malloc g_sessionCallback!\n");

​    return -1;

  }

  g_sessionCallback->onBytesReceived = OnBytesReceivedTest;

  g_sessionCallback->onSessionOpened = OnSessionOpenedEventTest;

  g_sessionCallback->onSessionClosed = OnSessionClosedEventTest;

  int ret = ***\*CreateSessionServer\****(g_moduleName, g_sessionName, g_sessionCallback);

  if (ret < 0) {

​    printf("Failed to create session s
  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
课程简介:本课程简介明了的介绍了鸿蒙相关的很多基础问题,譬如鸿蒙从哪里来,适合用于哪些产品,有哪些关键特性,鸿蒙是否用于替代android等等。并且通过3个案例展示了鸿蒙全场景分布式操作系统的创新特性。 本课程隶属于《跟朱老师学鸿蒙系列课程》的第1个课程。该系列课程是朱有鹏老师规划和录制的系统学习鸿蒙系统HarmonyOS的系列课程,会持续更新不断深入。前面课程主要是鸿蒙相关的科普和技术介绍、生态战略介绍、鸿蒙创新特性介绍、典型案例讲解和分析等。后面会逐步深入到纯技术学习课程,涉及到鸿蒙开发的各个方向,包括但不限于:鸿蒙北向应用开发(环境搭建、编程基础、常用API、手把手demo实战、开发者申请、签名app并上传应用市场等)、鸿蒙南向系统开发(liteos-m和liteos-a kernel源码分析、移植、调试等)、鸿蒙南向驱动开发(HDF框架解析、鸿蒙设备树、常见设备驱动模型分析和驱动编程实战,如GPIO、I2C、LCD、TP等)、鸿蒙系统创新开发(如分布式总线解析、跨设备调用实战、安全子系统详解、鸿蒙AI子系统等)。总之,该课程会贯彻朱老师一贯做课习惯,会是一个零基础起步,长篇大论,不断更新和添加丰富完善,带大家从应用到系统到驱动,非常完整全面的学习和解析鸿蒙系统的一套课程。  
### 回答1: 汽车CAN总线系统是一种现代化的通信技术,它可以在车辆内各个电子装置之间进行高效的数据传输和通信。CAN总线系统的原理和设计基于以下几个关键概念: 1. 多主结构:CAN总线系统中可以有多个节点同时进行数据传输,每个节点都可以充当主节点,可以发送和接收数据。 2. 增强型广播传输:CAN总线系统使用广播方式传输数据,任何一个节点发送的数据都会被其他节点接收到,但只有目标节点才会对接收到的数据进行处理。 3. 硬件过滤和错误检测:CAN总线系统在硬件层面上具备过滤和错误检测的功能,可以检测和纠正传输过程中的错误。 4. 时间触发机制:CAN总线系统通过时间触发机制来协调各个节点之间的数据传输,确保数据的可靠性和实时性。 CAN总线系统的设计和应用广泛存在于汽车领域,在汽车电子控制系统、车载娱乐系统、车身电子系统等方面都有应用。通过CAN总线系统,车辆各个控制模块可以实现高效的通信和数据交换,从而提高了整个车辆系统的效率和性能。 总的来说,汽车CAN总线系统的原理和设计使得车辆内各个电子设备能够快速、可靠地进行数据通信,实现各个系统之间的协调和交互。这种通信方式在汽车行业得到了广泛的应用,成为了汽车电子控制系统中的重要组成部分。 ### 回答2: 汽车CAN总线系统是一种用于数据通信的网络,它采用了控制器局域网(CAN)的通信协议,用于连接车辆上的不同电子模块和传感器。 CAN总线系统的原理是基于分布式通信的思想,将车辆上的各个电子模块和传感器通过CAN总线连接起来,形成一个网络。每个模块和传感器都可以作为网络上的一个节点,通过CAN总线进行数据的发送和接收。 设计上,CAN总线系统采用了两线制的通信方式,即CAN_H和CAN_L两根线。这种低成本且可靠的设计,能够满足汽车电子模块和传感器之间的数据传输需求。同时,CAN总线系统采用了分时工作模式,可以实现多个节点同时传输数据,提高了系统的通信效率和可靠性。 在应用方面,汽车CAN总线系统广泛应用于汽车电子控制单元(ECU)、发动机管理系统、车身控制系统、安全气囊系统等各个领域。通过CAN总线系统,这些电子模块和传感器之间可以实现实时的数据传输和相互协作,提高了整车系统的性能和安全性。 总的来说,汽车CAN总线系统在汽车电子领域具有重要的作用,它不仅实现了各个电子模块和传感器之间的联网通信,还提高了整车系统的集成度和可靠性。同时,CAN总线系统的设计和应用也需要考虑安全和可靠性等因素,以确保车辆的正常运行和驾驶安全。 ### 回答3: CAN总线系统是一种用于汽车内部通信的网络,它的原理、设计与应用被详细讲解在《汽车CAN总线系统原理、设计与应用》一书中。这本书由电子工业出版社于2009年出版,作者是罗峰。 CAN总线系统采用了分布式控制的思想,通过多个节点之间的通信传递信息。它具有可靠性高、传输速率快、连接简单等优点,因此在汽车电子系统中得到了广泛的应用。 书中首先介绍了CAN总线系统的基本原理,包括通信介质、传输速率、帧结构等。通信介质一般采用双绞线或光纤,传输速率可根据需求选择。在帧结构方面,CAN总线系统采用了一种基于事件驱动的通信方式,即只有当某个节点有需要传输的信息时,才会将信息发送到总线上。 接着,书中详细介绍了CAN总线系统的设计方法。这包括硬件设计和件设计两个方面。在硬件设计中,需要考虑总线连接方式、节点数目、节点电源等因素。而在件设计中,需要定义具体的通信协议、消息帧格式、错误处理等。 最后,书中还介绍了CAN总线系统的应用。CAN总线系统广泛应用于汽车电子系统中的各个领域,如发动机控制、制动系统、安全气囊等。通过CAN总线系统,各个节点之间可以实现高效的通信和信息交换,提高汽车电子系统的整体性能和可靠性。 总的来说,《汽车CAN总线系统原理、设计与应用》一书深入浅出地介绍了CAN总线系统的原理、设计方法和应用。对于从事汽车电子系统设计和开发的工程师来说,这本书是一本宝贵的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值