控制车辆和电源管理

车辆模式和电源管理 (VPM) 代理有助于车辆控制软件定义车辆 (SDV) 生态系统的电源系统。

VPM 代理有助于将车辆和电源模式传达给各种软件组件,包括 SDV 代理和 SDV 内的服务软件包。

VPM 代理使 SDV 组件能够跟踪车辆的当前状态,例如其运行模式(例如,停车或驾驶)和电源状态(例如,开启、挂起或关闭)。所有车辆软件的车辆状态都相同;但是,电源状态对于车辆中的每个 SDV 虚拟机都是唯一的。

VPM 代理会向 SDV 系统平台发出信号,以启动特定的电源模式。 此功能可优化功耗,缩短恢复时的启动时间,并有助于确保 SDV 的各种软件组件高效运行。

本页介绍了与 VPM 代理相关的主要要求、限制和依赖项。它向原始设备制造商 (OEM) 和其他 SDV 开发者介绍了 VPM 代理的预期功能和集成指南。

架构

图 1 说明了电源管理架构:

电源管理架构

图 1. 电源管理架构。

VPM 代理从 OEM 的电源管理服务接收电源模式命令(例如关闭和挂起)。

VPM 代理会将这些命令转发给相应的 SDV 代理,并等待代理执行这些命令。这种协调方法有助于确保电源模式之间的平稳安全过渡,从而最大限度地降低数据丢失或系统不稳定的风险。

在所有 SDV 代理完成电源转换后,VPM 代理会通知 OEM,使 OEM 系统能够继续执行任何必要的操作(例如,继续执行下一个状态或关闭)。电源转换是阻塞的;只有当所有 SDV 代理在 OEM 定义的超时时间内执行转换时,才会发生转换。

电源管理的状态机如下图所示:

电源管理状态机

图 2. 电源管理状态机。

VPM 代理与编排和生命周期管理系统协同工作,以通知 SDV 服务软件包任何电源模式更新。这样,服务软件包就可以处理电源转换,并避免中断其运行。如需详细了解如何将电源管理状态与 服务软件包搭配使用以及如何处理 SDV 通信,请参阅 处理挂起和恢复

电源状态

SDV 中允许的电源管理状态如下所示:

状态 说明
REPORT_UNSPECIFIED 如果未指定任何报告,则为默认值。
POWER_OFF_EXIT 虚拟机正在从冷启动启动。SDV 代理以 init.rc 开头。
SUSPEND_TO_RAM_EXIT 虚拟机正在从挂起到 RAM 恢复。SDV 代理从 RAM 恢复,如果订阅了电源状态通知,则会收到有关电源更新的通知。
ON 虚拟机正常运行。
POWER_OFF_ENTER 虚拟机正在准备关机。可以提前清理的 OEM 应用应在此状态下清理。OEM 应用仍可以依赖于在此阶段运行的 SDV 代理。SDV 代理不应在此阶段挂起或关机,因为 OEM 应用可能仍需要与它们通信。
SUSPEND_TO_RAM_ENTER 虚拟机正在准备挂起到 RAM。可以提前清理的 OEM 应用应在此状态下清理。OEM 应用仍可以依赖于在此阶段运行的 SDV 代理。SDV 代理不应在此阶段挂起或关机,因为 OEM 应用可能仍需要与它们通信。
WAIT_FOR_FINISH 虚拟机已完成初始清理,并正在等待 OEM 的信号以完成或取消关闭或挂起。
SHUTDOWN_CANCELLED OEM 已请求取消关闭准备。此请求最晚可在 WAIT_FOR_FINISH 之前发生。生命周期管理器会请求原始设备制造商应用撤消挂起或关机准备。
POWER_OFF_POST_FINISH 在收到 OEM 的 FINISH_SHUTDOWN 请求后,虚拟机将完成最终清理并关闭底层平台。SDV 代理应在关机之前进行清理。
SUSPEND_TO_RAM_POST_FINISH 虚拟机即将挂起到 RAM,并将底层平台挂起到 RAM。OEM 应用不应在此时依赖于 SDV 代理,因为它们也会被挂起。SDV 代理应在挂起之前执行清理。

接收有关车辆状态的更新

VPM 代理从 OEM 的车辆控制服务软件包接收有关当前车辆模式的更新。

然后,代理会通过标准化的 SDV 通信堆栈将此信息转发给相关的 SDV 组件。这会通知所有 SDV 组件车辆的运行状态,以便它们可以相应地调整其行为。

如需接收有关车辆状态的更新,请在服务软件包中使用以下 VSIDL 配置:

package: "com.sdv.google.vpm.vehicle.client.subscriber"

service_bundle {
    name: "VehicleStateSubscriber"
    //Subscriber to the vehicle state updates.
    subscriber {
        message: "com.sdv.google.vpm.vehicle.VehicleStateChange"
    }
}

车辆模式和转换是非阻塞的,并且是异步的。与电源转换不同,不会强制执行任何状态机。

SDV 中允许的车辆状态如下所示:

状态 说明
VEHICLE_STATE_UNSPECIFIED 如果未指定任何状态,则为车辆状态的默认值。
LOW_POWER 从用户的角度来看,汽车已关闭,但 PCU 仍可以检测到汽车已开启。
SOFTWARE_UPDATE 车辆的部分或全部正在进行软件更新。这些是与非 SDV 相关的软件更新。
PARK 在没有客户的情况下,很少有 ECU 用于此特定活动。
LIFE_ON_BOARD 舒适 ECU(例如座椅加热器、集群和中央面板)已提供且可用,或者检测到客户活动(例如打开车门或解锁汽车)。
VEHICLE_ON 发动机 ECU 已提供,发动机正在运行,并且无法驾驶。
TRACTION_ON 发动机 ECU 已提供,发动机正在运行,并且可以驾驶。

使用 VPM 代理控制车辆和电源管理

使用以下 VSIDL 定义来实现控制 SDV 中电源状态机的服务软件包:

package: "com.sdv.google.vpm.client"

service_bundle {
    name: "VpmSystemClient"

    //Client for VPM system interface.
    client {
        service: "com.sdv.google.vpm.VpmSystemService"
    }

    //Server to VPM notification interface.
    server {
        service: "com.sdv.google.vpm.client.PowerNotificationService"
    }
}

在实现软件包并将 ACL 添加到 VPM 代理后,软件包可以向 VPM 代理发送 RPC 请求,并在定义的服务器上接收电源状态通知。