AutoSar AP CM服务接口级别的数据类型总结

一、服务接口级别的数据类型概述

介绍了在ara::com中服务接口用户定义数据类型的 C++ 语言映射,其中 "用户定义" 数据类型是由用户定义的服务接口描述(IDL)提供,而非由ara::com API 定义。在 AUTOSAR 元模型中引入了CppImplementationDataTypes以支持 C++14 数据类型系统特定要求。

二、可选数据元素

  1. 在元模型中,StructureImplementationDataType内部的记录元素可定义为可选的,在ara::com API 中由模板类ara::core::Optional表示。可选元素的序列化基于标签 - 长度 - 值原则,无可选元素的StructureImplementationDataTypes无需使用标签,其序列化方式在 [9] 中有详细说明。ara::core::Optional模板参数可包含记录元素的ImplementationDataType或应用数据类型,如uint32。可选记录元素可用于服务接口(SI)的字段、事件和方法等元素的结构中,这种可选性在 SI 级别定义。
  2. 给出了示例代码中的结构体BatteryState,其中包含可选元素currenthealth。客户端应用程序在运行时需检查可选元素是否包含值,其取决于服务端应用程序的设置。这种可选包含元素的特性为 SI 提供了向前和向后兼容性,新添加的记录元素可被旧应用程序忽略。

示例代码

cpp 复制代码
/**
 * \brief 具有可选包含值的数据结构。
 */
struct BatteryState {
    Voltage_t voltage;
    Temperature_t temperature;
    ara::core::Optional<Current_t> current;
    ara::core::Optional<Health> health;
};

using namespace ara::com;

class BatteryStateImpl : public BatteryStateSkeleton 
{
public:
    Future<BatteryState> GetBatteryState() 
    {
        // 为简单起见,没有异步调用
        ara::core::Promise<BatteryState> promise;

        // 填充数据结构
        BatteryState state;
        state.voltage = 14;
        state.temperature = 35;
        state.current = 0;
        // state.health 未设置,因此不会被传输

        promise.set_value(state);
        auto future = promise.get_future();
        return future;
    }
};

int main() {
    // 一些获取句柄的代码
    //...
    BatteryStateProxy bms_service(handle);
    Future<BatteryState> stateFuture = bms_service.GetBatteryState();
    // 接收 BatteryState
    BatteryState state = stateFuture.get();

    // 检查可选包含元素是否存在
    if(state.current) {
        // 使用 optional::operator*访问可选元素的值
        if(*state.current >= MAX_CURRENT) {
            // 用这个信息做一些事情
        }
    }

    // 使用 optional::has_value()方法检查
    if(state.health.has_value()){
        // 使用 optional::value()方法访问可选元素的值
        if(state.health.value() >= BAD_HEALTH) {
            // 用这个信息做一些事情
        }
    }
}
相关推荐
青草地溪水旁1 个月前
本地 / 网络多绑定用例总结
autosar ap·cm·多绑定
青草地溪水旁1 个月前
服务发现实现策略总结
服务发现·autosar ap·cm
青草地溪水旁2 个月前
AUTOSAR_EXP_ARAComAPI的5章笔记(13)
事件·autosar ap·cm
青草地溪水旁3 个月前
OfferService()方法时的相关要求
autosar ap·cm
青草地溪水旁3 个月前
AUTOSAR_EXP_ARAComAPI的5章笔记(9)
autosar ap·cm
青草地溪水旁3 个月前
AutoSar AP通信的事件订阅
some/ip·autosar ap·cm
青草地溪水旁3 个月前
AutoSarAP通信的事件数据访问和管理
some/ip·autosar ap·cm
青草地溪水旁3 个月前
AUTOSAR_EXP_ARAComAPI的5章笔记(3)
autosar ap·cm
青草地溪水旁3 个月前
AutoSar AP平台的SOMEIP文档的理解笔记
some/ip·autosar ap·cm