blob: 26c73ef90220079db30e5049264fc1e7cd787e26 [file] [log] [blame]
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos_brightness.h"
#include <string>
#include <dbus/dbus-glib-lowlevel.h>
#include "base/logging.h"
#include "chromeos/dbus/dbus.h"
#include "chromeos/dbus/service_constants.h"
using std::string;
namespace chromeos {
class OpaqueBrightnessConnection : public dbus::SignalWatcher {
public:
OpaqueBrightnessConnection(const BrightnessMonitorFunction& monitor_function,
void* object)
: monitor_function_(monitor_function),
object_(object) {
StartMonitoring(power_manager::kPowerManagerInterface,
power_manager::kBrightnessChangedSignal);
}
virtual void OnSignal(DBusMessage* message) {
DBusError error;
dbus_error_init(&error);
int brightness_level = 0;
if (dbus_message_get_args(message, &error,
DBUS_TYPE_INT32, &brightness_level,
DBUS_TYPE_INVALID)) {
monitor_function_(object_, brightness_level);
} else {
LOG(WARNING) << "Unable to read brightness level from "
<< power_manager::kBrightnessChangedSignal << " signal";
}
}
private:
// Function within Chrome that we invoke when the brightness changes.
BrightnessMonitorFunction monitor_function_;
// Opaque pointer supplied to ChromeOSMonitorBrightness() that we pass back
// via |monitor_function_|.
void* object_;
};
extern "C"
BrightnessConnection ChromeOSMonitorBrightness(
BrightnessMonitorFunction monitor_function, void* object) {
return new OpaqueBrightnessConnection(monitor_function, object);
}
extern "C"
void ChromeOSDisconnectBrightness(BrightnessConnection connection) {
DCHECK(connection);
delete connection;
}
} // namespace chromeos