From ffaf526a28c84587590cfab283bd8f144258651e Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 19 Aug 2013 20:03:01 -0500 Subject: add ib-brightness-control for phone menu --- src/ib-brightness-control.c | 149 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 src/ib-brightness-control.c (limited to 'src/ib-brightness-control.c') diff --git a/src/ib-brightness-control.c b/src/ib-brightness-control.c new file mode 100644 index 0000000..cf1e5ad --- /dev/null +++ b/src/ib-brightness-control.c @@ -0,0 +1,149 @@ +/* + * Copyright 2012 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, 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, see . + * + * Authors: + * Renato Araujo Oliveira Filho + */ + +#include +#include +#include +#include + +#include "ib-brightness-control.h" + +struct _IbBrightnessControl +{ + gchar *path; +}; + +IbBrightnessControl* +ib_brightness_control_new (void) +{ + IbBrightnessControl *control; + GUdevClient *client; + gchar *path = NULL; + GList *devices; + + // detect device + client = g_udev_client_new (NULL); + devices = g_udev_client_query_by_subsystem (client, "backlight"); + if (devices != NULL) { + GList *device; + const gchar *device_type; + + for (device = devices; device != NULL; device = device->next) { + device_type = g_udev_device_get_sysfs_attr (device->data, "type"); + if ((g_strcmp0 (device_type, "firmware") == 0) || + (g_strcmp0 (device_type, "platform") == 0) || + (g_strcmp0 (device_type, "raw") == 0)) { + path = g_strdup (g_udev_device_get_sysfs_path (device->data)); + g_print ("found: %s\n", path); + break; + } + } + + g_list_free_full (devices, g_object_unref); + } + else { + g_warning ("Fail to query backlight devices."); + } + + control = g_new0 (IbBrightnessControl, 1); + control->path = path; + + g_object_unref (client); + return control; +} + +void +ib_brightness_control_set_value (IbBrightnessControl* self, gint value) +{ + gint fd; + gchar *filename; + gchar *svalue; + gint length; + + if (self->path == NULL) + return; + + filename = g_build_filename (self->path, "brightness", NULL); + fd = open(filename, O_WRONLY); + if (fd < 0) { + g_warning ("Fail to set brightness."); + g_free (filename); + return; + } + + svalue = g_strdup_printf ("%i", value); + length = strlen (svalue); + + if (write (fd, svalue, length) != length) { + g_warning ("Fail to write brightness information."); + } + + close (fd); + g_free (svalue); + g_free (filename); +} + +gint +ib_brightness_control_get_value_from_file (IbBrightnessControl *self, const gchar *file) +{ + GError *error; + gchar *svalue; + gint value; + gchar *filename; + + if (self->path == NULL) + return 0; + + svalue = NULL; + error = NULL; + filename = g_build_filename (self->path, file, NULL); + g_file_get_contents (filename, &svalue, NULL, &error); + if (error) { + g_warning ("Fail to get brightness value: %s", error->message); + value = -1; + g_error_free (error); + } else { + value = atoi (svalue); + } + + g_free (filename); + + return value; + +} + +gint +ib_brightness_control_get_value (IbBrightnessControl* self) +{ + return ib_brightness_control_get_value_from_file (self, "brightness"); +} + +gint +ib_brightness_control_get_max_value (IbBrightnessControl* self) +{ + return ib_brightness_control_get_value_from_file (self, "max_brightness"); +} + +void +ib_brightness_control_free (IbBrightnessControl *self) +{ + g_free (self->path); + g_free (self); +} + -- cgit v1.2.3