Config for different led colors displaying the car states
[apps/native/gear-racing-car.git] / src / resource / resource_led.c
index 9c40a5d..71bd003 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <glib.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <limits.h>
 #include <stdlib.h>
 #include <peripheral_io.h>
@@ -173,6 +174,15 @@ static gboolean _restore_rgb_l2c_color_cb(gpointer data)
        return false;
 }
 
+static gboolean _restore_rgb_color_cb(gpointer data)
+{
+       _restore_bi_color_cb(data);
+       _restore_rgb_gpio_color_cb(data);
+       _restore_rgb_l2c_color_cb(data);
+
+       return false;
+}
+
 static peripheral_gpio_h _init_gpio(int default_gpio, char *key)
 {
        peripheral_gpio_h gpio;
@@ -274,14 +284,14 @@ void resource_led_destroy(void)
        peripheral_gpio_close(s_info.rgb_gpio[1]);
        peripheral_gpio_close(s_info.rgb_gpio[2]);
 
-       resource_rgb_l2c_set(0, 0, 0);
+       resource_led_rgb_l2c_set(0, 0, 0);
 
        resource_pca9685_fini(DEFAULT_RGB_L2C_R);
        resource_pca9685_fini(DEFAULT_RGB_L2C_G);
        resource_pca9685_fini(DEFAULT_RGB_L2C_B);
 }
 
-void resource_bi_led_set(bi_led_color_e color)
+void resource_led_bi_set(bi_led_color_e color)
 {
        _D("Set led to: %d", color);
        if (color == s_info.current_color) {
@@ -292,7 +302,7 @@ void resource_bi_led_set(bi_led_color_e color)
        _led_bi_set(color);
 }
 
-void resource_bi_led_blink(bi_led_color_e color, unsigned timeout)
+void resource_led_bi_blink(bi_led_color_e color, unsigned timeout)
 {
        if (color == s_info.current_color) {
                return;
@@ -302,7 +312,7 @@ void resource_bi_led_blink(bi_led_color_e color, unsigned timeout)
        g_timeout_add(timeout, _restore_bi_color_cb, NULL);
 }
 
-void resource_rgb_gpio_set(bool red, bool green, bool blue)
+void resource_led_rgb_gpio_set(bool red, bool green, bool blue)
 {
        if (red == s_info.current_rgb_gpio_color[0] &&
                        green == s_info.current_rgb_gpio_color[1] &&
@@ -318,7 +328,7 @@ void resource_rgb_gpio_set(bool red, bool green, bool blue)
        _rgb_gpio_set(red, green, blue);
 }
 
-void resource_gpio_rgb_blink(bool red, bool green, bool blue, unsigned timeout)
+void resource_led_gpio_rgb_blink(bool red, bool green, bool blue, unsigned timeout)
 {
        if (red == s_info.current_rgb_gpio_color[0] &&
                        green == s_info.current_rgb_gpio_color[1] &&
@@ -330,7 +340,7 @@ void resource_gpio_rgb_blink(bool red, bool green, bool blue, unsigned timeout)
        g_timeout_add(timeout, _restore_rgb_gpio_color_cb, NULL);
 }
 
-void resource_rgb_l2c_set(int red, int green, int blue)
+void resource_led_rgb_l2c_set(int red, int green, int blue)
 {
        if (red == s_info.current_rgb_l2c_color[0] &&
                        green == s_info.current_rgb_l2c_color[1] &&
@@ -345,7 +355,7 @@ void resource_rgb_l2c_set(int red, int green, int blue)
        _rgb_l2c_set(red, green, blue);
 }
 
-void resource_rgb_l2c_blink(int red, int green, int blue, unsigned timeout)
+void resource_led_rgb_l2c_blink(int red, int green, int blue, unsigned timeout)
 {
        if (red == s_info.current_rgb_l2c_color[0] &&
                        green == s_info.current_rgb_l2c_color[1] &&
@@ -357,3 +367,43 @@ void resource_rgb_l2c_blink(int red, int green, int blue, unsigned timeout)
        g_timeout_add(timeout, _restore_rgb_l2c_color_cb, NULL);
 }
 
+void resource_led_set_rgb_colors(char *key,
+               int def_r_3bit, int def_g_3bit, int def_b_3bit,
+               int def_r_24bit, int def_g_24bit, int def_b_24bit,
+               bi_led_color_e bi_led)
+{
+       int red, green, blue;
+       char final_key[PATH_MAX];
+
+       snprintf(final_key, PATH_MAX, "3bit.%s", key);
+       bool modified = config_get_rgb_with_default("Rpi.led", final_key, def_r_3bit, def_g_3bit, def_b_3bit, &red, &green, &blue);
+       resource_led_rgb_gpio_set(red, green, blue);
+
+       _D("%s: 3bit color: [%d, %d, %d]", final_key, red, green, blue);
+
+       snprintf(final_key, PATH_MAX, "24bit.%s", key);
+       modified |= config_get_rgb_with_default("Rpi.led", final_key, def_r_24bit, def_g_24bit, def_b_24bit, &red, &green, &blue);
+       resource_led_rgb_l2c_set(red, green, blue);
+
+       _D("%s: 24bit color: [%d, %d, %d]", final_key, red, green, blue);
+
+       int value;
+       snprintf(final_key, PATH_MAX, "bicolor.%s", key);
+       modified |= config_get_int_with_default("Rpi.led", final_key, bi_led, &value);
+       resource_led_bi_set(value);
+
+       if (modified) {
+               config_save();
+       }
+       _D("%s: bicolor: [%d]", final_key, value);
+}
+
+void resource_led_blink_rgb_colors(char *key,
+               int def_r_3bit, int def_g_3bit, int def_b_3bit,
+               int def_r_24bit, int def_g_24bit, int def_b_24bit,
+               bi_led_color_e bi_led, int timeout)
+{
+       resource_led_set_rgb_colors(key, def_r_3bit, def_g_3bit, def_b_3bit, def_r_24bit, def_g_24bit, def_b_24bit, bi_led);
+
+       g_timeout_add(timeout, _restore_rgb_color_cb, NULL);
+}