FastLED 3.9.13
Loading...
Searching...
No Matches
led_strip_api.c
1
2#ifdef ESP32
3
4#include "enabled.h"
5
6#if FASTLED_RMT5 || FASTLED_ESP32_HAS_CLOCKLESS_SPI
7/*
8 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12#include "esp_log.h"
13#include "esp_check.h"
14#include "led_strip.h"
15#include "led_strip_interface.h"
16
17static const char *TAG = "led_strip";
18
19esp_err_t led_strip_set_pixel(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue)
20{
21 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
22 return strip->set_pixel(strip, index, red, green, blue);
23}
24
25esp_err_t led_strip_set_pixel_hsv(led_strip_handle_t strip, uint32_t index, uint16_t hue, uint8_t saturation, uint8_t value)
26{
27 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
28
29 uint32_t red = 0;
30 uint32_t green = 0;
31 uint32_t blue = 0;
32
33 uint32_t rgb_max = value;
34 uint32_t rgb_min = rgb_max * (255 - saturation) / 255.0f;
35
36 uint32_t i = hue / 60;
37 uint32_t diff = hue % 60;
38
39 // RGB adjustment amount by hue
40 uint32_t rgb_adj = (rgb_max - rgb_min) * diff / 60;
41
42 switch (i) {
43 case 0:
44 red = rgb_max;
45 green = rgb_min + rgb_adj;
46 blue = rgb_min;
47 break;
48 case 1:
49 red = rgb_max - rgb_adj;
50 green = rgb_max;
51 blue = rgb_min;
52 break;
53 case 2:
54 red = rgb_min;
55 green = rgb_max;
56 blue = rgb_min + rgb_adj;
57 break;
58 case 3:
59 red = rgb_min;
60 green = rgb_max - rgb_adj;
61 blue = rgb_max;
62 break;
63 case 4:
64 red = rgb_min + rgb_adj;
65 green = rgb_min;
66 blue = rgb_max;
67 break;
68 default:
69 red = rgb_max;
70 green = rgb_min;
71 blue = rgb_max - rgb_adj;
72 break;
73 }
74
75 return strip->set_pixel(strip, index, red, green, blue);
76}
77
78esp_err_t led_strip_refresh_wait_done(led_strip_handle_t strip)
79{
80 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
81 return strip->refresh_wait_done(strip);
82}
83
84esp_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)
85{
86 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
87 return strip->set_pixel_rgbw(strip, index, red, green, blue, white);
88}
89
90esp_err_t led_strip_refresh(led_strip_handle_t strip)
91{
92 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
93 ESP_RETURN_ON_ERROR(strip->refresh_async(strip), TAG, "refresh failed");
94 ESP_RETURN_ON_ERROR(strip->refresh_wait_done(strip), TAG, "wait for done failed");
95 return ESP_OK;
96}
97
98esp_err_t led_strip_refresh_async(led_strip_handle_t strip)
99{
100 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
101 return strip->refresh_async(strip);
102}
103
104esp_err_t led_strip_clear(led_strip_handle_t strip)
105{
106 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
107 return strip->clear(strip);
108}
109
110esp_err_t led_strip_del(led_strip_handle_t strip)
111{
112 ESP_RETURN_ON_FALSE(strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
113 return strip->del(strip);
114}
115
116#endif // FASTLED_RMT5 || FASTLED_ESP_HAS_CLOCKLESS_SPI
117
118#endif // ESP32
LED strip interface definition.
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.
esp_err_t(* clear)(led_strip_t *strip)
Clear LED strip (turn off all LEDs)