AUTOSAR HMI、多媒体与远程信息处理接口详解
目录
- 概述
- 基本架构
2.1 架构概览
2.2 组件类型
2.3 应用服务软件组件
2.4 应用控制器软件组件
2.5 UI设备软件组件
2.6 PDC应用示例 - 软件组合与组件描述
3.1 按钮面板组件
3.2 跨域控制器组合 - 总结
1. 概述
本文档旨在提供对AUTOSAR标准中多媒体(MM)、远程信息处理(Telematics)和人机接口(HMI)子域的接口和端口的详细解释。MM/T/HMI领域是一个复杂且较大的领域,包含不同类型的应用软件组件,如多媒体、远程信息处理或HMI应用。某些软件组件可以由两个或更多的应用类型共享,例如,视频显示及其相关软件组件可以由多媒体和HMI应用共享。
MM/T/HMI领域架构的目标是:
- 将"功能核心"世界与HMI世界分离
- 将HMI逻辑与HMI表现分离
- 抽象物理设备(如键盘)
- 集中管理HMI资源(如音频和显示)
本文档详细介绍了标准化的MM/T/HMI端口和接口,特别是关于HMI子域的简单UI设备(如按钮、旋钮等)接口。
2. 基本架构
2.1 架构概览
MM/T/HMI领域架构说明:
MM/T/HMI领域的基本架构遵循分离HMI部分与非HMI部分以及OEM特定部分与非OEM特定部分的原则。架构中包含三种类型的软件组件(SWC):
组件 应用服务组件(Application Service SWC):
- 职责:
- 实现功能的核心逻辑
- 独立于HMI(外观和感觉)
- 不直接与UI设备交互
- 功能点:
- 提供独立于HMI的服务
- 可在不同HMI场景中重用
- 例如PDC、媒体播放器或镜像调整功能
组件 应用控制器组件(Application Controller SWC):
- 职责:
- 实现HMI逻辑
- 连接应用服务与UI设备
- 定义用户界面行为
- 通常是OEM特定的
- 功能点:
- 决定哪些应用服务数据呈现给用户
- 解释用户输入并控制应用服务
- 决定应用服务何时激活
组件 UI设备组件(UI Devices SWCs):
- 职责:
- 表示输入和输出设备
- 不知道连接的功能
- 仅提供通用功能
- 例如按钮只提供按下/未按下信息
- 功能点:
- 输入设备:按钮、操纵杆、麦克风、触摸屏
- 输出设备:屏幕、LED灯、蜂鸣器、振动设备
接口 服务接口:
- 提供的服务: 提供应用服务的功能接口
- 调用方式: 被应用控制器调用以获取服务数据
接口 控制器输入接口:
- 提供的服务: 接收来自应用服务和UI设备的数据
- 调用方式: 由应用服务和UI设备调用以提供数据
接口 控制器输出接口:
- 提供的服务: 向UI设备发送控制命令
- 调用方式: 调用UI设备接口以控制输出
接口 UI输入接口:
- 提供的服务: 接收用户输入并传递给控制器
- 调用方式: 向控制器提供用户输入数据
接口 UI输出接口:
- 提供的服务: 接收控制器命令并控制输出设备
- 调用方式: 被控制器调用以显示或发出输出
/* AUTOSAR HMI架构接口定义示例 */
/* 应用服务组件接口 */
typedef struct {
uint8 serviceId; /* 服务标识符 */
uint8 serviceStatus; /* 服务状态 */
void* serviceData; /* 服务数据指针 */
uint16 dataLength; /* 数据长度 */
} ApplicationService_DataType;
/* 应用服务API */
Std_ReturnType ApplicationService_GetData(
ApplicationService_DataType* serviceData);
Std_ReturnType ApplicationService_SetCommand(
uint8 commandId,
const uint8* commandData,
uint16 dataLength);
Std_ReturnType ApplicationService_GetStatus(
uint8* serviceStatus);
/* 应用控制器组件接口 */
typedef struct {
uint8 controllerId; /* 控制器标识符 */
uint8 controllerStatus; /* 控制器状态 */
} ApplicationController_ConfigType;
/* 应用控制器API */
Std_ReturnType ApplicationController_Init(
const ApplicationController_ConfigType* configPtr);
Std_ReturnType ApplicationController_ProcessInput(
uint8 deviceId,
const uint8* inputData,
uint16 dataLength);
Std_ReturnType ApplicationController_Update(void);
/* UI设备组件接口 */
typedef struct {
uint8 deviceId; /* 设备标识符 */
uint8 deviceType; /* 设备类型 */
uint8 deviceStatus; /* 设备状态 */
} UIDevice_ConfigType;
/* UI设备API */
Std_ReturnType UIDevice_Init(
const UIDevice_ConfigType* configPtr);
Std_ReturnType UIDevice_GetInput(
uint8* inputData,
uint16* dataLength);
Std_ReturnType UIDevice_SetOutput(
const uint8* outputData,
uint16 dataLength);
2.2 组件类型
AUTOSAR MM/T/HMI领域的基本架构包含三种类型的软件组件:
- 应用服务软件组件(Application Service SWC):实现主要功能,独立于HMI外观和感觉
- 应用控制器软件组件(Application Controller SWC):将应用服务映射到UI设备,负责HMI逻辑和行为
- UI设备软件组件(UI Devices SWCs):表示所有用户界面设备(输入和输出设备)
这种架构使应用服务能够在不同的HMI场景中重用(例如有或没有显示器、语音识别等的HMI)。应用服务与HMI无关,而UI设备是通用的,不知道它们连接的功能。只有应用控制器需要更改以提供所需的行为。
2.3 应用服务软件组件
应用服务软件组件实现不依赖于HMI(外观和感觉)的功能。这些组件的示例包括:
- AM/FM调谐器应用
- 导航应用
- 驻车距离控制(PDC)应用
应用服务不必特定于MM/T/HMI领域,也可以从与用户交互的任何其他领域派生,例如驾驶动态功能。AUTOSAR中已标准化了一些应用的端口和接口,而其他可能在不同的标准化组织中标准化。
2.4 应用控制器软件组件
应用控制器将应用服务映射到UI设备。它负责:
- 决定哪些由应用服务提供的数据呈现给用户
- 解释用户输入并控制应用服务的功能
- 决定应用服务何时激活
每个OEM都会为每个车辆变型定义其特定的HMI行为。应用控制器封装了HMI和OEM特定方面,使应用服务和UI设备都可以重用。
2.5 UI设备软件组件
UI设备软件组件提供来自用户的输入和向用户的输出。这些组件是访问输入和输出硬件设备的接入点。UI设备的定义应该不知道它连接的功能。例如,开关PDC功能的按钮应该只提供按下/未按下信息,而不是PDC开/关信息。
输入设备的示例:
- 按钮
- 操纵杆
- 麦克风
- 触摸屏
输出设备的示例:
- 屏幕
- LED灯
- 蜂鸣器
- 振动设备
2.6 PDC应用示例
PDC应用示例说明:
AUTOSAR驻车距离控制(PDC)应用是应用服务、应用控制器和UI设备组件协同工作的典型例子。
组件 PDC应用服务(PDC Application Service):
- 职责:
- 接收传感器数据
- 计算与障碍物的距离
- 确定警告级别
- 提供距离信息
- 功能点:
- 处理传感器原始数据
- 执行距离计算算法
- 确定不同区域的警告级别
- 向应用控制器提供处理后的距离数据
组件 PDC应用控制器(PDC Application Controller):
- 职责:
- 实现PDC的HMI逻辑
- 决定何时激活PDC功能
- 确定如何展示距离信息
- 控制警告声音的频率
- 功能点:
- 处理按钮输入(开启/关闭PDC)
- 解释距离数据
- 控制显示内容
- 控制警告声音的产生
组件 按钮(Button):
- 职责:
- 开启/关闭PDC功能
- 功能点:
- 检测物理按钮的按下状态
- 向控制器提供按钮状态信息
组件 显示设备(Display):
- 职责:
- 显示距离图形指示
- 显示障碍物位置
- 功能点:
- 接收控制器命令
- 显示距离相关的图形界面
- 可视化障碍物位置
组件 声音设备(Sound Device):
- 职责:
- 发出警告蜂鸣声
- 根据距离改变频率
- 功能点:
- 接收控制器的声音命令
- 产生特定频率的警告声音
- 根据障碍物距离调整声音频率
/* AUTOSAR PDC应用示例代码 */
/* PDC应用服务数据类型 */
typedef struct {
uint16 distanceFront; /* 前方障碍物距离(厘米) */
uint16 distanceRear; /* 后方障碍物距离(厘米) */
uint16 distanceLeft; /* 左侧障碍物距离(厘米) */
uint16 distanceRight; /* 右侧障碍物距离(厘米) */
uint8 warningLevel; /* 警告级别(0-3) */
} PDC_DistanceDataType;
/* PDC应用服务API */
Std_ReturnType PDC_GetDistanceData(PDC_DistanceDataType* distanceData);
Std_ReturnType PDC_ActivateSensors(boolean activate);
Std_ReturnType PDC_GetStatus(uint8* pdcStatus);
/* PDC控制器配置 */
typedef struct {
uint16 warningThreshold1; /* 警告阈值1(厘米) */
uint16 warningThreshold2; /* 警告阈值2(厘米) */
uint16 warningThreshold3; /* 警告阈值3(厘米) */
uint8 soundVolume; /* 声音音量(0-100) */
} PDC_ControllerConfigType;
/* PDC控制器API */
Std_ReturnType PDC_Controller_Init(const PDC_ControllerConfigType* configPtr);
Std_ReturnType PDC_Controller_ButtonInput(boolean buttonPressed);
Std_ReturnType PDC_Controller_UpdateDisplay(void);
Std_ReturnType PDC_Controller_UpdateSound(void);
/* 按钮状态数据类型 */
typedef struct {
boolean isPressed; /* 按钮是否被按下 */
uint32 pressDuration; /* 按下持续时间(毫秒) */
} Button_StateType;
/* 按钮接口API */
Std_ReturnType Button_GetState(uint8 buttonId, Button_StateType* buttonState);
/* 显示接口API */
Std_ReturnType Display_ShowDistanceInfo(
const PDC_DistanceDataType* distanceData);
Std_ReturnType Display_SetWarningLevel(uint8 warningLevel);
Std_ReturnType Display_Clear(void);
/* 声音接口API */
Std_ReturnType Sound_SetWarningFrequency(uint16 frequencyHz);
Std_ReturnType Sound_SetVolume(uint8 volume);
Std_ReturnType Sound_EnableWarning(boolean enable);
/* PDC控制器主循环示例 */
void PDC_Controller_MainFunction(void)
{
Button_StateType buttonState;
PDC_DistanceDataType distanceData;
/* 获取按钮状态 */
Button_GetState(PDC_BUTTON_ID, &buttonState);
/* 处理按钮按下事件 */
if (buttonState.isPressed) {
static boolean pdcActive = FALSE;
pdcActive = !pdcActive;
PDC_ActivateSensors(pdcActive);
}
/* 获取PDC距离数据 */
PDC_GetDistanceData(&distanceData);
/* 更新显示 */
Display_ShowDistanceInfo(&distanceData);
Display_SetWarningLevel(distanceData.warningLevel);
/* 更新警告声音 */
if (distanceData.warningLevel > 0) {
/* 根据警告级别设置频率 */
uint16 frequency = 300 + (distanceData.warningLevel * 200);
Sound_SetWarningFrequency(frequency);
Sound_EnableWarning(TRUE);
} else {
Sound_EnableWarning(FALSE);
}
}
3. 软件组合与组件描述
3.1 按钮面板组件
按钮面板组件说明:
按钮面板组件是UI设备层的一个重要组件,提供了多种类型的按钮接口。
组件 按钮面板组件(Button Panel Component):
- 职责:
- 提供各种类型的按钮接口
- 处理用户的物理按键输入
- 向应用控制器提供按钮状态
- 功能点:
- 支持多种按钮类型
- 提供按钮状态信息
- 接收控制命令以更新输出状态
接口 简单按钮接口(Simple Button Interface):
- 提供的服务:
- 提供按钮的基本按下/释放状态
- 无状态记忆功能
- 调用方式:
- 被应用控制器调用以获取按钮状态
- 每次调用返回当前状态,不保存历史状态
接口 切换状态接口(Toggle State Interface):
- 提供的服务:
- 提供按钮的开/关状态
- 每次按下会切换状态
- 调用方式:
- 被应用控制器调用以获取切换状态
- 状态在按钮内部保持,直到下一次按下
接口 多状态按钮接口(Multi State Button Interface):
- 提供的服务:
- 支持多个状态值的按钮
- 每次按下循环切换状态
- 调用方式:
- 被应用控制器调用以获取当前状态值
- 按钮内部维护当前状态索引
接口 多状态输出接口(Multi State Output Interface):
- 提供的服务:
- 可以显示多种状态的输出设备
- 例如多色LED灯
- 调用方式:
- 由应用控制器调用以设置输出状态
- 控制器提供具体的状态值
接口 无限旋转旋钮接口(Boundless Rotary Knob Interface):
- 提供的服务:
- 支持无限制旋转的旋钮
- 提供旋转方向和步进值
- 调用方式:
- 被应用控制器调用以获取旋转信息
- 返回旋转方向和旋转步数
/* AUTOSAR按钮面板组件接口定义 */
/* 简单按钮接口数据类型 */
typedef struct {
boolean isPressed; /* 按钮是否被按下 */
uint32 pressDuration; /* 按下持续时间(毫秒) */
} SimpleButton_StateType;
/* 切换状态接口数据类型 */
typedef struct {
boolean isOn; /* 当前是否为开启状态 */
boolean hasChanged; /* 状态是否发生变化 */
} ToggleState_StateType;
/* 多状态按钮接口数据类型 */
typedef struct {
uint8 currentState; /* 当前状态值 */
uint8 stateCount; /* 状态总数 */
boolean hasChanged; /* 状态是否发生变化 */
} MultiStateButton_StateType;
/* 多状态输出接口数据类型 */
typedef struct {
uint8 requestedState; /* 请求设置的状态 */
uint8 maxStates; /* 最大支持的状态数 */
} MultiStateOutput_ControlType;
/* 无限旋转旋钮接口数据类型 */
typedef struct {
int8 direction; /* 旋转方向(1=顺时针, -1=逆时针) */
uint8 steps; /* 旋转步数 */
boolean hasRotated; /* 是否发生旋转 */
} RotaryKnob_StateType;
/* 简单按钮接口API */
Std_ReturnType SimpleButton_GetState(
uint8 buttonId,
SimpleButton_StateType* buttonState);
/* 切换状态接口API */
Std_ReturnType ToggleState_GetState(
uint8 buttonId,
ToggleState_StateType* toggleState);
Std_ReturnType ToggleState_SetState(
uint8 buttonId,
boolean state);
/* 多状态按钮接口API */
Std_ReturnType MultiStateButton_GetState(
uint8 buttonId,
MultiStateButton_StateType* multiState);
Std_ReturnType MultiStateButton_SetState(
uint8 buttonId,
uint8 state);
/* 多状态输出接口API */
Std_ReturnType MultiStateOutput_SetState(
uint8 outputId,
uint8 state);
Std_ReturnType MultiStateOutput_GetCapabilities(
uint8 outputId,
uint8* maxStates);
/* 无限旋转旋钮接口API */
Std_ReturnType RotaryKnob_GetRotation(
uint8 knobId,
RotaryKnob_StateType* knobState);
Std_ReturnType RotaryKnob_ResetRotation(
uint8 knobId);
3.2 跨域控制器组合
跨域控制器组合说明:
跨域控制器组合是AUTOSAR中用于处理多个应用域之间交互的组件结构。
组件 跨域控制器组合(InterDomainController Composition):
- 职责:
- 协调多个域之间的交互
- 管理共享资源
- 处理跨域的用户界面逻辑
- 功能点:
- 多媒体、远程信息处理和HMI域的统一管理
- 资源分配和冲突解决
- 统一的用户体验
组件 多媒体域控制器(Multimedia Domain Controller):
- 职责:
- 控制多媒体应用
- 管理多媒体资源
- 处理多媒体用户界面逻辑
- 功能点:
- 处理音频和视频播放
- 管理媒体源
- 控制媒体显示界面
组件 远程信息处理域控制器(Telematics Domain Controller):
- 职责:
- 控制远程信息处理应用
- 管理通信资源
- 处理远程信息处理界面逻辑
- 功能点:
- 处理导航功能
- 管理通信服务
- 控制信息显示界面
组件 HMI域控制器(HMI Domain Controller):
- 职责:
- 控制HMI应用
- 管理用户输入
- 处理整体界面逻辑
- 功能点:
- 协调用户输入分发
- 管理界面显示优先级
- 控制用户交互流程
组件 跨域资源管理器(Cross-Domain Resource Manager):
- 职责:
- 管理共享资源(如显示屏、音频等)
- 协调不同域控制器的资源请求
- 根据优先级分配资源
- 功能点:
- 资源请求处理
- 冲突解决
- 资源分配策略实施
/* AUTOSAR跨域控制器组合接口定义 */
/* 资源类型定义 */
typedef enum {
RESOURCE_DISPLAY_MAIN = 0, /* 主显示屏资源 */
RESOURCE_DISPLAY_INSTRUMENT, /* 仪表盘显示资源 */
RESOURCE_AUDIO_MAIN, /* 主音频资源 */
RESOURCE_AUDIO_NOTIFICATION, /* 通知音频资源 */
RESOURCE_INPUT_TOUCH, /* 触摸输入资源 */
RESOURCE_INPUT_BUTTONS, /* 按钮输入资源 */
RESOURCE_MAX /* 资源类型总数 */
} ResourceType;
/* 资源优先级定义 */
typedef enum {
PRIORITY_LOW = 0, /* 低优先级 */
PRIORITY_MEDIUM, /* 中优先级 */
PRIORITY_HIGH, /* 高优先级 */
PRIORITY_CRITICAL /* 关键优先级 */
} PriorityType;
/* 域控制器ID定义 */
typedef enum {
DOMAIN_MULTIMEDIA = 0, /* 多媒体域 */
DOMAIN_TELEMATICS, /* 远程信息处理域 */
DOMAIN_HMI, /* HMI域 */
DOMAIN_MAX /* 域控制器总数 */
} DomainIdType;
/* 资源请求数据结构 */
typedef struct {
ResourceType resourceId; /* 请求的资源ID */
PriorityType priority; /* 请求优先级 */
uint32 requestDuration; /* 请求持续时间(毫秒,0表示无限) */
DomainIdType domainId; /* 请求域的ID */
} ResourceRequestType;
/* 资源状态数据结构 */
typedef struct {
ResourceType resourceId; /* 资源ID */
DomainIdType ownerDomainId; /* 当前拥有资源的域ID */
PriorityType currentPriority; /* 当前优先级 */
uint32 remainingTime; /* 剩余时间(毫秒) */
boolean isAvailable; /* 资源是否可用 */
} ResourceStatusType;
/* 资源管理器API */
Std_ReturnType ResourceManager_RequestResource(
const ResourceRequestType* request,
boolean* granted);
Std_ReturnType ResourceManager_ReleaseResource(
DomainIdType domainId,
ResourceType resourceId);
Std_ReturnType ResourceManager_GetResourceStatus(
ResourceType resourceId,
ResourceStatusType* status);
/* 域控制器公共API */
Std_ReturnType DomainController_Init(
DomainIdType domainId);
Std_ReturnType DomainController_NotifyResourceStatus(
DomainIdType domainId,
const ResourceStatusType* status);
Std_ReturnType DomainController_ProcessInput(
DomainIdType domainId,
uint8 inputType,
const uint8* inputData,
uint16 dataLength);
Std_ReturnType DomainController_Update(
DomainIdType domainId);
/* 跨域控制器主函数示例 */
void InterDomainController_MainFunction(void)
{
ResourceStatusType resourceStatus;
/* 更新所有域控制器 */
for (DomainIdType domain = DOMAIN_MULTIMEDIA;
domain < DOMAIN_MAX;
domain++) {
DomainController_Update(domain);
}
/* 处理资源状态更新 */
for (ResourceType resource = RESOURCE_DISPLAY_MAIN;
resource < RESOURCE_MAX;
resource++) {
ResourceManager_GetResourceStatus(resource, &resourceStatus);
/* 通知资源所有者域控制器 */
if (resourceStatus.ownerDomainId < DOMAIN_MAX) {
DomainController_NotifyResourceStatus(
resourceStatus.ownerDomainId,
&resourceStatus);
}
}
}
4. 总结
AUTOSAR HMI、多媒体与远程信息处理接口的设计遵循了明确的分层原则,将功能核心与用户界面逻辑分离,同时支持OEM特定定制。该架构的主要优点包括:
- 模块化设计:通过应用服务、应用控制器和UI设备组件的分离,提高了代码重用性
- 灵活性:可以支持从简单到复杂的各种HMI设计需求
- 标准化接口:为多种应用定义了统一接口,促进不同供应商开发的组件间的互操作性
- OEM定制支持:应用控制器组件可以根据OEM特定需求定制,而不影响核心功能
- 资源管理:集中化的资源管理机制,有效处理多域间的资源冲突
AUTOSAR HMI、多媒体与远程信息处理接口为汽车电子系统中的人机交互提供了坚实的基础,确保了一致的用户体验和系统性能。通过定义标准化的接口和组件,AUTOSAR促进了行业协作和技术创新,同时保持了OEM的品牌特性和差异化。