一、原始数据流传输接口概述
自适应 AUTOSAR 通信管理通常基于面向服务的通信,但对于高级驾驶辅助系统(ADAS)应用,高效传输原始二进制数据流很重要,原始数据二进制流 API 为此提供了解决方案。它能与车辆外部传感器高效通信,通信通过套接字在网络上进行,从ara::com
架构看,该 API 是静态的,属于ara::com
命名空间但独立于中间件服务。
二、功能描述
原始数据二进制流 API 可在客户端和服务器端使用,两者都能发送和接收数据,但有不同的操作顺序:
- 客户端:连接(Connect)→读数据 / 写数据(ReadData/WriteData)→关闭(Shutdown)。
- 服务器端:等待连接(WaitForConnection)→读数据 / 写数据(ReadData/WriteData)→关闭(Shutdown)。
三、类和模型
- 类
ara::com::raw
定义了RawDataStream
类,客户端是ara::com::raw::RawDataStreamClient
对象,服务器端是ara::com::raw::RawDataStreamServer
对象。 - 构造函数:
RawDataStreamClient(const ara::com::InstanceSpecifier& instance);
RawDataStreamServer(const ara::com::InstanceSpecifier& instance);
- 析构函数:
~RawDataStreamClient();
~RawDataStreamServer();
- 清单模型定义了网络上原始数据流部署的参数,包括传输方式、网络端点、端口、套接字选项和安全属性等。
四、方法
- 超时参数:
RawDataStream
的客户端和服务器的相关方法都有可选超时参数,以毫秒为单位,决定方法的超时时间。 - 具体方法:
WaitForConnection
:仅服务器端可用,用于等待客户端连接,仅在 TCP 时使用。Connect
:仅客户端可用,用于建立与 TCP 服务器的连接,对于 UDP 不执行操作。Shutdown
:客户端和服务器端都可用,用于关闭通信。ReadData
:从套接字连接读取字节,成功返回包含读取数据指针和字节数的结构体,失败返回错误码。WriteData
:将字节写入套接字连接,成功返回实际写入的字节数,失败返回错误码。
示例代码
RawDataStreamClient(const ara::com::InstanceSpecifier& instance);
RawDataStreamServer(const ara::com::InstanceSpecifier& instance);
连接方法:
ara::core::Result<void> Connect();
ara::core::Result<void> Connect(std::chrono::milliseconds timeout);
读取数据方法:
ara::core::Result<ReadDataResult> ReadData(size_t length);
ara::core::Result<ReadDataResult> ReadData(size_t length,std::chrono::milliseconds timeout);struct ReadDataResult
{std::unique_ptr<ara::core::Byte[]> data;size_t numberOfBytes;
};
写入数据方法:
ara::core::Result<size_t> WriteData(std::unique_ptr<ara::core::Byte[]> data,size_t length);
ara::core::Result<size_t> WriteData(std::unique_ptr<ara::core::Byte[]> data,size_t length,std::chrono::milliseconds timeout);