/*
 * 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/activitymanager.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";

message PowerManagerServiceDumpProto {
    // A com.android.server.power.PowerManagerService.Constants object.
    message ConstantsProto {
        optional bool is_no_cached_wake_locks = 1;
    }
    message ActiveWakeLocksProto {
        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 {
        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 {
        optional int32 uid = 1;
        optional string uid_string = 2;
        optional bool is_active = 3;
        optional int32 num_wake_locks = 4;
        optional bool is_process_state_unknown = 5;
        optional .android.app.ProcessState process_state = 6;
    }

    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 {
    optional string name = 1;
    optional int32 reference_count = 2;
}

// A com.android.server.power.PowerManagerService.WakeLock object.
message WakeLockProto {
    message WakeLockFlagsProto {
        // 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;
    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 {
    message StayOnWhilePluggedInProto {
        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 {
        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;
}
