AUTOSAR Raw Data Stream功能簇详解
目录
- 概述
1.1 功能简介
1.2 应用场景 - 架构设计
2.1 整体架构
2.2 类结构设计
2.3 状态模型
2.4 交互流程 - 核心功能实现
3.1 基于IP协议的数据流处理
3.2 基于IEEE1722协议的数据流处理
3.3 安全机制 - API接口说明
4.1 RawDataStreamClient
4.2 RawDataStreamServer
4.3 IEEE1722相关接口
4.4 错误处理 - 总结
1. 概述
1.1 功能简介
Raw Data Stream功能簇是AUTOSAR Adaptive Platform中的一个关键组件,用于支持原始二进制数据流的处理。在现代汽车电子系统中,应用软件常常需要处理通过通信通道发送的原始二进制数据流,这些数据可以是两种形式:
- 字节流:作为连续的字节序列处理,数据无需序列化
- 数据报流:将接收的以太网帧作为流的原子单位处理,其中头部信息作为类型化数据传递,而有效负载作为原始二进制数据字节处理
Raw Data Stream功能簇提供了一个统一的接口,使应用程序能够方便地处理这两种类型的数据流,无需关心底层通信协议的具体细节。
1.2 应用场景
Raw Data Stream功能簇支持以下两种主要的网络协议场景:
-
基于IP协议的原始数据流(网络层)
- 使用TCP/IP套接字作为传输层
- 支持单播和多播套接字连接
- 可以使用TCP(可靠的流式传输)或UDP(允许不可靠连接时)
-
基于IEEE1722协议的原始数据流(数据链路层)
- 使用数据链路套接字(ISO OSI第2层)作为传输层
- 支持MAC单播和MAC多播套接字连接
- 支持多种IEEE1722子类型:AAF、61883_IIDC、RVF、CRF、TSCF和NTSCF
这种灵活性使Raw Data Stream功能簇能够适应各种不同的汽车网络通信需求,从标准IP通信到专用的车载音视频传输协议。
2. 架构设计
2.1 整体架构
Raw Data Stream功能簇的架构设计基于清晰的层次结构和接口定义,使其能够灵活地支持不同的通信协议和安全机制。下图展示了功能簇的整体架构:
从架构图中,我们可以看到以下关键组件和层次结构:
-
应用层(顶部黄色区域)
- 包含使用Raw Data Stream服务的应用软件
-
Raw Data Stream功能簇(中部蓝色区域)
-
接口组件:提供标准化的接口供应用程序使用
IRawDataStreamClient
:客户端接口IRawDataStreamServer
:服务器接口IIEEE1722RawDataStreamConsumer
:IEEE1722数据消费者接口IIEEE1722RawDataStreamProducer
:IEEE1722数据生产者接口
-
实现组件:实现上述接口的具体类
RawDataStreamClient
:客户端实现RawDataStreamServer
:服务器实现IEEE1722RawDataStreamConsumer
:IEEE1722数据消费者实现IEEE1722RawDataStreamProducer
:IEEE1722数据生产者实现
-
数据模型:IEEE1722协议专用类
IEEE1722Datagram
:基础数据报类,包含多个针对不同子类型的派生类
-
-
网络层(右侧紫色区域)
- TCP/IP协议栈:支持基于IP的数据流
- IEEE1722协议栈:支持基于IEEE1722的数据流
-
安全服务(绿色区域)
- IAM(身份与访问管理):提供访问控制
- TLS/IPSec:为基于IP的数据流提供安全通信
- MACSec:为基于IEEE1722的数据流提供安全通信
这种分层的架构设计有以下几个优点:
- 职责分离:每个组件都有明确的责任和功能边界
- 灵活性:支持多种网络协议和安全机制
- 可扩展性:可以添加新的协议支持而不影响现有功能
- 安全性:集成了不同层次的安全机制
2.2 类结构设计
Raw Data Stream功能簇的类结构设计反映了对不同数据流处理方式的支持,同时提供了灵活的错误处理机制。下图展示了核心类的结构和关系:
类结构可以分为两个主要部分:
-
基于IP协议的类 (
ara::rds
命名空间)RawDataStreamClient
:用于创建客户端连接,通过IP协议发送和接收原始数据流RawDataStreamServer
:用于创建服务器连接,通过IP协议接收和发送原始数据流ReadDataResult
:包含读取的数据和大小信息的结构体ConnectionState
:表示连接状态的枚举类型(已连接、未连接、连接中、断开中)
-
基于IEEE1722协议的类 (
ara::rds::IEEE1722
命名空间)-
数据报类族:
IEEE1722Datagram
:抽象基类,提供基础数据操作功能IEEE1722DatagramAVTPDUCommonHeaderFields
:包含AVTP PDU通用头部字段IEEE1722DatagramAVTPDUCommonStreamHeaderFields
:包含AVTP PDU通用流头部字段- 特定协议子类:
IEEE1722DatagramAAF
、IEEE1722Datagram61883_IIDC
、IEEE1722DatagramCRF
等
-
数据流处理类:
IEEE1722RawDataStreamConsumer
:用于接收IEEE1722协议的数据流,通过回调函数处理接收到的数据报IEEE1722RawDataStreamProducer
:用于发送IEEE1722协议的数据流,支持多种IEEE1722子类型
-
错误处理类:
RawErrorDomain
:定义错误域RawErrc
:定义错误码枚举RawException
:表示Raw Data Stream操作中的异常
-
这种类结构设计的优点包括:
- 类型安全:使用强类型接口和模型
- 继承体系:通过继承提供专门化的功能,同时保持公共接口
- 分离关注点:客户端/服务器和生产者/消费者分别处理不同的职责
- 错误处理机制:统一的异常和错误处理模型
2.3 状态模型
Raw Data Stream功能簇中的连接和数据流有清晰的状态生命周期,下图展示了这些状态及其转换:
状态模型可以分为两个主要部分:
-
基于IP协议的Raw Data Stream状态
-
客户端状态:
客户端未连接(kDisconnected)
:初始状态,客户端创建但未连接客户端连接中(kConnecting)
:正在尝试建立连接客户端已连接(kConnected)
:连接成功建立,可以进行数据传输客户端断开中(kDisconnecting)
:正在关闭连接
-
服务器状态:
服务器未运行
:初始状态,服务器创建但未启动服务器启动中
:正在初始化服务器服务器运行中
:服务器成功启动,可以接受连接和传输数据服务器停止中
:正在关闭服务器
-
-
基于IEEE1722协议的Raw Data Stream状态
-
消费者状态:
消费者未运行
:初始状态,消费者创建但未启动消费者运行中
:消费者成功启动,可以接收和处理数据报
-
生产者状态:
生产者未运行
:初始状态,生产者创建但未启动生产者运行中
:生产者成功启动,可以发送数据报
-
-
错误状态:
网络错误
:网络通信问题安全错误(权限拒绝)
:安全验证或权限问题资源错误
:资源分配或访问问题
状态模型的关键特点:
- 明确的状态转换:每个状态间的转换都有明确的触发操作
- 错误处理:包含错误状态和恢复路径
- 状态分组:按照不同的协议和组件角色分组状态
- 完整的生命周期:覆盖从创建到销毁的完整生命周期
2.4 交互流程
Raw Data Stream功能簇中不同组件之间的交互流程展示了数据流如何在系统中传递。下图是一个序列图,展示了基于IP和IEEE1722两种不同协议的数据流交互过程:
序列图展示了两种主要的交互流程:
-
基于IP协议的原始数据流交互
-
初始化阶段:
- 应用程序A创建
RawDataStreamClient
- 应用程序B创建
RawDataStreamServer
- 服务器启动(
Start()
)
- 应用程序A创建
-
连接建立:
- 客户端请求连接(
Connect()
) - 网络层传递连接请求
- 服务器接受连接
- 连接状态通过回调函数通知双方
- 客户端请求连接(
-
数据传输:
- 应用程序A通过客户端写入数据(
WriteData()
) - 数据通过网络层传递给服务器
- 应用程序B从服务器读取数据(
ReadData()
) - 应用程序B通过服务器发送响应数据
- 应用程序A从客户端读取响应
- 应用程序A通过客户端写入数据(
-
连接关闭:
- 应用程序A请求断开连接(
Disconnect()
) - 网络层传递关闭通知
- 服务器通知应用程序B连接状态变化
- 应用程序B停止服务器(
Stop()
)
- 应用程序A请求断开连接(
-
-
基于IEEE1722协议的原始数据流交互
-
初始化阶段:
- 应用程序C创建
IEEE1722RawDataStreamProducer
- 应用程序D创建
IEEE1722RawDataStreamConsumer
- 消费者设置数据处理回调函数(
SetConsumeHandler()
) - 生产者和消费者启动(
Start()
)
- 应用程序C创建
-
数据传输:
- 应用程序C创建数据报(
new IEEE1722DatagramXXX()
) - 应用程序C通过生产者发送数据报(
Send()
) - 生产者获取数据报的原始数据
- 数据通过IEEE1722网络层传递给消费者
- 消费者触发回调函数处理接收到的数据
- 数据报传递给应用程序D
- 应用程序C创建数据报(
-
关闭阶段:
- 应用程序C和D分别停止生产者和消费者(
Stop()
)
- 应用程序C和D分别停止生产者和消费者(
-
这种交互流程的设计有以下优点:
- 异步操作:使用Future模式支持异步操作
- 事件通知:通过回调函数通知状态变化
- 清晰的数据流:明确定义了数据如何在组件间流动
- 分离关注点:不同协议的数据流处理彼此独立
3. 核心功能实现
3.1 基于IP协议的数据流处理
基于IP协议的Raw Data Stream使用TCP/IP套接字作为传输层,适用于需要标准网络协议的场景。核心功能包括:
-
连接管理
- 单播连接:点对点通信,一个客户端连接到一个服务器
- 多播连接:一对多通信,服务器向多个客户端广播数据
- 连接状态监控:通过状态回调函数实时监控连接状态变化
-
数据传输
- 流式数据处理:适用于TCP连接,保证数据的顺序和完整性
- 数据报处理:适用于UDP连接,适合对实时性要求高但允许数据丢失的场景
- 异步读写操作:通过
Future<Result<>>
模式实现非阻塞操作
-
协议支持
- TCP协议:提供可靠的流式传输
- UDP协议:提供低延迟但不可靠的数据报传输
-
错误处理
- 连接错误检测:检测并报告网络连接问题
- 超时处理:处理连接和读写操作的超时
3.2 基于IEEE1722协议的数据流处理
基于IEEE1722协议的Raw Data Stream使用数据链路层套接字,特别适用于车载音视频传输等专业场景。核心功能包括:
-
数据报处理
- 数据报封装:将应用数据封装到IEEE1722数据报中
- 数据报解析:将接收到的IEEE1722数据报解析为应用数据和头部信息
- 数据报类型:支持多种IEEE1722子类型,如AAF(音频)、RVF(视频)等
-
协议子类型支持
- 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):用于非同步控制
-
传输特性
- 时间同步:支持基于IEEE 802.1AS的精确时间协议
- 带宽保证:通过流预留确保带宽
- 低延迟:直接使用数据链路层减少协议开销
-
回调机制
- 数据消费回调:通过回调函数处理接收到的数据
- 错误处理回调:报告传输过程中的错误
3.3 安全机制
Raw Data Stream功能簇集成了多层安全机制,确保数据传输的安全性:
-
访问控制
- IAM集成:与身份和访问管理系统集成
- 权限检查:在建立连接和数据传输前验证权限
- 资源隔离:确保不同应用间的数据流隔离
-
通信安全
-
基于IP的安全机制:
- TLS:为TCP连接提供加密和认证
- IPSec:在IP层提供安全通信
-
基于IEEE1722的安全机制:
- MACSec:在数据链路层提供加密和身份验证
-
-
数据完整性
- 校验和:验证数据完整性
- 数据报验证:验证IEEE1722数据报的有效性
-
错误报告
- 安全事件日志:记录安全相关事件
- 违规消息:报告安全策略违规情况
这些安全机制的集成使Raw Data Stream功能簇能够在保证性能的同时提供必要的安全保障。
4. API接口说明
4.1 RawDataStreamClient
RawDataStreamClient
类提供了客户端连接的创建和管理功能,主要API包括:
-
构造函数
RawDataStreamClient(vac::memory::optional<ara::core::InstanceSpecifier>)
- 使用可选的实例说明符创建客户端,实例说明符用于标识配置中的特定客户端实例
-
连接管理
ara::core::Future<ara::core::Result<void>> Connect() ara::core::Future<ara::core::Result<void>> Disconnect() bool IsConnected()
Connect()
:异步建立到服务器的连接Disconnect()
:异步关闭当前连接IsConnected()
:检查当前是否已连接
-
数据传输
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()
:异步从服务器读取数据
-
状态管理
ConnectionState GetState() void SetConnectionStateChangeHandler(handler: ConnectionStateChangeHandler) void UnsetConnectionStateChangeHandler()
GetState()
:获取当前连接状态SetConnectionStateChangeHandler()
:设置连接状态变化的回调处理函数UnsetConnectionStateChangeHandler()
:移除连接状态变化的回调处理函数
4.2 RawDataStreamServer
RawDataStreamServer
类提供了服务器端连接的创建和管理功能,主要API包括:
-
构造函数
RawDataStreamServer(vac::memory::optional<ara::core::InstanceSpecifier>)
- 使用可选的实例说明符创建服务器
-
服务管理
ara::core::Future<ara::core::Result<void>> Start() ara::core::Future<ara::core::Result<void>> Stop() bool IsRunning()
Start()
:异步启动服务器,开始监听连接请求Stop()
:异步停止服务器IsRunning()
:检查服务器是否正在运行
-
数据传输
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()
:异步从客户端读取数据
-
状态管理
ConnectionState GetState() void SetConnectionStateChangeHandler(handler: ConnectionStateChangeHandler) void UnsetConnectionStateChangeHandler()
- 与客户端类似的状态管理功能
4.3 IEEE1722相关接口
IEEE1722相关接口主要包括数据消费者、生产者和数据报类,提供对IEEE1722协议数据的处理能力:
-
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()
- 创建消费者、启动/停止接收、设置数据消费回调函数
-
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>)
- 创建生产者、启动/停止发送、发送数据报
-
IEEE1722Datagram类族
class IEEE1722Datagram class IEEE1722DatagramAVTPDUCommonHeaderFields class IEEE1722DatagramAVTPDUCommonStreamHeaderFields class IEEE1722DatagramAAF class IEEE1722Datagram61883_IIDC // 等多个协议特定子类
- 基础数据报类和多个特定协议的子类,提供对不同类型IEEE1722数据的支持
4.4 错误处理
Raw Data Stream功能簇提供了统一的错误处理机制:
-
错误码枚举
enum RawErrc { kGeneralError, kInvalidArgument, kResourceBusy, kNoData, kConnectionFailed, kDisconnectionFailed, kInvalidState, kIOError, kDatagramCorrupt, kPermissionDenied }
- 定义了功能簇可能遇到的各种错误类型
-
错误域
class RawErrorDomain { GetId(): ara::core::ErrorDomain::IdType GetName(): std::string Message(code: ara::core::ErrorCode): std::string }
- 封装错误域信息,提供错误码到错误消息的映射
-
异常类
class RawException { RawException(code: RawErrc) GetErrorCode(): ara::core::ErrorCode }
- 封装Raw Data Stream特定异常
这种错误处理机制与AUTOSAR Adaptive Platform的通用错误处理框架集成,提供了统一和一致的错误报告方式。
5. 总结
AUTOSAR Raw Data Stream功能簇为Adaptive Platform提供了强大而灵活的原始数据流处理能力,其主要特点包括:
-
多协议支持
- 支持基于IP协议(TCP/UDP)的数据流处理
- 支持基于IEEE1722协议的数据流处理,包括多种子类型
-
灵活的架构设计
- 清晰的接口定义与实现分离
- 分层架构支持不同网络协议和安全机制
- 类型安全的API设计
-
完善的功能实现
- 全面的连接生命周期管理
- 异步操作支持
- 基于回调的事件通知机制
- 统一的错误处理框架
-
集成的安全机制
- 与IAM集成的访问控制
- 多层次的通信安全(TLS/IPSec/MACSec)
- 数据完整性保护
-
应用场景广泛
- 车载信息娱乐系统音视频流处理
- 车载网络诊断数据传输
- 传感器原始数据收集
- 车载摄像头视频流处理
通过提供这些功能,Raw Data Stream功能簇满足了现代汽车电子系统对原始数据处理的多样化需求,为开发者提供了高效、安全、灵活的数据流处理解决方案。
未来随着汽车电子系统复杂度的不断增加,Raw Data Stream功能簇有望继续扩展,支持更多的协议类型、更高的性能需求和更强的安全机制,从而满足不断发展的车载电子技术需求。