summaryrefslogtreecommitdiffstats
path: root/liblights
diff options
context:
space:
mode:
authorChristopher N. Hesse <raymanfx@gmail.com>2016-12-07 12:12:23 +0100
committerChristopher N. Hesse <raymanfx@gmail.com>2017-01-30 22:03:59 +0000
commit0bb3363f4069f9a4b2f0f0cf7bc68d5cb256b05c (patch)
tree42055021d4a770ff01dae94ab21ef29844c1b993 /liblights
parenta16bc657437ec69be3082da0803ba982a53ff11e (diff)
downloadandroid_hardware_samsung-0bb3363f4069f9a4b2f0f0cf7bc68d5cb256b05c.tar.gz
android_hardware_samsung-0bb3363f4069f9a4b2f0f0cf7bc68d5cb256b05c.tar.bz2
android_hardware_samsung-0bb3363f4069f9a4b2f0f0cf7bc68d5cb256b05c.zip
liblights: Expose panel brightness in helper lib
Change-Id: I810166818eac84466dfe2c4b88dff47e83a181c0
Diffstat (limited to 'liblights')
-rw-r--r--liblights/Android.mk19
-rw-r--r--liblights/include/liblights/samsung_lights_helper.h32
-rw-r--r--liblights/lights.c64
-rw-r--r--liblights/lights_helper.c148
4 files changed, 200 insertions, 63 deletions
diff --git a/liblights/Android.mk b/liblights/Android.mk
index 3acc7ba..03af771 100644
--- a/liblights/Android.mk
+++ b/liblights/Android.mk
@@ -12,17 +12,30 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-ifneq ($(TARGET_PROVIDES_LIBLIGHT),true)
-
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := lights.c
+LOCAL_SRC_FILES := lights_helper.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
+
+LOCAL_SHARED_LIBRARIES := liblog
+
+LOCAL_MODULE := liblights_helper
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_STATIC_LIBRARY)
+
+ifneq ($(TARGET_PROVIDES_LIBLIGHT),true)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := lights.c
LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_STATIC_LIBRARIES := liblights_helper
LOCAL_MODULE := lights.$(TARGET_BOOTLOADER_BOARD_NAME)
LOCAL_MODULE_RELATIVE_PATH := hw
diff --git a/liblights/include/liblights/samsung_lights_helper.h b/liblights/include/liblights/samsung_lights_helper.h
new file mode 100644
index 0000000..4200207
--- /dev/null
+++ b/liblights/include/liblights/samsung_lights_helper.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SAMSUNG_LIGHTS_HELPER_H
+#define SAMSUNG_LIGHTS_HELPER_H
+
+#include <samsung_lights.h>
+
+/*
+ * Interfaces for other modules accessing lights HAL data.
+ * For documentation, see lights_helper.c
+ */
+extern int set_cur_button_brightness(const int brightness);
+extern int get_cur_panel_brightness();
+extern int get_max_panel_brightness();
+extern int set_cur_panel_brightness(const int brightness);
+extern int set_max_panel_brightness(const int brightness);
+
+#endif // SAMSUNG_LIGHTS_HELPER_H
diff --git a/liblights/lights.c b/liblights/lights.c
index 14946c5..0b82256 100644
--- a/liblights/lights.c
+++ b/liblights/lights.c
@@ -30,6 +30,7 @@
#include <sys/types.h>
#include <hardware/lights.h>
+#include <liblights/samsung_lights_helper.h>
#include "samsung_lights.h"
@@ -58,63 +59,6 @@ void init_g_lock(void)
pthread_mutex_init(&g_lock, NULL);
}
-static int read_int(char const *path)
-{
- int fd, len;
- int num_bytes = 10;
- char buf[11];
- int retval;
-
- fd = open(path, O_RDONLY);
- if (fd < 0) {
- ALOGE("%s: failed to open %s\n", __func__, path);
- goto fail;
- }
-
- len = read(fd, buf, num_bytes - 1);
- if (len < 0) {
- ALOGE("%s: failed to read from %s\n", __func__, path);
- goto fail;
- }
-
- buf[len] = '\0';
- close(fd);
-
- // no endptr, decimal base
- retval = strtol(buf, NULL, 10);
- return retval == 0 ? -1 : retval;
-
-fail:
- if (fd >= 0)
- close(fd);
- return -1;
-}
-
-static int write_int(char const *path, int value)
-{
- int fd;
- static int already_warned;
-
- already_warned = 0;
-
- ALOGV("write_int: path %s, value %d", path, value);
- fd = open(path, O_RDWR);
-
- if (fd >= 0) {
- char buffer[20];
- int bytes = sprintf(buffer, "%d\n", value);
- int amt = write(fd, buffer, bytes);
- close(fd);
- return amt == -1 ? -errno : 0;
- } else {
- if (already_warned == 0) {
- ALOGE("write_int failed to open %s\n", path);
- already_warned = 1;
- }
- return -errno;
- }
-}
-
static int write_str(char const *path, const char* value)
{
int fd;
@@ -165,7 +109,7 @@ static int set_light_backlight(struct light_device_t *dev __unused,
}
pthread_mutex_lock(&g_lock);
- err = write_int(PANEL_BRIGHTNESS_NODE, brightness);
+ err = set_cur_panel_brightness(brightness);
if (err == 0)
g_backlight.cur_brightness = brightness;
@@ -181,7 +125,7 @@ static int set_light_buttons(struct light_device_t* dev __unused,
pthread_mutex_lock(&g_lock);
- err = write_int(BUTTON_BRIGHTNESS_NODE, on ? 1 : 0);
+ err = set_cur_button_brightness(on ? 1 : 0);
pthread_mutex_unlock(&g_lock);
@@ -359,7 +303,7 @@ static int open_lights(const struct hw_module_t *module, char const *name,
else
return -EINVAL;
- int max_brightness = read_int(PANEL_MAX_BRIGHTNESS_NODE);
+ int max_brightness = get_max_panel_brightness();
if (max_brightness < 0) {
ALOGE("%s: failed to read max panel brightness, fallback to 255!",
__func__);
diff --git a/liblights/lights_helper.c b/liblights/lights_helper.c
new file mode 100644
index 0000000..c3406ab
--- /dev/null
+++ b/liblights/lights_helper.c
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <cutils/log.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <liblights/samsung_lights_helper.h>
+
+/*
+ * Reads an Integer from a file.
+ *
+ * @param path The absolute path string.
+ * @return The Integer with decimal base, -1 on error.
+ */
+int read_int(char const *path)
+{
+ int fd, len;
+ int num_bytes = 10;
+ char buf[11];
+ int retval;
+
+ fd = open(path, O_RDONLY);
+ if (fd < 0) {
+ ALOGE("%s: failed to open %s\n", __func__, path);
+ goto fail;
+ }
+
+ len = read(fd, buf, num_bytes - 1);
+ if (len < 0) {
+ ALOGE("%s: failed to read from %s\n", __func__, path);
+ goto fail;
+ }
+
+ buf[len] = '\0';
+ close(fd);
+
+ // no endptr, decimal base
+ retval = strtol(buf, NULL, 10);
+ return retval == 0 ? -1 : retval;
+
+fail:
+ if (fd >= 0)
+ close(fd);
+ return -1;
+}
+
+/*
+ * Writes an Integer to a file.
+ *
+ * @param path The absolute path string.
+ * @param value The Integer value to be written.
+ * @return 0 on success, -1 or errno on error.
+ */
+int write_int(char const *path, const int value)
+{
+ int fd;
+ static int already_warned;
+
+ already_warned = 0;
+
+ ALOGV("write_int: path %s, value %d", path, value);
+ fd = open(path, O_RDWR);
+
+ if (fd >= 0) {
+ char buffer[20];
+ int bytes = sprintf(buffer, "%d\n", value);
+ int amt = write(fd, buffer, bytes);
+ close(fd);
+ return amt == -1 ? -errno : 0;
+ } else {
+ if (already_warned == 0) {
+ ALOGE("write_int failed to open %s\n", path);
+ already_warned = 1;
+ }
+ return -errno;
+ }
+}
+
+/*
+ * Set the current button brightness via sysfs.
+ *
+ * @param brightness The brightness value.
+ * @return 0 on success, -1 or errno on error.
+ */
+inline int set_cur_button_brightness(const int brightness)
+{
+ return write_int(BUTTON_BRIGHTNESS_NODE, brightness);
+}
+
+/*
+ * Read the current panel brightness from sysfs.
+ *
+ * @return The brightness as Integer, -1 on error.
+ */
+inline int get_cur_panel_brightness()
+{
+ return read_int(PANEL_BRIGHTNESS_NODE);
+}
+
+/*
+ * Read the maximum panel brightness from sysfs.
+ *
+ * @return The brightness as Integer, -1 on error.
+ */
+inline int get_max_panel_brightness()
+{
+ return read_int(PANEL_MAX_BRIGHTNESS_NODE);
+}
+
+/*
+ * Set the current panel brightness via sysfs.
+ *
+ * @param brightness The (scaled) brightness value.
+ * @return 0 on success, -1 or errno on error.
+ */
+inline int set_cur_panel_brightness(const int brightness)
+{
+ return write_int(PANEL_BRIGHTNESS_NODE, brightness);
+}
+
+/*
+ * Set the maximum panel brightness via sysfs.
+ *
+ * @param brightness The brightness value.
+ * @return 0 on success, -1 or errno on error.
+ */
+inline int set_max_panel_brightness(const int brightness)
+{
+ return write_int(PANEL_MAX_BRIGHTNESS_NODE, brightness);
+}