Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(734)

Side by Side Diff: chrome/browser/chromeos/dbus/power_manager_client.cc

Issue 8271024: chromeos: Add power supply info reading capability (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebased after refactoring Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/dbus/power_manager_client.h" 5 #include "chrome/browser/chromeos/dbus/power_manager_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/chromeos/system/runtime_environment.h" 10 #include "chrome/browser/chromeos/system/runtime_environment.h"
10 #include "dbus/bus.h" 11 #include "dbus/bus.h"
11 #include "dbus/message.h" 12 #include "dbus/message.h"
12 #include "dbus/object_proxy.h" 13 #include "dbus/object_proxy.h"
14 #include "third_party/cros/chromeos_power.h"
satorux1 2011/10/27 21:09:21 We don't need this, right?
Simon Que 2011/10/27 22:46:20 Done.
13 #include "third_party/cros_system_api/dbus/service_constants.h" 15 #include "third_party/cros_system_api/dbus/service_constants.h"
16 // TODO(sque): Remove chromeos_power.h, crosbug.com/16558
satorux1 2011/10/27 21:09:21 ditto.
Simon Que 2011/10/27 22:46:20 Done.
14 17
15 namespace chromeos { 18 namespace chromeos {
16 19
17 // The PowerManagerClient implementation used in production. 20 // The PowerManagerClient implementation used in production.
18 class PowerManagerClientImpl : public PowerManagerClient { 21 class PowerManagerClientImpl : public PowerManagerClient {
19 public: 22 public:
20 explicit PowerManagerClientImpl(dbus::Bus* bus) 23 explicit PowerManagerClientImpl(dbus::Bus* bus)
21 : power_manager_proxy_(NULL), 24 : power_manager_proxy_(NULL),
22 weak_ptr_factory_(this) { 25 weak_ptr_factory_(this) {
23 power_manager_proxy_ = bus->GetObjectProxy( 26 power_manager_proxy_ = bus->GetObjectProxy(
24 power_manager::kPowerManagerServiceName, 27 power_manager::kPowerManagerServiceName,
25 power_manager::kPowerManagerServicePath); 28 power_manager::kPowerManagerServicePath);
26 29
27 // Monitor the D-Bus signal for brightness changes. Only the power 30 // Monitor the D-Bus signal for brightness changes. Only the power
28 // manager knows the actual brightness level. We don't cache the 31 // manager knows the actual brightness level. We don't cache the
29 // brightness level in Chrome as it'll make things less reliable. 32 // brightness level in Chrome as it'll make things less reliable.
30 power_manager_proxy_->ConnectToSignal( 33 power_manager_proxy_->ConnectToSignal(
31 power_manager::kPowerManagerInterface, 34 power_manager::kPowerManagerInterface,
32 power_manager::kBrightnessChangedSignal, 35 power_manager::kBrightnessChangedSignal,
33 base::Bind(&PowerManagerClientImpl::BrightnessChangedReceived, 36 base::Bind(&PowerManagerClientImpl::BrightnessChangedReceived,
34 weak_ptr_factory_.GetWeakPtr()), 37 weak_ptr_factory_.GetWeakPtr()),
35 base::Bind(&PowerManagerClientImpl::BrightnessChangedConnected, 38 base::Bind(&PowerManagerClientImpl::SignalConnected,
39 weak_ptr_factory_.GetWeakPtr()));
40
41 // Monitor the D-Bus signal for power supply polling signals.
42 power_manager_proxy_->ConnectToSignal(
43 power_manager::kPowerManagerInterface,
44 power_manager::kPowerSupplyPollSignal,
45 base::Bind(&PowerManagerClientImpl::PowerSupplyPollReceived,
46 weak_ptr_factory_.GetWeakPtr()),
47 base::Bind(&PowerManagerClientImpl::SignalConnected,
36 weak_ptr_factory_.GetWeakPtr())); 48 weak_ptr_factory_.GetWeakPtr()));
37 } 49 }
38 50
39 virtual ~PowerManagerClientImpl() { 51 virtual ~PowerManagerClientImpl() {
40 } 52 }
41 53
42 // PowerManagerClient override. 54 // PowerManagerClient override.
43 virtual void AddObserver(Observer* observer) { 55 virtual void AddObserver(Observer* observer) {
44 observers_.AddObserver(observer); 56 observers_.AddObserver(observer);
45 } 57 }
(...skipping 23 matching lines...) Expand all
69 dbus::MethodCall method_call( 81 dbus::MethodCall method_call(
70 power_manager::kPowerManagerInterface, 82 power_manager::kPowerManagerInterface,
71 power_manager::kIncreaseScreenBrightness); 83 power_manager::kIncreaseScreenBrightness);
72 power_manager_proxy_->CallMethod( 84 power_manager_proxy_->CallMethod(
73 &method_call, 85 &method_call,
74 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 86 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
75 base::Bind(&PowerManagerClientImpl::OnIncreaseScreenBrightness, 87 base::Bind(&PowerManagerClientImpl::OnIncreaseScreenBrightness,
76 weak_ptr_factory_.GetWeakPtr())); 88 weak_ptr_factory_.GetWeakPtr()));
77 } 89 }
78 90
91 private:
92 // Called when a dbus signal is initially connected.
93 void SignalConnected(const std::string& interface_name,
94 const std::string& signal_name,
95 bool success) {
96 LOG_IF(WARNING, !success) << "Failed to connect to signal "
97 << signal_name << ".";
98 }
99
79 // Called when a brightness change signal is received. 100 // Called when a brightness change signal is received.
80 void BrightnessChangedReceived(dbus::Signal* signal) { 101 void BrightnessChangedReceived(dbus::Signal* signal) {
81 dbus::MessageReader reader(signal); 102 dbus::MessageReader reader(signal);
82 int32 brightness_level = 0; 103 int32 brightness_level = 0;
83 bool user_initiated = 0; 104 bool user_initiated = 0;
84 if (!(reader.PopInt32(&brightness_level) && 105 if (!(reader.PopInt32(&brightness_level) &&
85 reader.PopBool(&user_initiated))) { 106 reader.PopBool(&user_initiated))) {
86 LOG(ERROR) << "Brightness changed signal had incorrect parameters: " 107 LOG(ERROR) << "Brightness changed signal had incorrect parameters: "
87 << signal->ToString(); 108 << signal->ToString();
88 return; 109 return;
89 } 110 }
90 VLOG(1) << "Brightness changed to " << brightness_level 111 VLOG(1) << "Brightness changed to " << brightness_level
91 << ": user initiated " << user_initiated; 112 << ": user initiated " << user_initiated;
92 FOR_EACH_OBSERVER(Observer, observers_, 113 FOR_EACH_OBSERVER(Observer, observers_,
93 BrightnessChanged(brightness_level, user_initiated)); 114 BrightnessChanged(brightness_level, user_initiated));
94 } 115 }
95 116
96 // Called when the brightness change signal is initially connected.
97 void BrightnessChangedConnected(const std::string& interface_name,
98 const std::string& signal_name,
99 bool success) {
100 LOG_IF(WARNING, !success)
101 << "Failed to connect to brightness changed signal.";
102 }
103
104 // Called when a response for DecreaseScreenBrightness() is received. 117 // Called when a response for DecreaseScreenBrightness() is received.
105 void OnDecreaseScreenBrightness(dbus::Response* response) { 118 void OnDecreaseScreenBrightness(dbus::Response* response) {
106 if (!response) { 119 if (!response) {
107 LOG(ERROR) << "Failed to decrease screen brightness"; 120 LOG(ERROR) << "Failed to decrease screen brightness";
108 return; 121 return;
109 } 122 }
110 VLOG(1) << "screen brightness increased: " << response->ToString(); 123 VLOG(1) << "screen brightness increased: " << response->ToString();
111 } 124 }
112 125
113 // Called when a response for IncreaseScreenBrightness() is received. 126 // Called when a response for IncreaseScreenBrightness() is received.
114 void OnIncreaseScreenBrightness(dbus::Response* response) { 127 void OnIncreaseScreenBrightness(dbus::Response* response) {
115 if (!response) { 128 if (!response) {
116 LOG(ERROR) << "Failed to increase screen brightness"; 129 LOG(ERROR) << "Failed to increase screen brightness";
117 return; 130 return;
118 } 131 }
119 VLOG(1) << "screen brightness increased: " << response->ToString(); 132 VLOG(1) << "screen brightness increased: " << response->ToString();
120 } 133 }
121 134
135 // Called when a power supply polling signal is received.
136 void PowerSupplyPollReceived(dbus::Signal* signal) {
137 dbus::MessageReader reader(signal);
138 VLOG(1) << "Received power supply poll signal.";
139 GetPowerSupplyInfo();
140 }
141
142 // Gets the state of the power supply (line power and battery) from power
143 // manager.
144 void GetPowerSupplyInfo() {
145 dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
146 power_manager::kGetAllPropertiesMethod);
147 power_manager_proxy_->CallMethod(
148 &method_call,
149 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
150 base::Bind(&PowerManagerClientImpl::OnPowerSupplyPoll,
satorux1 2011/10/27 21:09:21 OnPowerSupplyPoll -> OnGetAllPropertiesMethod to m
Simon Que 2011/10/27 22:46:20 Done.
151 weak_ptr_factory_.GetWeakPtr()));
152 }
153
154 void OnPowerSupplyPoll(dbus::Response* response) {
satorux1 2011/10/27 21:09:21 Please add a function comment like // Called when
Simon Que 2011/10/27 22:46:20 Done.
155 if (!response) {
156 LOG(ERROR) << "Error calling " << power_manager::kGetAllPropertiesMethod
157 << ".";
satorux1 2011/10/27 21:09:21 Let's omit the period to save one line.
Simon Que 2011/10/27 22:46:20 Done.
158 return;
159 }
160 dbus::MessageReader reader(response);
161 chromeos::PowerStatus status;
162 bool battery_is_charged;
163 if (!reader.PopBool(&status.line_power_on) ||
164 !reader.PopDouble(&status.battery_energy) ||
165 !reader.PopDouble(&status.battery_energy_rate) ||
166 !reader.PopDouble(&status.battery_voltage) ||
167 !reader.PopInt64(&status.battery_time_to_empty) ||
168 !reader.PopInt64(&status.battery_time_to_full) ||
169 !reader.PopDouble(&status.battery_percentage) ||
170 !reader.PopBool(&status.battery_is_present) ||
171 !reader.PopBool(&battery_is_charged)) {
172 LOG(ERROR) << "Error reading response from powerd: "
173 << response->ToString();
174 return;
175 }
176 status.battery_state = battery_is_charged ? BATTERY_STATE_FULLY_CHARGED
177 : BATTERY_STATE_UNKNOWN;
satorux1 2011/10/27 21:09:21 remove a space before : ?
Simon Que 2011/10/27 22:46:20 Done.
178
179 FOR_EACH_OBSERVER(Observer, observers_, UpdatePowerStatus(status));
180 }
181
122 dbus::ObjectProxy* power_manager_proxy_; 182 dbus::ObjectProxy* power_manager_proxy_;
123 ObserverList<Observer> observers_; 183 ObserverList<Observer> observers_;
124 base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_; 184 base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_;
125 185
126 DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl); 186 DISALLOW_COPY_AND_ASSIGN(PowerManagerClientImpl);
127 }; 187 };
128 188
129 // The PowerManagerClient implementation used on Linux desktop, 189 // The PowerManagerClient implementation used on Linux desktop,
130 // which does nothing. 190 // which does nothing.
131 class PowerManagerClientStubImpl : public PowerManagerClient { 191 class PowerManagerClientStubImpl : public PowerManagerClient {
(...skipping 24 matching lines...) Expand all
156 216
157 PowerManagerClient* PowerManagerClient::Create(dbus::Bus* bus) { 217 PowerManagerClient* PowerManagerClient::Create(dbus::Bus* bus) {
158 if (system::runtime_environment::IsRunningOnChromeOS()) { 218 if (system::runtime_environment::IsRunningOnChromeOS()) {
159 return new PowerManagerClientImpl(bus); 219 return new PowerManagerClientImpl(bus);
160 } else { 220 } else {
161 return new PowerManagerClientStubImpl(); 221 return new PowerManagerClientStubImpl();
162 } 222 }
163 } 223 }
164 224
165 } // namespace chromeos 225 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698