汽车电源管理
CarPowerManagementService 实现 Suspend To RAM 以及 Shutdown;
CarPowerManager 电源状态改变时的回调;
深度睡眠功能(将 Android 挂起到 RAM)在内核中实现。此功能以位于 /sys/power/state 的特殊文件形式提供给用户空间。AAOS 通过将 mem 写入此文件而挂起。
代码路径
内容 | 目录 |
---|---|
与 CarPowerManager 相关的代码 | packages/services/Car/car-lib/src/android/car/hardware/power |
CarPowerManagementService 等等 | packages/services/Car/service/src/com/android/car |
处理 VHAL 的服务,如 VehicleHal 和 HAlClient | packages/services/Car/service/src/com/android/car/hal |
VHAL 接口和属性定义 | hardware/interfaces/automotive/vehicle/2.0 |
介绍 CarPowerManager 的示例应用 | packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink |
CarServiceHelperService 相关的代码 | frameworks/opt/car/services |
libsuspend | system/core/libsuspend |
进入到 Suspend To RAM
当 VHAL 层调用 doHalEvent(createApPowerStateReq(VehicleApPowerStateReq::SHUTDOWN_PREPARE, (int)VehicleApPowerStateShutdownParam::CAN_SLEEP));
表明收到请求进入 Suspend To RAM。
时序图
VHAL 层的调用
doHalEvent 这个函数实现的功能需要从 VehicleHalManager.cpp
这个文件的 init 函数看起。
void VehicleHalManager::init() {
ALOGI("VehicleHalManager::init");
mHidlVecOfVehiclePropValuePool.resize(kMaxHidlVecOfVehiclPropValuePoolSize);
//起一个线程处理EventQueue
mBatchingConsumer.run(&mEventQueue,
kHalEventBatchingTimeWindow,
std::bind(&VehicleHalManager::onBatchHalEvent,
this, _1));
//doHalEvent 实际上就是 &VehicleHalManager::onHalEvent
mHal->init(&mValueObjectPool,
std::bind(&VehicleHalManager::onHalEvent, this, _1),
std::bind(&VehicleHalManager::onHalPropertySetError, this,
_1, _2