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

Unified 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, 2 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/dbus/power_manager_client.cc
diff --git a/chrome/browser/chromeos/dbus/power_manager_client.cc b/chrome/browser/chromeos/dbus/power_manager_client.cc
index 62971590b145ffbabe3a543830a95c5745fa802d..581c2da5facaba4899809dac143b3ff57b19ab26 100644
--- a/chrome/browser/chromeos/dbus/power_manager_client.cc
+++ b/chrome/browser/chromeos/dbus/power_manager_client.cc
@@ -6,11 +6,14 @@
#include "base/bind.h"
#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
#include "chrome/browser/chromeos/system/runtime_environment.h"
#include "dbus/bus.h"
#include "dbus/message.h"
#include "dbus/object_proxy.h"
+#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.
#include "third_party/cros_system_api/dbus/service_constants.h"
+// 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.
namespace chromeos {
@@ -32,7 +35,16 @@ class PowerManagerClientImpl : public PowerManagerClient {
power_manager::kBrightnessChangedSignal,
base::Bind(&PowerManagerClientImpl::BrightnessChangedReceived,
weak_ptr_factory_.GetWeakPtr()),
- base::Bind(&PowerManagerClientImpl::BrightnessChangedConnected,
+ base::Bind(&PowerManagerClientImpl::SignalConnected,
+ weak_ptr_factory_.GetWeakPtr()));
+
+ // Monitor the D-Bus signal for power supply polling signals.
+ power_manager_proxy_->ConnectToSignal(
+ power_manager::kPowerManagerInterface,
+ power_manager::kPowerSupplyPollSignal,
+ base::Bind(&PowerManagerClientImpl::PowerSupplyPollReceived,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&PowerManagerClientImpl::SignalConnected,
weak_ptr_factory_.GetWeakPtr()));
}
@@ -76,6 +88,15 @@ class PowerManagerClientImpl : public PowerManagerClient {
weak_ptr_factory_.GetWeakPtr()));
}
+ private:
+ // Called when a dbus signal is initially connected.
+ void SignalConnected(const std::string& interface_name,
+ const std::string& signal_name,
+ bool success) {
+ LOG_IF(WARNING, !success) << "Failed to connect to signal "
+ << signal_name << ".";
+ }
+
// Called when a brightness change signal is received.
void BrightnessChangedReceived(dbus::Signal* signal) {
dbus::MessageReader reader(signal);
@@ -93,14 +114,6 @@ class PowerManagerClientImpl : public PowerManagerClient {
BrightnessChanged(brightness_level, user_initiated));
}
- // Called when the brightness change signal is initially connected.
- void BrightnessChangedConnected(const std::string& interface_name,
- const std::string& signal_name,
- bool success) {
- LOG_IF(WARNING, !success)
- << "Failed to connect to brightness changed signal.";
- }
-
// Called when a response for DecreaseScreenBrightness() is received.
void OnDecreaseScreenBrightness(dbus::Response* response) {
if (!response) {
@@ -119,6 +132,53 @@ class PowerManagerClientImpl : public PowerManagerClient {
VLOG(1) << "screen brightness increased: " << response->ToString();
}
+ // Called when a power supply polling signal is received.
+ void PowerSupplyPollReceived(dbus::Signal* signal) {
+ dbus::MessageReader reader(signal);
+ VLOG(1) << "Received power supply poll signal.";
+ GetPowerSupplyInfo();
+ }
+
+ // Gets the state of the power supply (line power and battery) from power
+ // manager.
+ void GetPowerSupplyInfo() {
+ dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
+ power_manager::kGetAllPropertiesMethod);
+ power_manager_proxy_->CallMethod(
+ &method_call,
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(&PowerManagerClientImpl::OnPowerSupplyPoll,
satorux1 2011/10/27 21:09:21 OnPowerSupplyPoll -> OnGetAllPropertiesMethod to m
Simon Que 2011/10/27 22:46:20 Done.
+ weak_ptr_factory_.GetWeakPtr()));
+ }
+
+ 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.
+ if (!response) {
+ LOG(ERROR) << "Error calling " << power_manager::kGetAllPropertiesMethod
+ << ".";
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.
+ return;
+ }
+ dbus::MessageReader reader(response);
+ chromeos::PowerStatus status;
+ bool battery_is_charged;
+ if (!reader.PopBool(&status.line_power_on) ||
+ !reader.PopDouble(&status.battery_energy) ||
+ !reader.PopDouble(&status.battery_energy_rate) ||
+ !reader.PopDouble(&status.battery_voltage) ||
+ !reader.PopInt64(&status.battery_time_to_empty) ||
+ !reader.PopInt64(&status.battery_time_to_full) ||
+ !reader.PopDouble(&status.battery_percentage) ||
+ !reader.PopBool(&status.battery_is_present) ||
+ !reader.PopBool(&battery_is_charged)) {
+ LOG(ERROR) << "Error reading response from powerd: "
+ << response->ToString();
+ return;
+ }
+ status.battery_state = battery_is_charged ? BATTERY_STATE_FULLY_CHARGED
+ : BATTERY_STATE_UNKNOWN;
satorux1 2011/10/27 21:09:21 remove a space before : ?
Simon Que 2011/10/27 22:46:20 Done.
+
+ FOR_EACH_OBSERVER(Observer, observers_, UpdatePowerStatus(status));
+ }
+
dbus::ObjectProxy* power_manager_proxy_;
ObserverList<Observer> observers_;
base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_;

Powered by Google App Engine
This is Rietveld 408576698