Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55367e61 authored by Steve Paik's avatar Steve Paik
Browse files

Refactor Power Management

- Remove Boot Reason property
- Add extra states to AP_POWER_STATE_REPORT

Bug: 112548962
Test: vhal_emulator.py

Change-Id: I96662820a02141256c53546db662d1e05e1925ae
(cherry picked from commit b863f86ff7fad325c66c9a47a3a3e18a602adab3)
parent 6eedcb5a
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ hidl_interface {
        "StatusCode",
        "SubscribeFlags",
        "SubscribeOptions",
        "VehicleApPowerBootupReason",
        "VehicleApPowerStateConfigFlag",
        "VehicleApPowerStateReport",
        "VehicleApPowerStateReq",
+2 −7
Original line number Diff line number Diff line
@@ -611,12 +611,12 @@ const ConfigDeclaration kVehicleProperties[]{
                .access = VehiclePropertyAccess::READ,
                .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
                .configArray = {3}},
     .initialValue = {.int32Values = {toInt(VehicleApPowerStateReq::ON_FULL), 0}}},
     .initialValue = {.int32Values = {toInt(VehicleApPowerStateReq::ON), 0}}},

    {.config = {.prop = toInt(VehicleProperty::AP_POWER_STATE_REPORT),
                .access = VehiclePropertyAccess::WRITE,
                .changeMode = VehiclePropertyChangeMode::ON_CHANGE},
     .initialValue = {.int32Values = {toInt(VehicleApPowerStateReport::BOOT_COMPLETE), 0}}},
     .initialValue = {.int32Values = {toInt(VehicleApPowerStateReport::WAIT_FOR_VHAL), 0}}},

    {.config = {.prop = toInt(VehicleProperty::DISPLAY_BRIGHTNESS),
                .access = VehiclePropertyAccess::READ_WRITE,
@@ -624,11 +624,6 @@ const ConfigDeclaration kVehicleProperties[]{
                .areaConfigs = {VehicleAreaConfig{.minInt32Value = 0, .maxInt32Value = 100}}},
     .initialValue = {.int32Values = {100}}},

    {.config = {.prop = toInt(VehicleProperty::AP_POWER_BOOTUP_REASON),
                .access = VehiclePropertyAccess::READ,
                .changeMode = VehiclePropertyChangeMode::STATIC},
     .initialValue = {.int32Values = {toInt(VehicleApPowerBootupReason::USER_POWER_ON)}}},

    {
        .config = {.prop = OBD2_LIVE_FRAME,
                   .access = VehiclePropertyAccess::READ,
+0 −7
Original line number Diff line number Diff line
@@ -156,13 +156,6 @@ StatusCode EmulatedVehicleHal::set(const VehiclePropValue& propValue) {
                // Placeholder for future implementation of VMS property in the default hal. For
                // now, just returns OK; otherwise, hal clients crash with property not supported.
                return StatusCode::OK;
            case AP_POWER_STATE_REPORT:
                // This property has different behavior between get/set.  When it is set, the value
                //  goes to the vehicle but is NOT updated in the property store back to Android.
                // Commented out for now, because it may mess up automated testing that use the
                //  emulator interface.
                // getEmulatorOrDie()->doSetValueFromClient(propValue);
                return StatusCode::OK;
        }
    }

+37 −66
Original line number Diff line number Diff line
@@ -1125,7 +1125,7 @@ enum VehicleProperty : int32_t {
    /**
     * Property to control power state of application processor
     *
     * It is assumed that AP's power state is controller by separate power
     * It is assumed that AP's power state is controlled by a separate power
     * controller.
     *
     * For configuration information, VehiclePropConfig.configArray can have bit flag combining
@@ -1136,7 +1136,7 @@ enum VehicleProperty : int32_t {
     *                    0 if not used.
     *
     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
     * @access VEHICLE_PROP_ACCESS_READ
     * @access VehiclePropertyAccess:READ
     */
    AP_POWER_STATE_REQ = (
        0x0A00
@@ -1155,7 +1155,7 @@ enum VehicleProperty : int32_t {

     *
     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
     * @access VEHICLE_PROP_ACCESS_WRITE
     * @access VehiclePropertyAccess:WRITE
     */
    AP_POWER_STATE_REPORT = (
        0x0A01
@@ -2267,17 +2267,8 @@ enum VehicleApPowerStateConfigFlag : int32_t /* NOTE: type is guessed */ {
};

enum VehicleApPowerStateReq : int32_t {
    /** vehicle HAL will never publish this state to AP */
    OFF = 0,

    /** vehicle HAL will never publish this state to AP */
    DEEP_SLEEP = 1,

    /** AP is on but display must be off. */
    ON_DISP_OFF = 2,

    /** AP is on with display on. This state allows full user interaction. */
    ON_FULL = 3,
    /** Transition Android from WAIT_FOR_VHAL to ON state */
    ON = 0,

    /**
     * The power controller has requested AP to shutdown. AP can either enter
@@ -2287,8 +2278,16 @@ enum VehicleApPowerStateReq : int32_t {
     * system.
     *
     * int32Values[1] : one of enum_vehicle_ap_power_state_shutdown_param_type
     *
     * SHUTDOWN_PRPARE may be requested from either WAIT_FOR_VHAL or ON states.
     */
    SHUTDOWN_PREPARE = 4,
    SHUTDOWN_PREPARE = 1,

    /** Cancel the shutdown and transition from SHUTDOWN_PREPARE to WAIT_FOR_VHAL state */
    CANCEL_SHUTDOWN = 2,

    /** VHAL is finished with shutdown procedures and ready for Android to suspend/shutdown */
    FINISHED = 3,
};

/**
@@ -2314,26 +2313,30 @@ enum VehicleApPowerStateShutdownParam : int32_t {

enum VehicleApPowerStateReport : int32_t {
    /**
     * AP has finished boot up, and can start shutdown if requested by power
     * controller.
     * Device has booted, CarService has initialized and is ready to accept commands from VHAL.
     * Device starts in WAIT_FOR_VHAL state.  The user is not logged in, and vendor apps/services
     * are expected to control the display and audio.
     */
    BOOT_COMPLETE = 0x1,
    WAIT_FOR_VHAL = 0x1,

    /**
     * AP is entering deep sleep state. How this state is implemented may vary
     * depending on each H/W, but AP's power must be kept in this state.
     * AP is ready to suspend and has entered WAIT_FOR_FINISHED state.
     *
     * int32Values[1]: Time to turn on AP in secs. Power controller may turn on
     *                 AP after specified time so that AP can run tasks like
     *                 update. If it is set to 0, there is no wake up, and power
     *                 controller may not necessarily support wake-up.
     */
    DEEP_SLEEP_ENTRY = 0x2,

    /**
     * AP is exiting from deep sleep state, and is in
     * VehicleApPowerState#SHUTDOWN_PREPARE state.
     * The power controller may change state to other ON states based on the
     * current state.
     * AP is exiting from deep sleep state, and is in WAIT_FOR_VHAL state.
     */
    DEEP_SLEEP_EXIT = 0x3,

    /**
     * AP remains in SHUTDOWN_PREPARE state as idle and cleanup tasks execute.
     *
     * int32Values[1]: Time to postpone shutdown in ms. Maximum value can be
     *                 5000 ms.
     *                 If AP needs more time, it will send another POSTPONE
@@ -2342,63 +2345,31 @@ enum VehicleApPowerStateReport : int32_t {
    SHUTDOWN_POSTPONE = 0x4,

    /**
     * AP is starting shutting down. When system completes shutdown, everything
     * will stop in AP as kernel will stop all other contexts. It is
     * responsibility of vehicle HAL or lower level to synchronize that state
     * with external power controller. As an example, some kind of ping
     * with timeout in power controller can be a solution.
     * AP is ready to shutdown and has entered WAIT_FOR_FINISHED state.
     *
     * int32Values[1]: Time to turn on AP in secs. Power controller may turn on
     *                 AP after specified time so that AP can run tasks like
     *                 update. If it is set to 0, there is no wake up, and power
     *                 controller may not necessarily support wake-up. If power
     *                 controller turns on AP due to timer, it must start with
     *                 VehicleApPowerState#ON_DISP_OFF state, and after
     *                 receiving VehicleApPowerSetState#BOOT_COMPLETE, it shall
     *                 do state transition to
     *                 VehicleApPowerState#SHUTDOWN_PREPARE.
     *                 controller may not necessarily support wake-up.
     */
    SHUTDOWN_START = 0x5,

    /**
     * User has requested to turn off headunit's display, which is detected in
     * android side.
     * The power controller may change the power state to
     * VehicleApPowerState#ON_DISP_OFF.
     */
    DISPLAY_OFF = 0x6,

    /**
     * User has requested to turn on headunit's display, most probably from power
     * key input which is attached to headunit. The power controller may change
     * the power state to VehicleApPowerState#ON_FULL.
     */
    DISPLAY_ON = 0x7,
};

/**
 * Enum to represent bootup reason.
 */
enum VehicleApPowerBootupReason : int32_t {
    /**
     * Power on due to user's pressing of power key or rotating of ignition
     * switch.
     * AP has transitioned from WAIT_FOR_VHAL state to ON.
     */
    USER_POWER_ON = 0,
    ON = 0x6,

    /**
     * Automatic power on triggered by door unlock or any other kind of automatic
     * user detection.
     * AP has transitions to SHUTDOWN_PREPARE state.  In this state, Garage Mode will execute idle
     * tasks, and other services that have registered for this state transition may execute
     * cleanup activities.
     */
    USER_UNLOCK = 1,
    SHUTDOWN_PREPARE = 0x7,

    /**
     * Automatic power on triggered by timer. This only happens when AP has asked
     * wake-up after
     * certain time through time specified in
     * VehicleApPowerSetState#SHUTDOWN_START.
     * AP has transitioned from SHUTDOWN_PREPARE state to WAIT_FOR_VHAL.
     */
    TIMER = 2,
    SHUTDOWN_CANCELLED = 0x8,
};

enum VehicleHwKeyInputAction : int32_t {