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不是简单的“按键驱动”,而是车载输入域的统一接入层、事件路由层与策略控制层。它的定位可以从三个维度理解:

  1. 对下屏蔽差异:通过设备抽象层统一管理CAN、LIN、I2C、USB、音频、摄像头等输入通道,向上提供一致的设备模型与事件格式。
  2. 对中统一路由:基于焦点、优先级、用户区域和车辆状态,把输入事件分发给正确的应用或服务,避免“谁抢到算谁的”。
  3. 对上提供策略:支持按键映射、手势配置、语音唤醒策略、驾驶模式联动等可配置能力,让OEM能够按车型定义交互行为。
一句话定位:CarInputService是座舱输入域的“交通枢纽”——所有输入在这里汇聚、被理解、被仲裁,然后被精准送达。

五、核心原理与关键流程

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定义座舱交互体验的关键抓手。后续章节将围绕其架构、事件模型、设备抽象与策略引擎逐步展开。

车载输入系统分层与 CarInputService 定位 异构输入源 → 统一接入 → 事件仲裁 → 应用消费 输入设备层 物理按键 / 旋钮 CAN / LIN / 硬线 触摸屏 / 触控板 I2C / USB / SPI 麦克风 / 语音 音频流 / 唤醒词 手势 / 摄像头 红外 / 图像帧 车身开关 / 传感器 门板 / 顶灯 / 换挡 CarInputService 统一接入 · 事件归一化 · 优先级仲裁 · 焦点路由 · 策略配置 设备抽象层 事件路由层 策略仲裁层 诊断日志 应用与服务消费层 驾驶辅助控制 中控娱乐交互 语音助手 后排娱乐 / 手势 车辆状态联动