power_manager_client.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Called when the power button is pressed or released.
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void PowerButtonEventReceived(bool down,
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          const base::TimeTicks& timestamp) {}
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Called when the device's lid is opened or closed.
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void LidEventReceived(bool open,
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  const base::TimeTicks& timestamp) {}
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Called when the system resumes from sleep.
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void SystemResumed(const base::TimeDelta& sleep_duration) {}
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Called when the idle action will be performed soon.
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void IdleActionImminent() {}
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Called after IdleActionImminent() when the inactivity timer is reset
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // before the idle action has been performed.
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void IdleActionDeferred() {}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds and removes the observer.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AddObserver(Observer* observer) = 0;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RemoveObserver(Observer* observer) = 0;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasObserver(Observer* observer) = 0;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Decreases the screen brightness. |allow_off| controls whether or not
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it's allowed to turn off the back light.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DecreaseScreenBrightness(bool allow_off) = 0;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Increases the screen brightness.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void IncreaseScreenBrightness() = 0;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the screen brightness to |percent|, in the range [0.0, 100.0].
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |gradual| is true, the transition will be animated.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetScreenBrightnessPercent(double percent, bool gradual) = 0;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Asynchronously gets the current screen brightness, in the range
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // [0.0, 100.0].
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetScreenBrightnessPercent(
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GetScreenBrightnessPercentCallback& callback) = 0;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Decreases the keyboard brightness.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DecreaseKeyboardBrightness() = 0;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Increases the keyboard brightness.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void IncreaseKeyboardBrightness() = 0;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Requests an updated copy of the power status. Observer::PowerChanged()
116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // will be called asynchronously.
117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void RequestStatusUpdate() = 0;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Requests restart of the system.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RequestRestart() = 0;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Requests shutdown of the system.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RequestShutdown() = 0;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifies the power manager that the user is active (i.e. generating input
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // events).
1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void NotifyUserActivity(power_manager::UserActivityType type) = 0;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifies the power manager that a video is currently playing. It also
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // includes whether or not the containing window for the video is fullscreen.
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void NotifyVideoActivity(bool is_fullscreen) = 0;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tells the power manager to begin using |policy|.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetPolicy(
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const power_manager::PowerManagementPolicy& policy) = 0;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tells powerd whether or not we are in a projecting mode.  This is used to
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // adjust idleness thresholds and derived, on this side, from the number of
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // video outputs attached.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetIsProjecting(bool is_projecting) = 0;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns a callback that can be called by an observer to report
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // readiness for suspend.  See Observer::SuspendImminent().
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::Closure GetSuspendReadinessCallback() = 0;
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Returns the number of callbacks returned by GetSuspendReadinessCallback()
1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // for the current suspend attempt but not yet called. Used by tests.
1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual int GetNumPendingSuspendReadinessCallbacks() = 0;
1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates the instance.
151424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  static PowerManagerClient* Create(DBusClientImplementationType type);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PowerManagerClient();
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create() should be used instead.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PowerManagerClient();
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PowerManagerClient);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROMEOS_DBUS_POWER_MANAGER_CLIENT_H_
166