From bcb9d5addba7c15749a44122795b39d2ba2c2898 Mon Sep 17 00:00:00 2001 From: Mathieu Anquetin Date: Thu, 29 Jun 2023 16:38:14 +0200 Subject: [PATCH] samples: led_lp50xx: fix color mapping Some boards may have a color mapping that is different from RGB and this mapping should be used when providing the buffer to led_set_color(). Signed-off-by: Mathieu Anquetin --- samples/drivers/led_lp50xx/src/main.c | 33 ++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/samples/drivers/led_lp50xx/src/main.c b/samples/drivers/led_lp50xx/src/main.c index 9dc818100e2574c..fe41c982890363b 100644 --- a/samples/drivers/led_lp50xx/src/main.c +++ b/samples/drivers/led_lp50xx/src/main.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -46,21 +47,47 @@ static uint8_t colors[][3] = { */ static int run_led_test(const struct device *lp50xx_dev, uint8_t led) { + const struct led_info *info; uint8_t idx; int err; LOG_INF("Testing LED %d (LED API)", led); + err = led_get_info(lp50xx_dev, led, &info); + if (err < 0) { + LOG_ERR("Failed to get LED %d info", led); + return err; + } + for (idx = 0; idx < ARRAY_SIZE(colors); idx++) { uint16_t level; + uint8_t color; + uint8_t buf[3]; + + for (color = 0; color < info->num_colors; color++) { + switch (info->color_mapping[color]) { + case LED_COLOR_ID_RED: + buf[color] = colors[idx][0]; + continue; + case LED_COLOR_ID_GREEN: + buf[color] = colors[idx][1]; + continue; + case LED_COLOR_ID_BLUE: + buf[color] = colors[idx][2]; + continue; + default: + LOG_ERR("Invalid color: %d", + info->color_mapping[color]); + return -EINVAL; + } + } /* Update LED color. */ - err = led_set_color(lp50xx_dev, led, 3, colors[idx]); + err = led_set_color(lp50xx_dev, led, 3, buf); if (err < 0) { LOG_ERR("Failed to set LED %d color to " "%02x:%02x:%02x, err=%d", led, - colors[idx][0], colors[idx][1], - colors[idx][2], err); + buf[0], buf[1], buf[2], err); return err; } k_sleep(SLEEP_DELAY);