potter: kang griffin liblight

Change-Id: I636650f7e0b903c93d0288515213360b37607e50
This commit is contained in:
Vachounet
2017-05-15 10:13:38 +02:00
parent fa79c3e16b
commit dc80d1bcdc

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2016 The CyanogenMod Project * Copyright (C) 2015 The CyanogenMod Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -12,32 +12,37 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*
* Blinking patterns reference:
* https://github.com/MotorolaMobilityLLC/kernel-msm/commit/3b521f965fae990b2a7f13a6fc98fcf0ea50f66b
*
*/ */
#include <cutils/log.h> #include <cutils/log.h>
#include <cutils/properties.h>
#include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <pthread.h> #include <pthread.h>
#include <math.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <hardware/lights.h> #include <hardware/lights.h>
/******************************************************************************/ /******************************************************************************/
#define LED_LIGHT_ON 3
#define LED_LIGHT_OFF 0 #define LED_LIGHT_OFF 0
#define LED_LIGHT_ON 10
static pthread_once_t g_init = PTHREAD_ONCE_INIT; static pthread_once_t g_init = PTHREAD_ONCE_INIT;
static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;
static struct light_state_t g_battery;
static struct light_state_t g_notification;
char const*const CHARGING_LED_FILE char const*const CHARGING_LED_FILE
= "/sys/class/leds/white/brightness"; = "/sys/class/leds/charging/brightness";
char const*const LCD_FILE char const*const LCD_FILE
= "/sys/class/leds/lcd-backlight/brightness"; = "/sys/class/leds/lcd-backlight/brightness";
@@ -89,7 +94,7 @@ rgb_to_brightness(struct light_state_t const* state)
} }
static int static int
set_light_backlight(__attribute__((unused)) struct light_device_t* dev, set_light_backlight(struct light_device_t* dev,
struct light_state_t const* state) struct light_state_t const* state)
{ {
int err = 0; int err = 0;
@@ -101,28 +106,52 @@ set_light_backlight(__attribute__((unused)) struct light_device_t* dev,
} }
static int static int
set_light_notifications(struct light_device_t* dev, struct light_state_t const* state) set_speaker_light_locked(struct light_device_t* dev,
struct light_state_t const* state)
{ {
int brightness_level; int brightness_level;
int err = 0;
if (!dev)
return -1;
pthread_mutex_lock(&g_lock);
if (is_lit(state)) if (is_lit(state))
brightness_level = LED_LIGHT_ON; brightness_level = LED_LIGHT_ON;
else else
brightness_level = LED_LIGHT_OFF; brightness_level = LED_LIGHT_OFF;
err = write_int(CHARGING_LED_FILE, brightness_level); return write_int(CHARGING_LED_FILE, brightness_level);
}
static void
handle_speaker_battery_locked(struct light_device_t* dev)
{
if (is_lit(&g_notification)) {
set_speaker_light_locked(dev, &g_notification);
} else {
set_speaker_light_locked(dev, &g_battery);
}
}
static int
set_light_battery(struct light_device_t* dev,
struct light_state_t const* state)
{
int err = 0;
pthread_mutex_lock(&g_lock);
g_battery = *state;
handle_speaker_battery_locked(dev);
pthread_mutex_unlock(&g_lock); pthread_mutex_unlock(&g_lock);
return err; return err;
} }
static int
set_light_notifications(struct light_device_t* dev,
struct light_state_t const* state)
{
int err = 0;
pthread_mutex_lock(&g_lock);
g_notification = *state;
handle_speaker_battery_locked(dev);
pthread_mutex_unlock(&g_lock);
return err;
}
/** Close the lights device */ /** Close the lights device */
static int static int
@@ -152,6 +181,8 @@ static int open_lights(const struct hw_module_t* module, char const* name,
set_light = set_light_backlight; set_light = set_light_backlight;
else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name)) else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name))
set_light = set_light_notifications; set_light = set_light_notifications;
else if (0 == strcmp(LIGHT_ID_BATTERY, name))
set_light = set_light_battery;
else else
return -EINVAL; return -EINVAL;
@@ -182,7 +213,8 @@ struct hw_module_t HAL_MODULE_INFO_SYM = {
.version_major = 1, .version_major = 1,
.version_minor = 0, .version_minor = 0,
.id = LIGHTS_HARDWARE_MODULE_ID, .id = LIGHTS_HARDWARE_MODULE_ID,
.name = "MSM8953 lights Module", .name = "lights Module",
.author = "Google, Inc., Alberto97, dhacker29", .author = "Google, Inc., dhacker29",
.methods = &lights_module_methods, .methods = &lights_module_methods,
}; };