AUTOSAR图解==>AUTOSAR_AP_SWS_RawDataStream

AUTOSAR Raw Data Stream功能簇详解

基于AUTOSAR Adaptive Platform规范中Raw Data Stream功能簇的详细技术解析

目录

  1. 概述
    1.1 功能简介
    1.2 应用场景
  2. 架构设计
    2.1 整体架构
    2.2 类结构设计
    2.3 状态模型
    2.4 交互流程
  3. 核心功能实现
    3.1 基于IP协议的数据流处理
    3.2 基于IEEE1722协议的数据流处理
    3.3 安全机制
  4. API接口说明
    4.1 RawDataStreamClient
    4.2 RawDataStreamServer
    4.3 IEEE1722相关接口
    4.4 错误处理
  5. 总结

1. 概述

1.1 功能简介

Raw Data Stream功能簇是AUTOSAR Adaptive Platform中的一个关键组件,用于支持原始二进制数据流的处理。在现代汽车电子系统中,应用软件常常需要处理通过通信通道发送的原始二进制数据流,这些数据可以是两种形式:

  • 字节流:作为连续的字节序列处理,数据无需序列化
  • 数据报流:将接收的以太网帧作为流的原子单位处理,其中头部信息作为类型化数据传递,而有效负载作为原始二进制数据字节处理

Raw Data Stream功能簇提供了一个统一的接口,使应用程序能够方便地处理这两种类型的数据流,无需关心底层通信协议的具体细节。

1.2 应用场景

Raw Data Stream功能簇支持以下两种主要的网络协议场景:

  1. 基于IP协议的原始数据流(网络层)

    • 使用TCP/IP套接字作为传输层
    • 支持单播和多播套接字连接
    • 可以使用TCP(可靠的流式传输)或UDP(允许不可靠连接时)
  2. 基于IEEE1722协议的原始数据流(数据链路层)

    • 使用数据链路套接字(ISO OSI第2层)作为传输层
    • 支持MAC单播和MAC多播套接字连接
    • 支持多种IEEE1722子类型:AAF、61883_IIDC、RVF、CRF、TSCF和NTSCF

这种灵活性使Raw Data Stream功能簇能够适应各种不同的汽车网络通信需求,从标准IP通信到专用的车载音视频传输协议。


2. 架构设计

2.1 整体架构

Raw Data Stream功能簇的架构设计基于清晰的层次结构和接口定义,使其能够灵活地支持不同的通信协议和安全机制。下图展示了功能簇的整体架构:

在这里插入图片描述

从架构图中,我们可以看到以下关键组件和层次结构:

  1. 应用层(顶部黄色区域)

    • 包含使用Raw Data Stream服务的应用软件
  2. Raw Data Stream功能簇(中部蓝色区域)

    • 接口组件:提供标准化的接口供应用程序使用

      • IRawDataStreamClient:客户端接口
      • IRawDataStreamServer:服务器接口
      • IIEEE1722RawDataStreamConsumer:IEEE1722数据消费者接口
      • IIEEE1722RawDataStreamProducer:IEEE1722数据生产者接口
    • 实现组件:实现上述接口的具体类

      • RawDataStreamClient:客户端实现
      • RawDataStreamServer:服务器实现
      • IEEE1722RawDataStreamConsumer:IEEE1722数据消费者实现
      • IEEE1722RawDataStreamProducer:IEEE1722数据生产者实现
    • 数据模型:IEEE1722协议专用类

      • IEEE1722Datagram:基础数据报类,包含多个针对不同子类型的派生类
  3. 网络层(右侧紫色区域)

    • TCP/IP协议栈:支持基于IP的数据流
    • IEEE1722协议栈:支持基于IEEE1722的数据流
  4. 安全服务(绿色区域)

    • IAM(身份与访问管理):提供访问控制
    • TLS/IPSec:为基于IP的数据流提供安全通信
    • MACSec:为基于IEEE1722的数据流提供安全通信

这种分层的架构设计有以下几个优点:

  • 职责分离:每个组件都有明确的责任和功能边界
  • 灵活性:支持多种网络协议和安全机制
  • 可扩展性:可以添加新的协议支持而不影响现有功能
  • 安全性:集成了不同层次的安全机制

2.2 类结构设计

Raw Data Stream功能簇的类结构设计反映了对不同数据流处理方式的支持,同时提供了灵活的错误处理机制。下图展示了核心类的结构和关系:

类结构可以分为两个主要部分:

  1. 基于IP协议的类 (ara::rds 命名空间)

    • RawDataStreamClient:用于创建客户端连接,通过IP协议发送和接收原始数据流
    • RawDataStreamServer:用于创建服务器连接,通过IP协议接收和发送原始数据流
    • ReadDataResult:包含读取的数据和大小信息的结构体
    • ConnectionState:表示连接状态的枚举类型(已连接、未连接、连接中、断开中)
  2. 基于IEEE1722协议的类 (ara::rds::IEEE1722 命名空间)

    • 数据报类族:

      • IEEE1722Datagram:抽象基类,提供基础数据操作功能
      • IEEE1722DatagramAVTPDUCommonHeaderFields:包含AVTP PDU通用头部字段
      • IEEE1722DatagramAVTPDUCommonStreamHeaderFields:包含AVTP PDU通用流头部字段
      • 特定协议子类:IEEE1722DatagramAAFIEEE1722Datagram61883_IIDCIEEE1722DatagramCRF
    • 数据流处理类:

      • IEEE1722RawDataStreamConsumer:用于接收IEEE1722协议的数据流,通过回调函数处理接收到的数据报
      • IEEE1722RawDataStreamProducer:用于发送IEEE1722协议的数据流,支持多种IEEE1722子类型
    • 错误处理类:

      • RawErrorDomain:定义错误域
      • RawErrc:定义错误码枚举
      • RawException:表示Raw Data Stream操作中的异常

这种类结构设计的优点包括:

  • 类型安全:使用强类型接口和模型
  • 继承体系:通过继承提供专门化的功能,同时保持公共接口
  • 分离关注点:客户端/服务器和生产者/消费者分别处理不同的职责
  • 错误处理机制:统一的异常和错误处理模型

2.3 状态模型

Raw Data Stream功能簇中的连接和数据流有清晰的状态生命周期,下图展示了这些状态及其转换:

在这里插入图片描述

状态模型可以分为两个主要部分:

  1. 基于IP协议的Raw Data Stream状态

    • 客户端状态

      • 客户端未连接(kDisconnected):初始状态,客户端创建但未连接
      • 客户端连接中(kConnecting):正在尝试建立连接
      • 客户端已连接(kConnected):连接成功建立,可以进行数据传输
      • 客户端断开中(kDisconnecting):正在关闭连接
    • 服务器状态

      • 服务器未运行:初始状态,服务器创建但未启动
      • 服务器启动中:正在初始化服务器
      • 服务器运行中:服务器成功启动,可以接受连接和传输数据
      • 服务器停止中:正在关闭服务器
  2. 基于IEEE1722协议的Raw Data Stream状态

    • 消费者状态

      • 消费者未运行:初始状态,消费者创建但未启动
      • 消费者运行中:消费者成功启动,可以接收和处理数据报
    • 生产者状态

      • 生产者未运行:初始状态,生产者创建但未启动
      • 生产者运行中:生产者成功启动,可以发送数据报
  3. 错误状态

    • 网络错误:网络通信问题
    • 安全错误(权限拒绝):安全验证或权限问题
    • 资源错误:资源分配或访问问题

状态模型的关键特点:

  • 明确的状态转换:每个状态间的转换都有明确的触发操作
  • 错误处理:包含错误状态和恢复路径
  • 状态分组:按照不同的协议和组件角色分组状态
  • 完整的生命周期:覆盖从创建到销毁的完整生命周期

2.4 交互流程

Raw Data Stream功能簇中不同组件之间的交互流程展示了数据流如何在系统中传递。下图是一个序列图,展示了基于IP和IEEE1722两种不同协议的数据流交互过程:

在这里插入图片描述

序列图展示了两种主要的交互流程:

  1. 基于IP协议的原始数据流交互

    • 初始化阶段

      • 应用程序A创建RawDataStreamClient
      • 应用程序B创建RawDataStreamServer
      • 服务器启动(Start()
    • 连接建立

      • 客户端请求连接(Connect()
      • 网络层传递连接请求
      • 服务器接受连接
      • 连接状态通过回调函数通知双方
    • 数据传输

      • 应用程序A通过客户端写入数据(WriteData()
      • 数据通过网络层传递给服务器
      • 应用程序B从服务器读取数据(ReadData()
      • 应用程序B通过服务器发送响应数据
      • 应用程序A从客户端读取响应
    • 连接关闭

      • 应用程序A请求断开连接(Disconnect()
      • 网络层传递关闭通知
      • 服务器通知应用程序B连接状态变化
      • 应用程序B停止服务器(Stop()
  2. 基于IEEE1722协议的原始数据流交互

    • 初始化阶段

      • 应用程序C创建IEEE1722RawDataStreamProducer
      • 应用程序D创建IEEE1722RawDataStreamConsumer
      • 消费者设置数据处理回调函数(SetConsumeHandler()
      • 生产者和消费者启动(Start()
    • 数据传输

      • 应用程序C创建数据报(new IEEE1722DatagramXXX()
      • 应用程序C通过生产者发送数据报(Send()
      • 生产者获取数据报的原始数据
      • 数据通过IEEE1722网络层传递给消费者
      • 消费者触发回调函数处理接收到的数据
      • 数据报传递给应用程序D
    • 关闭阶段

      • 应用程序C和D分别停止生产者和消费者(Stop()

这种交互流程的设计有以下优点:

  • 异步操作:使用Future模式支持异步操作
  • 事件通知:通过回调函数通知状态变化
  • 清晰的数据流:明确定义了数据如何在组件间流动
  • 分离关注点:不同协议的数据流处理彼此独立

3. 核心功能实现

3.1 基于IP协议的数据流处理

基于IP协议的Raw Data Stream使用TCP/IP套接字作为传输层,适用于需要标准网络协议的场景。核心功能包括:

  1. 连接管理

    • 单播连接:点对点通信,一个客户端连接到一个服务器
    • 多播连接:一对多通信,服务器向多个客户端广播数据
    • 连接状态监控:通过状态回调函数实时监控连接状态变化
  2. 数据传输

    • 流式数据处理:适用于TCP连接,保证数据的顺序和完整性
    • 数据报处理:适用于UDP连接,适合对实时性要求高但允许数据丢失的场景
    • 异步读写操作:通过Future<Result<>>模式实现非阻塞操作
  3. 协议支持

    • TCP协议:提供可靠的流式传输
    • UDP协议:提供低延迟但不可靠的数据报传输
  4. 错误处理

    • 连接错误检测:检测并报告网络连接问题
    • 超时处理:处理连接和读写操作的超时

3.2 基于IEEE1722协议的数据流处理

基于IEEE1722协议的Raw Data Stream使用数据链路层套接字,特别适用于车载音视频传输等专业场景。核心功能包括:

  1. 数据报处理

    • 数据报封装:将应用数据封装到IEEE1722数据报中
    • 数据报解析:将接收到的IEEE1722数据报解析为应用数据和头部信息
    • 数据报类型:支持多种IEEE1722子类型,如AAF(音频)、RVF(视频)等
  2. 协议子类型支持

    • AAF(AVTP Audio Format):用于音频流传输
    • 61883/IIDC:用于传统音视频设备接口
    • RVF(Raw Video Format):用于原始视频数据传输
    • CRF(Clock Reference Format):用于时钟同步
    • TSCF(Time Synchronous Control Format):用于同步控制
    • NTSCF(Non-Time Synchronous Control Format):用于非同步控制
  3. 传输特性

    • 时间同步:支持基于IEEE 802.1AS的精确时间协议
    • 带宽保证:通过流预留确保带宽
    • 低延迟:直接使用数据链路层减少协议开销
  4. 回调机制

    • 数据消费回调:通过回调函数处理接收到的数据
    • 错误处理回调:报告传输过程中的错误

3.3 安全机制

Raw Data Stream功能簇集成了多层安全机制,确保数据传输的安全性:

  1. 访问控制

    • IAM集成:与身份和访问管理系统集成
    • 权限检查:在建立连接和数据传输前验证权限
    • 资源隔离:确保不同应用间的数据流隔离
  2. 通信安全

    • 基于IP的安全机制

      • TLS:为TCP连接提供加密和认证
      • IPSec:在IP层提供安全通信
    • 基于IEEE1722的安全机制

      • MACSec:在数据链路层提供加密和身份验证
  3. 数据完整性

    • 校验和:验证数据完整性
    • 数据报验证:验证IEEE1722数据报的有效性
  4. 错误报告

    • 安全事件日志:记录安全相关事件
    • 违规消息:报告安全策略违规情况

这些安全机制的集成使Raw Data Stream功能簇能够在保证性能的同时提供必要的安全保障。


4. API接口说明

4.1 RawDataStreamClient

RawDataStreamClient类提供了客户端连接的创建和管理功能,主要API包括:

  1. 构造函数

    RawDataStreamClient(vac::memory::optional<ara::core::InstanceSpecifier>)
    
    • 使用可选的实例说明符创建客户端,实例说明符用于标识配置中的特定客户端实例
  2. 连接管理

    ara::core::Future<ara::core::Result<void>> Connect()
    ara::core::Future<ara::core::Result<void>> Disconnect()
    bool IsConnected()
    
    • Connect():异步建立到服务器的连接
    • Disconnect():异步关闭当前连接
    • IsConnected():检查当前是否已连接
  3. 数据传输

    ara::core::Future<ara::core::Result<size_t>> WriteData(data: ara::core::Vector<uint8_t>)
    ara::core::Future<ara::core::Result<ReadDataResult>> ReadData(maxSize: size_t)
    
    • WriteData():异步向服务器发送数据
    • ReadData():异步从服务器读取数据
  4. 状态管理

    ConnectionState GetState()
    void SetConnectionStateChangeHandler(handler: ConnectionStateChangeHandler)
    void UnsetConnectionStateChangeHandler()
    
    • GetState():获取当前连接状态
    • SetConnectionStateChangeHandler():设置连接状态变化的回调处理函数
    • UnsetConnectionStateChangeHandler():移除连接状态变化的回调处理函数

4.2 RawDataStreamServer

RawDataStreamServer类提供了服务器端连接的创建和管理功能,主要API包括:

  1. 构造函数

    RawDataStreamServer(vac::memory::optional<ara::core::InstanceSpecifier>)
    
    • 使用可选的实例说明符创建服务器
  2. 服务管理

    ara::core::Future<ara::core::Result<void>> Start()
    ara::core::Future<ara::core::Result<void>> Stop()
    bool IsRunning()
    
    • Start():异步启动服务器,开始监听连接请求
    • Stop():异步停止服务器
    • IsRunning():检查服务器是否正在运行
  3. 数据传输

    ara::core::Future<ara::core::Result<size_t>> WriteData(data: ara::core::Vector<uint8_t>)
    ara::core::Future<ara::core::Result<ReadDataResult>> ReadData(maxSize: size_t)
    
    • WriteData():异步向客户端发送数据
    • ReadData():异步从客户端读取数据
  4. 状态管理

    ConnectionState GetState()
    void SetConnectionStateChangeHandler(handler: ConnectionStateChangeHandler)
    void UnsetConnectionStateChangeHandler()
    
    • 与客户端类似的状态管理功能

4.3 IEEE1722相关接口

IEEE1722相关接口主要包括数据消费者、生产者和数据报类,提供对IEEE1722协议数据的处理能力:

  1. IEEE1722RawDataStreamConsumer

    IEEE1722RawDataStreamConsumer(vac::memory::optional<ara::core::InstanceSpecifier>)
    ara::core::Future<ara::core::Result<void>> Start()
    ara::core::Future<ara::core::Result<void>> Stop()
    bool IsRunning()
    void SetConsumeHandler(handler: function<void(std::unique_ptr<IEEE1722Datagram>)>)
    void UnsetConsumeHandler()
    
    • 创建消费者、启动/停止接收、设置数据消费回调函数
  2. IEEE1722RawDataStreamProducer

    IEEE1722RawDataStreamProducer(vac::memory::optional<ara::core::InstanceSpecifier>)
    ara::core::Future<ara::core::Result<void>> Start()
    ara::core::Future<ara::core::Result<void>> Stop()
    bool IsRunning()
    ara::core::Future<ara::core::Result<void>> Send(datagram: std::unique_ptr<IEEE1722Datagram>)
    
    • 创建生产者、启动/停止发送、发送数据报
  3. IEEE1722Datagram类族

    class IEEE1722Datagram
    class IEEE1722DatagramAVTPDUCommonHeaderFields
    class IEEE1722DatagramAVTPDUCommonStreamHeaderFields
    class IEEE1722DatagramAAF
    class IEEE1722Datagram61883_IIDC
    // 等多个协议特定子类
    
    • 基础数据报类和多个特定协议的子类,提供对不同类型IEEE1722数据的支持

4.4 错误处理

Raw Data Stream功能簇提供了统一的错误处理机制:

  1. 错误码枚举

    enum RawErrc {
      kGeneralError,
      kInvalidArgument,
      kResourceBusy,
      kNoData,
      kConnectionFailed,
      kDisconnectionFailed,
      kInvalidState,
      kIOError,
      kDatagramCorrupt,
      kPermissionDenied
    }
    
    • 定义了功能簇可能遇到的各种错误类型
  2. 错误域

    class RawErrorDomain {
      GetId(): ara::core::ErrorDomain::IdType
      GetName(): std::string
      Message(code: ara::core::ErrorCode): std::string
    }
    
    • 封装错误域信息,提供错误码到错误消息的映射
  3. 异常类

    class RawException {
      RawException(code: RawErrc)
      GetErrorCode(): ara::core::ErrorCode
    }
    
    • 封装Raw Data Stream特定异常

这种错误处理机制与AUTOSAR Adaptive Platform的通用错误处理框架集成,提供了统一和一致的错误报告方式。


5. 总结

AUTOSAR Raw Data Stream功能簇为Adaptive Platform提供了强大而灵活的原始数据流处理能力,其主要特点包括:

  1. 多协议支持

    • 支持基于IP协议(TCP/UDP)的数据流处理
    • 支持基于IEEE1722协议的数据流处理,包括多种子类型
  2. 灵活的架构设计

    • 清晰的接口定义与实现分离
    • 分层架构支持不同网络协议和安全机制
    • 类型安全的API设计
  3. 完善的功能实现

    • 全面的连接生命周期管理
    • 异步操作支持
    • 基于回调的事件通知机制
    • 统一的错误处理框架
  4. 集成的安全机制

    • 与IAM集成的访问控制
    • 多层次的通信安全(TLS/IPSec/MACSec)
    • 数据完整性保护
  5. 应用场景广泛

    • 车载信息娱乐系统音视频流处理
    • 车载网络诊断数据传输
    • 传感器原始数据收集
    • 车载摄像头视频流处理

通过提供这些功能,Raw Data Stream功能簇满足了现代汽车电子系统对原始数据处理的多样化需求,为开发者提供了高效、安全、灵活的数据流处理解决方案。

未来随着汽车电子系统复杂度的不断增加,Raw Data Stream功能簇有望继续扩展,支持更多的协议类型、更高的性能需求和更强的安全机制,从而满足不断发展的车载电子技术需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值