【Android】电源管理,进入和退出 Suspend To RAM

汽车电源管理

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值