/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";
package com.android.server.power;

option java_multiple_files = true;

import "frameworks/base/core/proto/android/app/enums.proto";
import "frameworks/base/core/proto/android/content/intent.proto";
import "frameworks/base/core/proto/android/os/batterymanager.proto";
import "frameworks/base/core/proto/android/os/looper.proto";
import "frameworks/base/core/proto/android/os/powermanager.proto";
import "frameworks/base/core/proto/android/os/worksource.proto";
import "frameworks/base/core/proto/android/providers/settings.proto";
import "frameworks/base/core/proto/android/server/wirelesschargerdetector.proto";
import "frameworks/base/core/proto/android/view/display.proto";
import "frameworks/base/libs/incident/proto/android/privacy.proto";

message PowerManagerServiceDumpProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    // A com.android.server.power.PowerManagerService.Constants object.
    message ConstantsProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional bool is_no_cached_wake_locks = 1;
    }
    message ActiveWakeLocksProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional bool is_cpu = 1;
        optional bool is_screen_bright = 2;
        optional bool is_screen_dim = 3;
        optional bool is_button_bright = 4;
        optional bool is_proximity_screen_off = 5;
        // only set if already awake
        optional bool is_stay_awake = 6;
        optional bool is_doze = 7;
        optional bool is_draw = 8;
    }
    message UserActivityProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional bool is_screen_bright = 1;
        optional bool is_screen_dim = 2;
        optional bool is_screen_dream = 3;
    }
    // A com.android.server.power.PowerManagerService.UidState object.
    message UidStateProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 uid = 1;
        optional string uid_string = 2;
        optional bool is_active = 3;
        optional int32 num_wake_locks = 4;
        optional .android.app.ProcessStateEnum process_state = 5;
    }

    optional ConstantsProto constants = 1;
    // A bitfield that indicates what parts of the power state have
    // changed and need to be recalculated.
    optional int32 dirty = 2;
    // Indicates whether the device is awake or asleep or somewhere in between.
    optional .android.os.PowerManagerInternalProto.Wakefulness wakefulness = 3;
    optional bool is_wakefulness_changing = 4;
    // True if the device is plugged into a power source.
    optional bool is_powered = 5;
    // The current plug type
    optional .android.os.BatteryManagerProto.PlugType plug_type = 6;
    // The current battery level percentage.
    optional int32 battery_level = 7;
    // The battery level percentage at the time the dream started.
    optional int32 battery_level_when_dream_started = 8;
    // The current dock state.
    optional .android.content.IntentProto.DockState dock_state = 9;
    // True if the device should stay on.
    optional bool is_stay_on = 10;
    // True if the proximity sensor reads a positive result.
    optional bool is_proximity_positive = 11;
    // True if boot completed occurred.  We keep the screen on until this happens.
    optional bool is_boot_completed = 12;
    // True if systemReady() has been called.
    optional bool is_system_ready = 13;
    // True if auto-suspend mode is enabled.
    optional bool is_hal_auto_suspend_mode_enabled = 14;
    // True if interactive mode is enabled.
    optional bool is_hal_auto_interactive_mode_enabled = 15;
    // Summarizes the state of all active wakelocks.
    optional ActiveWakeLocksProto active_wake_locks = 16;
    // Have we scheduled a message to check for long wake locks?  This is when
    // we will check. (In milliseconds timestamp)
    optional int64 notify_long_scheduled_ms = 17;
    // Last time we checked for long wake locks. (In milliseconds timestamp)
    optional int64 notify_long_dispatched_ms = 18;
    // The time we decided to do next long check. (In milliseconds timestamp)
    optional int64 notify_long_next_check_ms = 19;
    // Summarizes the effect of the user activity timer.
    optional UserActivityProto user_activity = 20;
    // If true, instructs the display controller to wait for the proximity
    // sensor to go negative before turning the screen on.
    optional bool is_request_wait_for_negative_proximity = 21;
    // True if MSG_SANDMAN has been scheduled.
    optional bool is_sandman_scheduled = 22;
    // True if the sandman has just been summoned for the first time since entering
    // the dreaming or dozing state.  Indicates whether a new dream should begin.
    optional bool is_sandman_summoned = 23;
    // If true, the device is in low power mode.
    optional bool is_low_power_mode_enabled = 24;
    // True if the battery level is currently considered low.
    optional bool is_battery_level_low = 25;
    // True if we are currently in light device idle mode.
    optional bool is_light_device_idle_mode = 26;
    // True if we are currently in device idle mode.
    optional bool is_device_idle_mode = 27;
    // Set of app ids that we will always respect the wake locks for.
    repeated int32 device_idle_whitelist = 28;
    // Set of app ids that are temporarily allowed to acquire wakelocks due to
    // high-pri message
    repeated int32 device_idle_temp_whitelist = 29;
    // Timestamp of the last time the device was awoken.
    optional int64 last_wake_time_ms = 30;
    // Timestamp of the last time the device was put to sleep.
    optional int64 last_sleep_time_ms = 31;
    // Timestamp of the last call to user activity.
    optional int64 last_user_activity_time_ms = 32;
    optional int64 last_user_activity_time_no_change_lights_ms = 33;
    // Timestamp of last interactive power hint.
    optional int64 last_interactive_power_hint_time_ms = 34;
    // Timestamp of the last screen brightness boost.
    optional int64 last_screen_brightness_boost_time_ms = 35;
    // True if screen brightness boost is in progress.
    optional bool is_screen_brightness_boost_in_progress = 36;
    // True if the display power state has been fully applied, which means the
    // display is actually on or actually off or whatever was requested.
    optional bool is_display_ready = 37;
    // True if the wake lock suspend blocker has been acquired.
    optional bool is_holding_wake_lock_suspend_blocker = 38;
    // The suspend blocker used to keep the CPU alive when the display is on, the
    // display is getting ready or there is user activity (in which case the
    // display must be on).
    optional bool is_holding_display_suspend_blocker = 39;
    // Settings and configuration
    optional PowerServiceSettingsAndConfigurationDumpProto settings_and_configuration = 40;
    // Sleep timeout in ms. This can be -1.
    optional sint32 sleep_timeout_ms = 41;
    // Screen off timeout in ms
    optional int32 screen_off_timeout_ms = 42;
    // Screen dim duration in ms
    optional int32 screen_dim_duration_ms = 43;
    // We are currently in the middle of a batch change of uids.
    optional bool are_uids_changing = 44;
    // Some uids have actually changed while mUidsChanging was true.
    optional bool are_uids_changed = 45;
    // List of UIDs and their states
    repeated UidStateProto uid_states = 46;
    optional .android.os.LooperProto looper = 47;
    // List of all wake locks acquired by applications.
    repeated WakeLockProto wake_locks = 48;
    // List of all suspend blockers.
    repeated SuspendBlockerProto suspend_blockers = 49;
    optional WirelessChargerDetectorProto wireless_charger_detector = 50;
}

// A com.android.server.power.PowerManagerService.SuspendBlockerImpl object.
message SuspendBlockerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional string name = 1;
    optional int32 reference_count = 2;
}

// A com.android.server.power.PowerManagerService.WakeLock object.
message WakeLockProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    message WakeLockFlagsProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        // Turn the screen on when the wake lock is acquired.
        optional bool is_acquire_causes_wakeup = 1;
        // When this wake lock is released, poke the user activity timer
        // so the screen stays on for a little longer.
        optional bool is_on_after_release = 2;
    }

    optional .android.os.PowerManagerProto.WakeLockLevel lock_level = 1;
    optional string tag = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
    optional WakeLockFlagsProto flags = 3;
    optional bool is_disabled = 4;
    // Acquire time in ms
    optional int64 acq_ms = 5;
    optional bool is_notified_long = 6;
    // Owner UID
    optional int32 uid = 7;
    // Owner PID
    optional int32 pid = 8;
    optional .android.os.WorkSourceProto work_source = 9;
}

message PowerServiceSettingsAndConfigurationDumpProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    message StayOnWhilePluggedInProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional bool is_stay_on_while_plugged_in_ac = 1;
        optional bool is_stay_on_while_plugged_in_usb = 2;
        optional bool is_stay_on_while_plugged_in_wireless = 3;
    }
    message ScreenBrightnessSettingLimitsProto {
        option (.android.msg_privacy).dest = DEST_AUTOMATIC;

        optional int32 setting_minimum = 1;
        optional int32 setting_maximum = 2;
        optional int32 setting_default = 3;
        optional int32 setting_for_vr_default = 4;
    }

    // True to decouple auto-suspend mode from the display state.
    optional bool is_decouple_hal_auto_suspend_mode_from_display_config = 1;
    // True to decouple interactive mode from the display state.
    optional bool is_decouple_hal_interactive_mode_from_display_config = 2;
    // True if the device should wake up when plugged or unplugged.
    optional bool is_wake_up_when_plugged_or_unplugged_config = 3;
    // True if the device should wake up when plugged or unplugged in theater mode.
    optional bool is_wake_up_when_plugged_or_unplugged_in_theater_mode_config = 4;
    // True if theater mode is enabled
    optional bool is_theater_mode_enabled = 5;
    // True if the device should suspend when the screen is off due to proximity.
    optional bool is_suspend_when_screen_off_due_to_proximity_config = 6;
    // True if dreams are supported on this device.
    optional bool are_dreams_supported_config = 7;
    // Default value for dreams enabled
    optional bool are_dreams_enabled_by_default_config = 8;
    // Default value for dreams activate-on-sleep
    optional bool are_dreams_activated_on_sleep_by_default_config = 9;
    // Default value for dreams activate-on-dock
    optional bool are_dreams_activated_on_dock_by_default_config = 10;
    // True if dreams can run while not plugged in.
    optional bool are_dreams_enabled_on_battery_config = 11;
    // Minimum battery level to allow dreaming when powered.
    // Use -1 to disable this safety feature.
    optional sint32 dreams_battery_level_minimum_when_powered_config = 12;
    // Minimum battery level to allow dreaming when not powered.
    // Use -1 to disable this safety feature.
    optional sint32 dreams_battery_level_minimum_when_not_powered_config = 13;
    // If the battery level drops by this percentage and the user activity
    // timeout has expired, then assume the device is receiving insufficient
    // current to charge effectively and terminate the dream.  Use -1 to disable
    // this safety feature.
    optional sint32 dreams_battery_level_drain_cutoff_config = 14;
    // True if dreams are enabled by the user.
    optional bool are_dreams_enabled_setting = 15;
    // True if dreams should be activated on sleep.
    optional bool are_dreams_activate_on_sleep_setting = 16;
    // True if dreams should be activated on dock.
    optional bool are_dreams_activate_on_dock_setting = 17;
    // True if doze should not be started until after the screen off transition.
    optional bool is_doze_after_screen_off_config = 18;
    // If true, the device is in low power mode.
    optional bool is_low_power_mode_setting = 19;
    // Current state of whether the settings are allowing auto low power mode.
    optional bool is_auto_low_power_mode_configured = 20;
    // The user turned off low power mode below the trigger level
    optional bool is_auto_low_power_mode_snoozing = 21;
    // The minimum screen off timeout, in milliseconds.
    optional int32 minimum_screen_off_timeout_config_ms = 22;
    // The screen dim duration, in milliseconds.
    optional int32 maximum_screen_dim_duration_config_ms = 23;
    // The maximum screen dim time expressed as a ratio relative to the screen off timeout.
    optional float maximum_screen_dim_ratio_config = 24;
    // The screen off timeout setting value in milliseconds.
    optional int32 screen_off_timeout_setting_ms = 25;
    // The sleep timeout setting value in milliseconds. Default value is -1.
    optional sint32 sleep_timeout_setting_ms = 26;
    // The maximum allowable screen off timeout according to the device administration policy.
    optional int32 maximum_screen_off_timeout_from_device_admin_ms = 27;
    optional bool is_maximum_screen_off_timeout_from_device_admin_enforced_locked = 28;
    // The stay on while plugged in setting.
    // A set of battery conditions under which to make the screen stay on.
    optional StayOnWhilePluggedInProto stay_on_while_plugged_in = 29;
    // The screen brightness setting, from 0 to 255.
    // Use -1 if no value has been set.
    optional sint32 screen_brightness_setting = 30;
    // The screen auto-brightness adjustment setting, from -1 to 1.
    // Use 0 if there is no adjustment.
    optional float screen_auto_brightness_adjustment_setting = 31;
    // The screen brightness mode.
    optional .android.providers.settings.SettingsProto.ScreenBrightnessMode screen_brightness_mode_setting = 32;
    // The screen brightness setting override from the window manager
    // to allow the current foreground activity to override the brightness.
    // Use -1 to disable.
    optional sint32 screen_brightness_override_from_window_manager = 33;
    // The user activity timeout override from the window manager
    // to allow the current foreground activity to override the user activity
    // timeout. Use -1 to disable.
    optional sint64 user_activity_timeout_override_from_window_manager_ms = 34;
    // The window manager has determined the user to be inactive via other means.
    // Set this to false to disable.
    optional bool is_user_inactive_override_from_window_manager = 35;
    // The screen brightness setting override from the settings application
    // to temporarily adjust the brightness until next updated,
    // Use -1 to disable.
    optional sint32 temporary_screen_brightness_setting_override = 36;
    // The screen brightness adjustment setting override from the settings
    // application to temporarily adjust the auto-brightness adjustment factor
    // until next updated, in the range -1..1.
    // Use NaN to disable.
    optional float temporary_screen_auto_brightness_adjustment_setting_override = 37;
    // The screen state to use while dozing.
    optional .android.view.DisplayProto.DisplayState doze_screen_state_override_from_dream_manager = 38;
    // The screen brightness to use while dozing.
    optional float dozed_screen_brightness_override_from_dream_manager = 39;
    // Screen brightness settings limits.
    optional ScreenBrightnessSettingLimitsProto screen_brightness_setting_limits = 40;
    // The screen brightness setting, from 0 to 255, to be used while in VR Mode.
    optional int32 screen_brightness_for_vr_setting = 41;
    // True if double tap to wake is enabled
    optional bool is_double_tap_wake_enabled = 42;
    // True if we are currently in VR Mode.
    optional bool is_vr_mode_enabled = 43;
}
