blob: d6e416c62d64b20acb8c220a94534a19832acc8a [file] [log] [blame]
mukesh agrawal7c1fece2012-01-13 11:31:27 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkov394b7d42011-11-03 15:48:02 +01002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/power_manager_proxy.h"
6
Darin Petkov394b7d42011-11-03 15:48:02 +01007#include <chromeos/dbus/service_constants.h>
8
Christopher Wileyb691efd2012-08-09 13:51:51 -07009#include "shill/logging.h"
Ben Chanfad4a0b2012-04-18 15:49:59 -070010
mukesh agrawal7c1fece2012-01-13 11:31:27 -080011using std::string;
12
Darin Petkov394b7d42011-11-03 15:48:02 +010013namespace shill {
14
15PowerManagerProxy::PowerManagerProxy(PowerManagerProxyDelegate *delegate,
16 DBus::Connection *connection)
17 : proxy_(delegate, connection) {}
18
19PowerManagerProxy::~PowerManagerProxy() {}
20
21void PowerManagerProxy::RegisterSuspendDelay(uint32 delay_ms) {
Darin Petkov3ec55342012-09-28 14:04:44 +020022 LOG(INFO) << __func__ << "(" << delay_ms << ")";
Gary Morain610977f2012-05-04 16:03:52 -070023 try {
24 proxy_.RegisterSuspendDelay(delay_ms);
25 } catch (const DBus::Error &e) {
Darin Petkov3ec55342012-09-28 14:04:44 +020026 LOG(ERROR) << "DBus exception: " << e.name() << ": " << e.what()
Gary Morain610977f2012-05-04 16:03:52 -070027 << "delay ms: " << delay_ms;
28 }
Darin Petkov394b7d42011-11-03 15:48:02 +010029}
30
Darin Petkov3ec55342012-09-28 14:04:44 +020031void PowerManagerProxy::UnregisterSuspendDelay() {
32 LOG(INFO) << __func__;
33 try {
34 proxy_.UnregisterSuspendDelay();
35 } catch (const DBus::Error &e) {
36 LOG(ERROR) << "DBus exception: " << e.name() << ": " << e.what();
37 }
38}
39
40void PowerManagerProxy::SuspendReady(uint32 sequence_number) {
41 // TODO(petkov): Fix this code after SuspendReady is converted to a method
42 // call on the PowerManager DBus interface.
43 LOG(INFO) << __func__ << "(" << sequence_number << ")";
44 DBus::SignalMessage signal(power_manager::kPowerManagerServicePath,
45 power_manager::kPowerManagerInterface,
46 power_manager::kSuspendReady);
47 DBus::MessageIter message = signal.writer();
48 message << sequence_number;
49 if (!proxy_.conn().send(signal)) {
50 LOG(ERROR) << "Failed to signal suspend ready (" << sequence_number << ").";
51 }
52}
53
Darin Petkov394b7d42011-11-03 15:48:02 +010054PowerManagerProxy::Proxy::Proxy(PowerManagerProxyDelegate *delegate,
55 DBus::Connection *connection)
56 : DBus::ObjectProxy(*connection,
mukesh agrawal5c05b292012-03-07 10:12:52 -080057 power_manager::kPowerManagerServicePath,
Darin Petkov394b7d42011-11-03 15:48:02 +010058 power_manager::kPowerManagerServiceName),
59 delegate_(delegate) {}
60
61PowerManagerProxy::Proxy::~Proxy() {}
62
63void PowerManagerProxy::Proxy::SuspendDelay(const uint32_t &sequence_number) {
Darin Petkov3ec55342012-09-28 14:04:44 +020064 LOG(INFO) << __func__ << "(" << sequence_number << ")";
Darin Petkov394b7d42011-11-03 15:48:02 +010065 delegate_->OnSuspendDelay(sequence_number);
66}
67
mukesh agrawal7c1fece2012-01-13 11:31:27 -080068void PowerManagerProxy::Proxy::PowerStateChanged(
69 const string &new_power_state) {
Darin Petkov3ec55342012-09-28 14:04:44 +020070 LOG(INFO) << __func__ << "(" << new_power_state << ")";
mukesh agrawal7c1fece2012-01-13 11:31:27 -080071
72 PowerManagerProxyDelegate::SuspendState suspend_state;
73 if (new_power_state == "on") {
74 suspend_state = PowerManagerProxyDelegate::kOn;
75 } else if (new_power_state == "standby") {
76 suspend_state = PowerManagerProxyDelegate::kStandby;
77 } else if (new_power_state == "mem") {
78 suspend_state = PowerManagerProxyDelegate::kMem;
79 } else if (new_power_state == "disk") {
80 suspend_state = PowerManagerProxyDelegate::kDisk;
81 } else {
82 suspend_state = PowerManagerProxyDelegate::kUnknown;
83 }
84 delegate_->OnPowerStateChanged(suspend_state);
85}
86
Darin Petkov394b7d42011-11-03 15:48:02 +010087} // namespace shill