15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROMEOS_DBUS_POWER_MANAGER_CLIENT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROMEOS_DBUS_POWER_MANAGER_CLIENT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/chromeos_export.h" 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/dbus/dbus_client.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_client_implementation_type.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "third_party/cros_system_api/dbus/service_constants.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace power_manager { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PowerManagementPolicy; 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass PowerSupplyProperties; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback used for getting the current screen brightness. The param is in the 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// range [0.0, 100.0]. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef base::Callback<void(double)> GetScreenBrightnessPercentCallback; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PowerManagerClient is used to communicate with the power manager. 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class CHROMEOS_EXPORT PowerManagerClient : public DBusClient { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interface for observing changes from the power manager. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Observer { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Observer() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called if the power manager process restarts. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void PowerManagerRestarted() {} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the brightness is changed. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |level| is of the range [0, 100]. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |user_initiated| is true if the action is initiated by the user. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BrightnessChanged(int level, bool user_initiated) {} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Called when peripheral device battery status is received. 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |path| is the sysfs path for the battery of the peripheral device. 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |name| is the human readble name of the device. 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |level| within [0, 100] represents the device battery level and -1 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // means an unknown level or device is disconnected. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void PeripheralBatteryStatusReceived(const std::string& path, 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& name, 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int level) {} 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Called when updated information about the power supply is available. 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The status is automatically updated periodically, but 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // RequestStatusUpdate() can be used to trigger an immediate update. 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void PowerChanged( 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const power_manager::PowerSupplyProperties& proto) {} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when the system is about to suspend. Suspend is deferred until 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // all observers' implementations of this method have finished running. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If an observer wishes to asynchronously delay suspend, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // PowerManagerClient::GetSuspendReadinessCallback() may be called from 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // within SuspendImminent(). The returned callback must be called once 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the observer is ready for suspend. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SuspendImminent() {} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Called when a suspend attempt (previously announced via 700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // SuspendImminent()) has completed. The system may not have actually 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // suspended (if e.g. the user canceled the suspend attempt). 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SuspendDone(const base::TimeDelta& sleep_duration) {} 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Called when the system is about to resuspend from a dark resume. Like 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // SuspendImminent(), the suspend will be deferred until all observers have 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // finished running and those observers that wish to asynchronously delay 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // the suspend should call PowerManagerClient::GetSuspendReadinessCallback() 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // from within this method. The returned callback should be run once the 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // observer is ready for suspend. 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void DarkSuspendImminent() {} 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when the power button is pressed or released. 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void PowerButtonEventReceived(bool down, 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeTicks& timestamp) {} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when the device's lid is opened or closed. 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void LidEventReceived(bool open, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeTicks& timestamp) {} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Called when the idle action will be performed after 910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |time_until_idle_action|. 920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void IdleActionImminent( 930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::TimeDelta& time_until_idle_action) {} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called after IdleActionImminent() when the inactivity timer is reset 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // before the idle action has been performed. 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void IdleActionDeferred() {} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds and removes the observer. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddObserver(Observer* observer) = 0; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RemoveObserver(Observer* observer) = 0; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasObserver(Observer* observer) = 0; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Decreases the screen brightness. |allow_off| controls whether or not 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it's allowed to turn off the back light. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DecreaseScreenBrightness(bool allow_off) = 0; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Increases the screen brightness. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void IncreaseScreenBrightness() = 0; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the screen brightness to |percent|, in the range [0.0, 100.0]. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |gradual| is true, the transition will be animated. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetScreenBrightnessPercent(double percent, bool gradual) = 0; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Asynchronously gets the current screen brightness, in the range 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // [0.0, 100.0]. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetScreenBrightnessPercent( 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GetScreenBrightnessPercentCallback& callback) = 0; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Decreases the keyboard brightness. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DecreaseKeyboardBrightness() = 0; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Increases the keyboard brightness. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void IncreaseKeyboardBrightness() = 0; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Requests an updated copy of the power status. Observer::PowerChanged() 128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // will be called asynchronously. 129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void RequestStatusUpdate() = 0; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Requests suspend of the system. 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RequestSuspend() = 0; 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests restart of the system. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestRestart() = 0; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests shutdown of the system. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestShutdown() = 0; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the power manager that the user is active (i.e. generating input 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // events). 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void NotifyUserActivity(power_manager::UserActivityType type) = 0; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the power manager that a video is currently playing. It also 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // includes whether or not the containing window for the video is fullscreen. 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void NotifyVideoActivity(bool is_fullscreen) = 0; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tells the power manager to begin using |policy|. 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetPolicy( 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const power_manager::PowerManagementPolicy& policy) = 0; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells powerd whether or not we are in a projecting mode. This is used to 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // adjust idleness thresholds and derived, on this side, from the number of 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // video outputs attached. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetIsProjecting(bool is_projecting) = 0; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a callback that can be called by an observer to report 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // readiness for suspend. See Observer::SuspendImminent(). 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::Closure GetSuspendReadinessCallback() = 0; 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Returns the number of callbacks returned by GetSuspendReadinessCallback() 1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // for the current suspend attempt but not yet called. Used by tests. 1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual int GetNumPendingSuspendReadinessCallbacks() = 0; 1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates the instance. 166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) static PowerManagerClient* Create(DBusClientImplementationType type); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PowerManagerClient(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create() should be used instead. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PowerManagerClient(); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PowerManagerClient); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROMEOS_DBUS_POWER_MANAGER_CLIENT_H_ 181