On 8 October 2010 19:03, Richard Hughes <hughsi...@gmail.com> wrote:
> On 7 October 2010 13:14, Alex Murray <murray.a...@gmail.com> wrote:
>> Thanks Richard will see what I can come up with - also what is the
>> best way to post patches for review once I've got something together?
>
> Email either me or the mailing list. If you need help, grab me on IRC
> -- I'm "hughsie".
How about something like the attached patch - provides a new interface
org.freedesktop.UPower.KbdBacklight which Get/SetBrightness and
GetMaxBrightness methods, plus a BrightnessChanged signal. I plan to
start work on g-p-m next to support using this to control the
backlight from userspace,

One question is that this doesn't provide any authentication / access
control to the dbus interface - if anything I thought that at_console
would be the only restriction if anything, but any thoughts on this
would be appreciated - i.e. at the moment any local user can control
the backlight - perhaps this should be restricted to at_console?

Cheers
Alex
>
> Thanks,
>
> Richard.
>
From cfa0d0446db1ee4a2a9a935f107764ebf8de9cfa Mon Sep 17 00:00:00 2001
From: Alex Murray <murray.a...@gmail.com>
Date: Sat, 9 Oct 2010 07:50:32 +1030
Subject: [PATCH] Add support for controlling leds keyboard backlights

Add a new DBus interface based on the QoS one to provide for controlling a
keyboard backlight via the Linux leds interface.
---
 doc/Makefile.am                             |    1 +
 doc/dbus/Makefile.am                        |    6 +-
 doc/upower-docs.xml                         |    1 +
 src/Makefile.am                             |   10 +
 src/org.freedesktop.UPower.KbdBacklight.xml |  101 +++++++++
 src/org.freedesktop.UPower.conf.in          |    4 +
 src/up-kbd-backlight.c                      |  297 +++++++++++++++++++++++++++
 src/up-kbd-backlight.h                      |   68 ++++++
 src/up-main.c                               |    5 +
 9 files changed, 492 insertions(+), 1 deletions(-)
 create mode 100644 src/org.freedesktop.UPower.KbdBacklight.xml
 create mode 100644 src/up-kbd-backlight.c
 create mode 100644 src/up-kbd-backlight.h

diff --git a/doc/Makefile.am b/doc/Makefile.am
index be6ed02..79695b8 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -61,6 +61,7 @@ content_files =  			    				\
 	dbus/org.freedesktop.UPower.ref.xml				\
 	dbus/org.freedesktop.UPower.Device.ref.xml			\
 	dbus/org.freedesktop.UPower.QoS.ref.xml				\
+	dbus/org.freedesktop.UPower.KbdBacklight.ref.xml		\
 	$(NULL)
 
 # Images to copy into HTML directory
diff --git a/doc/dbus/Makefile.am b/doc/dbus/Makefile.am
index 78c9aa5..5275f16 100644
--- a/doc/dbus/Makefile.am
+++ b/doc/dbus/Makefile.am
@@ -1,5 +1,5 @@
 
-all : org.freedesktop.UPower.ref.xml org.freedesktop.UPower.Device.ref.xml org.freedesktop.UPower.QoS.ref.xml org.freedesktop.UPower.Wakeups.ref.xml
+all : org.freedesktop.UPower.ref.xml org.freedesktop.UPower.Device.ref.xml org.freedesktop.UPower.QoS.ref.xml org.freedesktop.UPower.KbdBacklight.ref.xml org.freedesktop.UPower.Wakeups.ref.xml
 
 org.freedesktop.UPower.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl
 	echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\";>" > $@
@@ -13,6 +13,10 @@ org.freedesktop.UPower.QoS.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower.Qo
 	echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\";>" > $@
 	$(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@
 
+org.freedesktop.UPower.KbdBacklight.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower.KbdBacklight.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl
+	echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\";>" > $@
+	$(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@
+
 org.freedesktop.UPower.Wakeups.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower.Wakeups.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl
 	echo "<?xml version=\"1.0\"?>""<!DOCTYPE refentry PUBLIC \"-//OASIS//DTD DocBook XML V4.1.2//EN\" \"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd\";>" > $@
 	$(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@
diff --git a/doc/upower-docs.xml b/doc/upower-docs.xml
index 5db81b6..1cc79b7 100644
--- a/doc/upower-docs.xml
+++ b/doc/upower-docs.xml
@@ -67,6 +67,7 @@
     <xi:include href="dbus/org.freedesktop.UPower.ref.xml"/>
     <xi:include href="dbus/org.freedesktop.UPower.Device.ref.xml"/>
     <xi:include href="dbus/org.freedesktop.UPower.QoS.ref.xml"/>
+    <xi:include href="dbus/org.freedesktop.UPower.KbdBacklight.ref.xml"/>
   </reference>
 
   <reference id="libupower-glib">
diff --git a/src/Makefile.am b/src/Makefile.am
index 5ee559a..36ebf75 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,6 +29,7 @@ BUILT_SOURCES =							\
 	up-daemon-glue.h					\
 	up-device-glue.h					\
 	up-qos-glue.h						\
+	up-kbd-backlight-glue.h					\
 	up-wakeups-glue.h					\
 	up-marshal.h						\
 	up-marshal.c
@@ -48,6 +49,9 @@ up-device-glue.h: org.freedesktop.UPower.Device.xml Makefile.am
 up-qos-glue.h: org.freedesktop.UPower.QoS.xml Makefile.am
 	dbus-binding-tool --prefix=up_qos --mode=glib-server --output=up-qos-glue.h org.freedesktop.UPower.QoS.xml
 
+up-kbd-backlight-glue.h: org.freedesktop.UPower.KbdBacklight.xml Makefile.am
+	dbus-binding-tool --prefix=up_kbd_backlight --mode=glib-server --output=up-kbd-backlight-glue.h org.freedesktop.UPower.KbdBacklight.xml
+
 up-wakeups-glue.h: org.freedesktop.UPower.Wakeups.xml Makefile.am
 	dbus-binding-tool --prefix=up_wakeups --mode=glib-server --output=up-wakeups-glue.h org.freedesktop.UPower.Wakeups.xml
 
@@ -58,6 +62,7 @@ dbusif_DATA =							\
 	org.freedesktop.UPower.xml				\
 	org.freedesktop.UPower.Device.xml			\
 	org.freedesktop.UPower.QoS.xml				\
+	org.freedesktop.UPower.KbdBacklight.xml			\
 	org.freedesktop.UPower.Wakeups.xml
 
 upowerd_SOURCES =						\
@@ -73,6 +78,8 @@ upowerd_SOURCES =						\
 	up-device-list.c					\
 	up-qos.h						\
 	up-qos.c						\
+	up-kbd-backlight.h					\
+	up-kbd-backlight.c					\
 	up-wakeups.h						\
 	up-wakeups.c						\
 	up-history.h						\
@@ -136,6 +143,8 @@ up_self_test_SOURCES =						\
 	up-device-list.c					\
 	up-qos.h						\
 	up-qos.c						\
+	up-kbd-backlight.h					\
+	up-kbd-backlight.c					\
 	up-wakeups.h						\
 	up-wakeups.c						\
 	up-history.h						\
@@ -187,6 +196,7 @@ EXTRA_DIST =							\
 	org.freedesktop.UPower.xml				\
 	org.freedesktop.UPower.Device.xml			\
 	org.freedesktop.UPower.QoS.xml				\
+	org.freedesktop.UPower.KbdBacklight.xml			\
 	org.freedesktop.UPower.Wakeups.xml			\
 	up-marshal.list						\
 	$(service_in_files)					\
diff --git a/src/org.freedesktop.UPower.KbdBacklight.xml b/src/org.freedesktop.UPower.KbdBacklight.xml
new file mode 100644
index 0000000..3ccc211
--- /dev/null
+++ b/src/org.freedesktop.UPower.KbdBacklight.xml
@@ -0,0 +1,101 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"; [
+  <!ENTITY ERROR_GENERAL "org.freedesktop.UPower.GeneralError">
+]>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd";>
+  <interface name="org.freedesktop.UPower.KbdBacklight">
+    <doc:doc>
+      <doc:description>
+        <doc:para>
+          org.freedesktop.UPower.KbdBacklight is a DBus interface implimented
+          by UPower.
+	  It allows the keyboard backlight (if present) to be controlled.
+        </doc:para>
+      </doc:description>
+    </doc:doc>
+
+    <!-- ************************************************************ -->
+    <method name="GetMaxBrightness">
+      <arg name="value" direction="out" type="i">
+        <doc:doc>
+          <doc:summary>
+            The maximum value of the keyboard backlight brightness.
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Get the maximum brightness level for the keyboard backlight.
+          </doc:para>
+        </doc:description>
+        <doc:errors>
+          <doc:error name="&ERROR_GENERAL;">if an error occured while getting the maximum brightness</doc:error>
+        </doc:errors>
+      </doc:doc>
+    </method>
+
+    <!-- ************************************************************ -->
+    <method name="GetBrightness">
+      <arg name="value" direction="out" type="i">
+        <doc:doc>
+          <doc:summary>
+            The current value of the keyboard backlight brightness.
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Get the brightness level of the keyboard backlight.
+          </doc:para>
+        </doc:description>
+        <doc:errors>
+          <doc:error name="&ERROR_GENERAL;">if an error occured while getting the brightness</doc:error>
+        </doc:errors>
+      </doc:doc>
+    </method>
+
+    <!-- ************************************************************ -->
+    <method name="SetBrightness">
+      <arg name="value" direction="in" type="i">
+        <doc:doc>
+          <doc:summary>
+            The value to set the KbdBacklight brightness.
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+            Set the brightness level of the keyboard backlight.
+          </doc:para>
+        </doc:description>
+        <doc:errors>
+          <doc:error name="&ERROR_GENERAL;">if an error occured while setting the brightness</doc:error>
+        </doc:errors>
+      </doc:doc>
+    </method>
+
+    <!-- ************************************************************ -->
+    <signal name="BrightnessChanged">
+      <arg name="value" direction="out" type="i">
+        <doc:doc>
+          <doc:summary>
+            The new brightness value of the keyboard backlight.
+          </doc:summary>
+        </doc:doc>
+      </arg>
+      <doc:doc>
+        <doc:description>
+          <doc:para>
+	    The keyboard backlight brightness level has changed.
+          </doc:para>
+        </doc:description>
+      </doc:doc>
+    </signal>
+
+  </interface>
+
+</node>
diff --git a/src/org.freedesktop.UPower.conf.in b/src/org.freedesktop.UPower.conf.in
index 26fbb33..a15ce93 100644
--- a/src/org.freedesktop.UPower.conf.in
+++ b/src/org.freedesktop.UPower.conf.in
@@ -19,6 +19,8 @@
            send_interface="org.freedesktop.DBus.Properties"/>
     <allow send_destination="org.freedesktop.UPower.QoS"
            send_interface="org.freedesktop.DBus.Properties"/>
+    <allow send_destination="org.freedesktop.UPower.KbdBacklight"
+           send_interface="org.freedesktop.DBus.Properties"/>
     <allow send_destination="org.freedesktop.UPower.Wakeups"
            send_interface="org.freedesktop.DBus.Properties"/>
 
@@ -29,6 +31,8 @@
     <allow send_destination="org.freedesktop.UPower"
            send_interface="org.freedesktop.UPower.QoS"/>
     <allow send_destination="org.freedesktop.UPower"
+           send_interface="org.freedesktop.UPower.KbdBacklight"/>
+    <allow send_destination="org.freedesktop.UPower"
 	   send_interface="org.freedesktop.UPower.Wakeups"/>
   </policy>
 </busconfig>
diff --git a/src/up-kbd-backlight.c b/src/up-kbd-backlight.c
new file mode 100644
index 0000000..733049f
--- /dev/null
+++ b/src/up-kbd-backlight.c
@@ -0,0 +1,297 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Richard Hughes <rich...@hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <glib/gi18n.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <dirent.h>
+
+#include "egg-debug.h"
+
+#include "up-kbd-backlight.h"
+#include "up-marshal.h"
+#include "up-daemon.h"
+#include "up-kbd-backlight-glue.h"
+#include "up-types.h"
+
+static void     up_kbd_backlight_finalize   (GObject	*object);
+
+#define UP_KBD_BACKLIGHT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), UP_TYPE_KBD_BACKLIGHT, UpKbdBacklightPrivate))
+
+struct UpKbdBacklightPrivate
+{
+	gint			 fd;
+	gint			 brightness;
+	gint			 max_brightness;
+	DBusGConnection		*connection;
+};
+
+enum {
+	BRIGHTNESS_CHANGED,
+	LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (UpKbdBacklight, up_kbd_backlight, G_TYPE_OBJECT)
+
+/**
+ * up_kbd_backlight_brightness_write:
+ **/
+static gboolean
+up_kbd_backlight_brightness_write (UpKbdBacklight *kbd_backlight, gint value)
+{
+	gchar *text = NULL;
+	gint retval;
+	gint length;
+	gboolean ret = TRUE;
+
+	/* write new values to pm-kbd_backlight */
+	if (kbd_backlight->priv->fd < 0) {
+		egg_warning ("cannot write to kbd_backlight as file not open");
+		ret = FALSE;
+		goto out;
+	}
+
+	/* limit to between 0 and max */
+	value = CLAMP (value, 0, kbd_backlight->priv->max_brightness);
+
+	/* convert to text */
+	text = g_strdup_printf ("%i", value);
+	length = strlen (text);
+
+	/* write to file */
+	lseek (kbd_backlight->priv->fd, 0, SEEK_SET);
+	retval = write (kbd_backlight->priv->fd, text, length);
+	if (retval != length) {
+		egg_warning ("writing '%s' to device failed", text);
+		ret = FALSE;
+		goto out;
+	}
+
+	/* emit signal */
+	kbd_backlight->priv->brightness = value;
+	g_signal_emit (kbd_backlight, signals [BRIGHTNESS_CHANGED], 0,
+		       kbd_backlight->priv->brightness);
+
+out:
+	g_free (text);
+	return ret;
+}
+
+/**
+ * up_kbd_backlight_get_brightness:
+ *
+ * Gets the current brightness
+ **/
+gboolean
+up_kbd_backlight_get_brightness (UpKbdBacklight *kbd_backlight, gint *value, GError **error)
+{
+	*value = kbd_backlight->priv->brightness;
+	return TRUE;
+}
+
+/**
+ * up_kbd_backlight_get_max_brightness:
+ *
+ * Gets the max brightness
+ **/
+gboolean
+up_kbd_backlight_get_max_brightness (UpKbdBacklight *kbd_backlight, gint *value, GError **error)
+{
+	*value = kbd_backlight->priv->max_brightness;
+	return TRUE;
+}
+
+/**
+ * up_kbd_backlight_set_brightness:
+ **/
+gboolean
+up_kbd_backlight_set_brightness (UpKbdBacklight *kbd_backlight, gint value, GError **error)
+{
+	gboolean ret = FALSE;
+
+	egg_debug ("setting brightness to %i", value);
+	ret = up_kbd_backlight_brightness_write(kbd_backlight, value);
+
+	if (!ret) {
+		*error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "error writing brightness %d", value);
+	}
+	return ret;
+}
+
+/**
+ * up_kbd_backlight_class_init:
+ **/
+static void
+up_kbd_backlight_class_init (UpKbdBacklightClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = up_kbd_backlight_finalize;
+
+	signals [BRIGHTNESS_CHANGED] =
+		g_signal_new ("brightness-changed",
+			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+			      G_STRUCT_OFFSET (UpKbdBacklightClass, brightness_changed),
+			      NULL, NULL, g_cclosure_marshal_VOID__INT,
+			      G_TYPE_NONE, 1, G_TYPE_INT);
+
+	/* introspection */
+	dbus_g_object_type_install_info (UP_TYPE_KBD_BACKLIGHT, &dbus_glib_up_kbd_backlight_object_info);
+
+	g_type_class_add_private (klass, sizeof (UpKbdBacklightPrivate));
+}
+
+static gboolean
+find_kbd_backlight (UpKbdBacklight *kbd_backlight)
+{
+	gboolean ret = FALSE;
+	DIR *dir;
+	struct dirent *ent;
+	gchar *dir_path = NULL;
+	gchar *path;
+	gchar buf[100] = { '\0' };
+	int fd;
+
+	kbd_backlight->priv->fd = -1;
+
+	dir = opendir ("/sys/class/leds");
+	if (dir == NULL)
+		goto out;
+
+	while ((ent = readdir (dir)) != NULL) {
+		if (strstr (ent->d_name, "kbd_backlight") != NULL) {
+			dir_path = g_strdup_printf ("/sys/class/leds/%s",
+						    ent->d_name);
+			break;
+		}
+	}
+	closedir(dir);
+	if (dir_path == NULL)
+		goto out;
+
+	/* read max brightness */
+	path = g_strdup_printf ("%s/max_brightness", dir_path);
+	fd = open (path, O_RDONLY);
+	g_free (path);
+	if (fd < 0)
+		goto out;
+
+	if (read (fd, buf, sizeof(buf)) < 0) {
+		close (fd);
+		goto out;
+	}
+	close (fd);
+	kbd_backlight->priv->max_brightness = g_ascii_strtoull (buf, NULL, 10);
+
+	if (kbd_backlight->priv->max_brightness <= 0)
+		goto out;
+
+	/* read brightness */
+	path = g_strdup_printf ("%s/brightness", dir_path);
+	fd = open (path, O_RDWR);
+	g_free (path);
+	if (fd < 0)
+		goto out;
+
+	if (read (fd, buf, sizeof(buf)) < 0) {
+		close (fd);
+		goto out;
+	}
+	kbd_backlight->priv->brightness = g_ascii_strtoull (buf, NULL, 10);
+	kbd_backlight->priv->fd = fd;
+	ret = TRUE;
+
+out:
+	g_free (dir_path);
+	return ret;
+}
+
+
+
+/**
+ * up_kbd_backlight_init:
+ **/
+static void
+up_kbd_backlight_init (UpKbdBacklight *kbd_backlight)
+{
+	GError *error = NULL;
+
+	kbd_backlight->priv = UP_KBD_BACKLIGHT_GET_PRIVATE (kbd_backlight);
+
+	/* find a kbd backlight in sysfs */
+	if (!find_kbd_backlight (kbd_backlight)) {
+		egg_warning ("cannot find a kbd backlight");
+		return;
+	}
+
+	kbd_backlight->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+	if (error != NULL) {
+		egg_warning ("Cannot connect to bus: %s", error->message);
+		g_error_free (error);
+		return;
+	}
+
+	/* register on the bus */
+	dbus_g_connection_register_g_object (kbd_backlight->priv->connection, "/org/freedesktop/UPower/KbdBacklight", G_OBJECT (kbd_backlight));
+
+}
+
+/**
+ * up_kbd_backlight_finalize:
+ **/
+static void
+up_kbd_backlight_finalize (GObject *object)
+{
+	UpKbdBacklight *kbd_backlight;
+
+	g_return_if_fail (object != NULL);
+	g_return_if_fail (UP_IS_KBD_BACKLIGHT (object));
+
+	kbd_backlight = UP_KBD_BACKLIGHT (object);
+	kbd_backlight->priv = UP_KBD_BACKLIGHT_GET_PRIVATE (kbd_backlight);
+
+	/* close file */
+	close (kbd_backlight->priv->fd);
+
+	G_OBJECT_CLASS (up_kbd_backlight_parent_class)->finalize (object);
+}
+
+/**
+ * up_kbd_backlight_new:
+ **/
+UpKbdBacklight *
+up_kbd_backlight_new (void)
+{
+	UpKbdBacklight *kbd_backlight;
+	kbd_backlight = g_object_new (UP_TYPE_KBD_BACKLIGHT, NULL);
+	return UP_KBD_BACKLIGHT (kbd_backlight);
+}
+
diff --git a/src/up-kbd-backlight.h b/src/up-kbd-backlight.h
new file mode 100644
index 0000000..2e7c76e
--- /dev/null
+++ b/src/up-kbd-backlight.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Richard Hughes <rich...@hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __UP_KBD_BACKLIGHT_H
+#define __UP_KBD_BACKLIGHT_H
+
+#include <glib-object.h>
+#include <dbus/dbus-glib.h>
+
+G_BEGIN_DECLS
+
+#define UP_TYPE_KBD_BACKLIGHT		(up_kbd_backlight_get_type ())
+#define UP_KBD_BACKLIGHT(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), UP_TYPE_KBD_BACKLIGHT, UpKbdBacklight))
+#define UP_KBD_BACKLIGHT_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), UP_TYPE_KBD_BACKLIGHT, UpKbdBacklightClass))
+#define UP_IS_KBD_BACKLIGHT(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), UP_TYPE_KBD_BACKLIGHT))
+#define UP_IS_KBD_BACKLIGHT_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), UP_TYPE_KBD_BACKLIGHT))
+#define UP_KBD_BACKLIGHT_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), UP_TYPE_KBD_BACKLIGHT, UpKbdBacklightClass))
+
+typedef struct UpKbdBacklightPrivate UpKbdBacklightPrivate;
+
+typedef struct
+{
+	GObject		  parent;
+	UpKbdBacklightPrivate	 *priv;
+} UpKbdBacklight;
+
+typedef struct
+{
+	GObjectClass	parent_class;
+	void		(* brightness_changed)		(UpKbdBacklight		*kbd_backlight,
+							 gint		 value);
+} UpKbdBacklightClass;
+
+UpKbdBacklight		*up_kbd_backlight_new				(void);
+GType		 up_kbd_backlight_get_type			(void);
+void		 up_kbd_backlight_test				(gpointer	 user_data);
+
+gboolean	 up_kbd_backlight_set_brightness		(UpKbdBacklight		*kbd_backlight,
+							 gint		 value,
+							 GError		**error);
+gboolean	 up_kbd_backlight_get_brightness	(UpKbdBacklight		*kbd_backlight,
+							 gint		*value,
+							 GError		**error);
+gboolean	 up_kbd_backlight_get_max_brightness	(UpKbdBacklight		*kbd_backlight,
+							 gint		*value,
+							 GError		**error);
+
+G_END_DECLS
+
+#endif	/* __UP_KBD_BACKLIGHT_H */
diff --git a/src/up-main.c b/src/up-main.c
index 281ea28..9f2cb24 100644
--- a/src/up-main.c
+++ b/src/up-main.c
@@ -40,6 +40,7 @@
 
 #include "up-daemon.h"
 #include "up-qos.h"
+#include "up-kbd-backlight.h"
 #include "up-wakeups.h"
 
 #define DEVKIT_POWER_SERVICE_NAME "org.freedesktop.UPower"
@@ -125,6 +126,7 @@ main (gint argc, gchar **argv)
 	GError *error = NULL;
 	UpDaemon *daemon = NULL;
 	UpQos *qos = NULL;
+	UpKbdBacklight *kbd_backlight = NULL;
 	UpWakeups *wakeups = NULL;
 	GOptionContext *context;
 	DBusGProxy *bus_proxy;
@@ -182,6 +184,7 @@ main (gint argc, gchar **argv)
 	egg_debug ("Starting upowerd version %s", PACKAGE_VERSION);
 
 	qos = up_qos_new ();
+	kbd_backlight = up_kbd_backlight_new ();
 	wakeups = up_wakeups_new ();
 	daemon = up_daemon_new ();
 	loop = g_main_loop_new (NULL, FALSE);
@@ -209,6 +212,8 @@ main (gint argc, gchar **argv)
 out:
 	if (qos != NULL)
 		g_object_unref (qos);
+	if (kbd_backlight != NULL)
+		g_object_unref (kbd_backlight);
 	if (wakeups != NULL)
 		g_object_unref (wakeups);
 	if (daemon != NULL)
-- 
1.7.1

_______________________________________________
devkit-devel mailing list
devkit-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/devkit-devel

Reply via email to