From 22e4c33606bb57e2b966ae11539be6ab232e3d72 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Sat, 11 Feb 2023 12:46:27 +0100 Subject: [PATCH] fbd-dev-led-multicolor: Support red, green, blue and white LED colors Provide our own supports_color method to specify which colors are actually implemented by the driver. RGB LEDs could provide different colors as well such as orange, purple, etc. but those are not supported yet. --- src/fbd-dev-led-multicolor.c | 21 +++++++++++++++++++++ tests/test-fbd-dev-led.c | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/fbd-dev-led-multicolor.c b/src/fbd-dev-led-multicolor.c index bcb5d17..23fcf54 100644 --- a/src/fbd-dev-led-multicolor.c +++ b/src/fbd-dev-led-multicolor.c @@ -144,6 +144,26 @@ fbd_dev_led_multicolor_set_color (FbdDevLed *led, } +static gboolean +fbd_dev_led_multicolor_supports_color (FbdDevLed *led, + FbdFeedbackLedColor color) +{ + switch(color) { + case FBD_FEEDBACK_LED_COLOR_WHITE: + return TRUE; + case FBD_FEEDBACK_LED_COLOR_RED: + return TRUE; + case FBD_FEEDBACK_LED_COLOR_GREEN: + return TRUE; + case FBD_FEEDBACK_LED_COLOR_BLUE: + return TRUE; + default: + g_warning ("Color unsupported: %d", color); + return FALSE; + } +} + + static void fbd_dev_led_multicolor_class_init (FbdDevLedMulticolorClass *klass) { @@ -151,6 +171,7 @@ fbd_dev_led_multicolor_class_init (FbdDevLedMulticolorClass *klass) fbd_dev_led_class->probe = fbd_dev_led_multicolor_probe; fbd_dev_led_class->set_color = fbd_dev_led_multicolor_set_color; + fbd_dev_led_class->supports_color = fbd_dev_led_multicolor_supports_color; } diff --git a/tests/test-fbd-dev-led.c b/tests/test-fbd-dev-led.c index 9b5fe8d..533accd 100644 --- a/tests/test-fbd-dev-led.c +++ b/tests/test-fbd-dev-led.c @@ -60,7 +60,7 @@ test_fbd_dev_led_multicolor (FbdUmockdevFixture *fixture, gconstpointer unused) led = fbd_dev_led_multicolor_new (dev, &err); g_assert_no_error (err); g_assert_cmpint (fbd_dev_led_get_max_brightness (led), ==, 248); - g_assert_true (fbd_dev_led_supports_color (led, FBD_FEEDBACK_LED_COLOR_RGB)); + g_assert_true (fbd_dev_led_supports_color (led, FBD_FEEDBACK_LED_COLOR_BLUE)); g_assert_true (fbd_dev_led_start_periodic (led, 50, 50)); g_assert_finalize_object (led);