summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Cerqueira <ricardo@cyngn.com>2015-01-03 19:30:06 +0100
committerDaniel Hillenbrand <codeworkx@cyanogenmod.org>2015-01-03 19:30:06 +0100
commit518d1720da8e2ea2f41546ee0c2d436a29d079f2 (patch)
treeea454ac2573f38c8a77cdc4234867f36a9c0ab3b
parentf3ba720f70047c4924024f3867bb50ade67bc2a2 (diff)
downloadandroid_hardware_samsung-518d1720da8e2ea2f41546ee0c2d436a29d079f2.tar.gz
android_hardware_samsung-518d1720da8e2ea2f41546ee0c2d436a29d079f2.tar.bz2
android_hardware_samsung-518d1720da8e2ea2f41546ee0c2d436a29d079f2.zip
lights: Clean up light priorities and dedupe code
Attention > Notification > Battery Change-Id: Ie3d17aced31673b281d718b76973d5774707a21d
-rw-r--r--exynos4/exynos4x12/liblights/lights.c93
1 files changed, 45 insertions, 48 deletions
diff --git a/exynos4/exynos4x12/liblights/lights.c b/exynos4/exynos4x12/liblights/lights.c
index c8073d5..f49c695 100644
--- a/exynos4/exynos4x12/liblights/lights.c
+++ b/exynos4/exynos4x12/liblights/lights.c
@@ -57,7 +57,15 @@ struct led_config {
char blink[MAX_WRITE_CMD];
};
-struct led_config g_BatteryStore;
+static struct light_state_t g_BatteryStore;
+static struct light_state_t g_AttentionStore;
+static struct light_state_t g_NotificationStore;
+
+static int
+is_lit(struct light_state_t const* state)
+{
+ return state->color & 0x00ffffff;
+}
void init_g_lock(void)
{
@@ -189,75 +197,68 @@ static int write_leds(struct led_config led)
return err;
}
-static int set_light_leds(struct light_state_t const *state, int type)
+static int set_light_leds(struct light_state_t const *state)
{
struct led_config led;
+ struct light_state_t *activeState;
+ int onMS, offMS;
unsigned int colorRGB;
- colorRGB = get_dimmed_color(state, 200);
+ if (is_lit(&g_AttentionStore)) {
+ activeState = &g_AttentionStore;
+ colorRGB = get_dimmed_color(activeState, 200);
+ } else {
+ if (is_lit(&g_BatteryStore) && !is_lit(&g_NotificationStore)) {
+ activeState = &g_BatteryStore;
+ colorRGB = get_dimmed_color(activeState, 20);
+ } else {
+ activeState = &g_NotificationStore;
+ colorRGB = get_dimmed_color(activeState, 200);
+ }
+ }
- switch (state->flashMode) {
- case LIGHT_FLASH_NONE:
- // use battery led state stored
- if (g_BatteryStore.blink == NULL) {
- led.red = 0;
- led.green = 0;
- led.blue = 0;
- snprintf(g_BatteryStore.blink, MAX_WRITE_CMD, "0x000000 0 0");
- }
- led = g_BatteryStore;
- break;
+
+ switch (activeState->flashMode) {
case LIGHT_FLASH_TIMED:
- case LIGHT_FLASH_HARDWARE:
- led.red = (colorRGB >> 16) & 0xFF;
- led.green = (colorRGB >> 8) & 0xFF;
- led.blue = colorRGB & 0xFF;
- snprintf(led.blink, MAX_WRITE_CMD, "0x%x %d %d", colorRGB, state->flashOnMS, state->flashOffMS);
- ALOGD("set_light_leds 0x%x %d %d", colorRGB, state->flashOnMS, state->flashOffMS);
+ onMS = activeState->flashOnMS;
+ offMS = activeState->flashOffMS;
break;
+ case LIGHT_FLASH_HARDWARE:
+ case LIGHT_FLASH_NONE:
default:
- return -EINVAL;
+ onMS = 0;
+ offMS = 0;
+ break;
}
+ led.red = (colorRGB >> 16) & 0xFF;
+ led.green = (colorRGB >> 8) & 0xFF;
+ led.blue = colorRGB & 0xFF;
+ snprintf(led.blink, MAX_WRITE_CMD, "0x%x %d %d", colorRGB, onMS, offMS);
+ ALOGD("set_light_leds 0x%x %d %d", colorRGB, onMS, offMS);
+
return write_leds(led);
}
static int set_light_leds_notifications(struct light_device_t *dev,
struct light_state_t const *state)
{
- return set_light_leds(state, 0);
+ g_NotificationStore = *state;
+ return set_light_leds(state);
}
static int set_light_battery(struct light_device_t *dev,
struct light_state_t const *state)
{
- struct led_config led;
- int brightness = rgb_to_brightness(state);
- unsigned int colorRGB;
-
- colorRGB = get_dimmed_color(state, 20);
-
- if (brightness == 0) {
- led.red = 0;
- led.green = 0;
- led.blue = 0;
- snprintf(led.blink, MAX_WRITE_CMD, "0x000000 0 0");
- } else {
- led.red = (colorRGB >> 16) & 0xFF;
- led.green = (colorRGB >> 8) & 0xFF;
- led.blue = colorRGB & 0xFF;
- snprintf(led.blink, MAX_WRITE_CMD, "0x%x %d %d", colorRGB, state->flashOnMS, state->flashOffMS);
- ALOGD("set_light_battery 0x%x %d %d", colorRGB, state->flashOnMS, state->flashOffMS);
- }
-
- g_BatteryStore = led;
- return write_leds(led);
+ g_BatteryStore = *state;
+ return set_light_leds(state);
}
static int set_light_leds_attention(struct light_device_t *dev,
struct light_state_t const *state)
{
- return set_light_leds(state, 1);
+ g_AttentionStore = *state;
+ return set_light_leds(state);
}
static int close_lights(struct light_device_t *dev)
@@ -294,10 +295,6 @@ static int open_lights(const struct hw_module_t *module, char const *name,
pthread_once(&g_init, init_g_lock);
- g_BatteryStore.red = 0;
- g_BatteryStore.green = 0;
- g_BatteryStore.blue = 0;
-
struct light_device_t *dev = malloc(sizeof(struct light_device_t));
memset(dev, 0, sizeof(*dev));