ESP-IDF Firmware
Firmware architecture and call graph
Loading...
Searching...
No Matches
led_strip_api.c
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#include "esp_log.h"
7#include "esp_check.h"
8#include "led_strip.h"
10
11static const char *TAG = "led_strip";
12
13esp_err_t led_strip_set_pixel(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue)
14{
15 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
16 return strip->set_pixel(strip, index, red, green, blue);
17}
18
19esp_err_t led_strip_set_pixel_hsv(led_strip_handle_t strip, uint32_t index, uint16_t hue, uint8_t saturation, uint8_t value)
20{
21 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
22
23 uint32_t red = 0;
24 uint32_t green = 0;
25 uint32_t blue = 0;
26
27 uint32_t rgb_max = value;
28 uint32_t rgb_min = rgb_max * (255 - saturation) / 255.0f;
29
30 uint32_t i = hue / 60;
31 uint32_t diff = hue % 60;
32
33 // RGB adjustment amount by hue
34 uint32_t rgb_adj = (rgb_max - rgb_min) * diff / 60;
35
36 switch (i) {
37 case 0:
38 red = rgb_max;
39 green = rgb_min + rgb_adj;
40 blue = rgb_min;
41 break;
42 case 1:
43 red = rgb_max - rgb_adj;
44 green = rgb_max;
45 blue = rgb_min;
46 break;
47 case 2:
48 red = rgb_min;
49 green = rgb_max;
50 blue = rgb_min + rgb_adj;
51 break;
52 case 3:
53 red = rgb_min;
54 green = rgb_max - rgb_adj;
55 blue = rgb_max;
56 break;
57 case 4:
58 red = rgb_min + rgb_adj;
59 green = rgb_min;
60 blue = rgb_max;
61 break;
62 default:
63 red = rgb_max;
64 green = rgb_min;
65 blue = rgb_max - rgb_adj;
66 break;
67 }
68
69 return strip->set_pixel(strip, index, red, green, blue);
70}
71
72esp_err_t led_strip_set_pixel_rgbw(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue, uint32_t white)
73{
74 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
75 return strip->set_pixel_rgbw(strip, index, red, green, blue, white);
76}
77
79{
80 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
81 return strip->refresh(strip);
82}
83
85{
86 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
87 return strip->clear(strip);
88}
89
91{
92 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
93 return strip->del(strip);
94}
int esp_err_t
Definition esp_err.h:21
esp_err_t led_strip_clear(led_strip_handle_t strip)
Clear LED strip (turn off all LEDs).
esp_err_t led_strip_set_pixel_rgbw(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue, uint32_t white)
Set RGBW for a specific pixel.
esp_err_t led_strip_set_pixel_hsv(led_strip_handle_t strip, uint32_t index, uint16_t hue, uint8_t saturation, uint8_t value)
Set HSV for a specific pixel.
esp_err_t led_strip_refresh(led_strip_handle_t strip)
Refresh memory colors to LEDs.
esp_err_t led_strip_del(led_strip_handle_t strip)
Free LED strip resources.
esp_err_t led_strip_set_pixel(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue)
Set RGB for a specific pixel.
struct led_strip_t * led_strip_handle_t
LED strip handle.
static const char * TAG
Definition main/main.c:31
esp_err_t(* refresh)(led_strip_t *strip)
Refresh memory colors to LEDs.
esp_err_t(* set_pixel)(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue)
Set RGB for a specific pixel.
esp_err_t(* del)(led_strip_t *strip)
Free LED strip resources.
esp_err_t(* set_pixel_rgbw)(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue, uint32_t white)
Set RGBW for a specific pixel. Similar to set_pixel but also set the white component.
esp_err_t(* clear)(led_strip_t *strip)
Clear LED strip (turn off all LEDs).