2. 车载输入系统概述
车载输入系统是驾驶员与车辆之间进行信息交互的“第一触点”。无论是按下方向盘按键、旋转空调旋钮、触摸中控屏,还是说出“打开车窗”,这些动作最终都要被采集、识别、路由并转化为整车可执行的控制信号。CarInputService(车载输入服务)正是位于这一链路中枢的软件服务,它把分散在车身各处的物理按键、触摸、语音、手势等输入源统一抽象,向上层应用提供一致、可配置、可诊断的输入事件接口。
一、车载输入设备的类型
从信号形态和交互方式看,车载输入设备可分为物理输入、触控输入、语音输入、手势/视觉输入四大类。它们各自承担不同的交互职责,并在整车电子电气架构中处于不同位置。
- 物理输入:方向盘多功能按键、中控旋钮、空调面板按键、门板开关、换挡拨片、顶灯开关等。特点是盲操性好、反馈明确、可靠性高,通常通过LIN、CAN或硬线接入。
- 触控输入:中控触摸屏、副驾屏、后排娱乐屏、触控方向盘。特点是可重配置、信息密度高,但需要处理多点触控、滑动、长按、压力感应等复杂事件。
- 语音输入:麦克风阵列、语音唤醒词、自然语言指令。特点是解放双手,但依赖唤醒、降噪、语义理解等环节,输入结果往往是“意图”而非“电平”。
- 手势与视觉输入:红外手势传感器、DMS/OMS摄像头、视线追踪。特点是面向未来座舱,用于非接触控制与驾驶员状态监测。
这些设备在信号层面差异巨大:物理按键输出的是开关量或电阻分压,触摸屏输出的是坐标与触点ID,语音输出的是文本或意图,摄像头输出的是图像帧。CarInputService的核心价值,就是把这些异构信号统一成标准化的输入事件。
二、发展历程:从硬线到服务化
车载输入系统的演进大致经历四个阶段。第一阶段是纯硬线时代,每个按键直接驱动一个继电器或车身控制器,功能固定、线束庞大。第二阶段是总线时代,按键通过LIN/CAN发送报文,BCM集中处理,实现了少量复用和诊断。第三阶段是域控制器时代,输入信号汇聚到座舱域控制器,触摸、语音、按键开始在同一SoC上处理,但各应用仍各自解析。第四阶段是服务化时代,CarInputService作为系统服务运行,统一管理输入设备、事件路由、优先级和策略,应用通过API订阅所需事件。
三、应用场景与典型输入链路
不同场景对输入系统的要求差异明显。以下表格对比了四类典型场景的输入源、关键指标与CarInputService的职责。
| 应用场景 | 主要输入源 | 关键指标 | CarInputService职责 |
|---|---|---|---|
| 驾驶辅助快捷控制 | 方向盘按键、拨片 | 响应延迟 < 50ms,高可靠 | 按键去抖、长按/短按识别、优先级抢占 |
| 中控娱乐交互 | 触摸屏、旋钮 | 触控采样率 ≥ 60Hz,多点支持 | 触点跟踪、手势识别、焦点管理 |
| 语音助手 | 麦克风阵列、唤醒词 | 唤醒率、误唤醒率、端到端时延 | 唤醒事件分发、语音通道仲裁、状态同步 |
| 后排娱乐与手势 | 后排屏、手势传感器 | 多用户隔离、隐私保护 | 区域划分、用户绑定、事件过滤 |
以“方向盘按键唤醒语音”为例,完整链路为:按键硬件产生电平 → MCU采集并发送CAN报文 → CarInputService接收并解析为KeyEvent → 策略引擎判断当前焦点与优先级 → 路由到语音服务 → 语音服务启动收音与识别。若没有统一服务,每个应用都要重复实现CAN解析、去抖和优先级判断,既低效又容易冲突。
四、CarInputService的定位
CarInputService不是简单的“按键驱动”,而是车载输入域的统一接入层、事件路由层与策略控制层。它的定位可以从三个维度理解:
- 对下屏蔽差异:通过设备抽象层统一管理CAN、LIN、I2C、USB、音频、摄像头等输入通道,向上提供一致的设备模型与事件格式。
- 对中统一路由:基于焦点、优先级、用户区域和车辆状态,把输入事件分发给正确的应用或服务,避免“谁抢到算谁的”。
- 对上提供策略:支持按键映射、手势配置、语音唤醒策略、驾驶模式联动等可配置能力,让OEM能够按车型定义交互行为。
五、核心原理与关键流程
CarInputService的内部处理通常遵循“采集—归一化—仲裁—分发—反馈”五步流程。采集层从各总线或驱动获取原始数据;归一化层把不同格式转换为统一的InputEvent;仲裁层根据焦点栈、优先级和车辆状态决定事件归属;分发层通过订阅/发布机制送达目标;反馈层负责回传处理结果与诊断信息。
// 统一输入事件示例(伪代码)
InputEvent {
source: "STEERING_WHEEL_KEY",
type: "KEY_SHORT_PRESS",
code: "KEY_VOICE",
timestamp: 1723456789012,
priority: 80,
zone: "DRIVER",
vehicleState: "DRIVING"
}
// 应用订阅示例
carInput.subscribe("KEY_VOICE", (event) => {
if (event.type === "KEY_SHORT_PRESS") {
voiceAssistant.wakeUp();
}
});
仲裁是其中最容易被低估的环节。例如驾驶中方向盘按键应优先于副驾触摸屏;倒车时中控屏应自动切换到倒车影像并屏蔽娱乐输入;语音唤醒时应短暂抑制部分物理按键以避免误触发。这些规则如果散落在各应用中,维护成本极高,而CarInputService把它们集中为可配置策略。
六、常见误区与复盘
- 误区一:把CarInputService当成按键驱动。实际上它还要处理触摸、语音、手势,并承担路由与仲裁职责。
- 误区二:忽略优先级与焦点。多应用同时订阅同一按键会导致行为不确定,必须在服务层定义优先级和焦点栈。
- 误区三:不做车辆状态联动。行车、倒车、驻车等状态会显著改变输入策略,服务层必须感知车辆状态。
- 误区四:缺少诊断与日志。输入链路长,一旦出现“按键无响应”,需要从硬件、总线、服务到应用逐层排查,统一日志和诊断接口至关重要。
理解车载输入设备的类型、演进脉络和典型场景,是掌握CarInputService定位的前提。它既是硬件与软件之间的翻译层,也是多应用之间的协调者,更是OEM定义座舱交互体验的关键抓手。后续章节将围绕其架构、事件模型、设备抽象与策略引擎逐步展开。