Some checks failed
ESP-IDF Build / build (esp32s3, latest) (push) Failing after 22s
ESP-IDF Build / build (esp32s3, release-v5.4) (push) Failing after 18s
ESP-IDF Build / build (esp32s3, release-v5.5) (push) Failing after 21s
Signed-off-by: Peter Siegmund <developer@mars3142.org>
93 lines
2.9 KiB
C++
93 lines
2.9 KiB
C++
#include "led_manager.h"
|
|
|
|
#include "esp_event.h"
|
|
#include "esp_log.h"
|
|
#include "led_strip.h"
|
|
#include "sdkconfig.h"
|
|
|
|
led_strip_handle_t led_strip;
|
|
|
|
static const uint32_t value = 5;
|
|
|
|
ESP_EVENT_DECLARE_BASE(LED_EVENTS_BASE);
|
|
ESP_EVENT_DEFINE_BASE(LED_EVENTS_BASE);
|
|
|
|
esp_event_loop_handle_t loop_handle;
|
|
|
|
const char *TAG = "LED";
|
|
|
|
uint64_t wled_init(void)
|
|
{
|
|
led_strip_config_t strip_config = {.strip_gpio_num = CONFIG_WLED_DIN_PIN,
|
|
.max_leds = 64,
|
|
.led_model = LED_MODEL_WS2812,
|
|
.color_component_format = LED_STRIP_COLOR_COMPONENT_FMT_GRB,
|
|
.flags = {
|
|
.invert_out = false,
|
|
}};
|
|
|
|
led_strip_rmt_config_t rmt_config = {.clk_src = RMT_CLK_SRC_DEFAULT,
|
|
.resolution_hz = 0,
|
|
.mem_block_symbols = 0,
|
|
.flags = {
|
|
.with_dma = true,
|
|
}};
|
|
|
|
ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip));
|
|
|
|
for (uint32_t i = 0; i < 3; i++)
|
|
{
|
|
led_strip_set_pixel(led_strip, i, 10, 10, 0);
|
|
}
|
|
led_strip_refresh(led_strip);
|
|
|
|
return ESP_OK;
|
|
}
|
|
|
|
void event_handler(void *arg, esp_event_base_t base, int32_t id, void *event_data)
|
|
{
|
|
if (id == EVENT_LED_ON || id == EVENT_LED_OFF)
|
|
{
|
|
auto brightness = (id == EVENT_LED_ON) ? value : 0;
|
|
for (uint32_t i = 0; i < 64; i++)
|
|
{
|
|
led_strip_set_pixel(led_strip, i, brightness, brightness, brightness);
|
|
}
|
|
led_strip_refresh(led_strip);
|
|
}
|
|
}
|
|
|
|
uint64_t register_handler(void)
|
|
{
|
|
esp_event_loop_args_t loop_args = {
|
|
.queue_size = 2, .task_name = "led_manager", .task_priority = 5, .task_stack_size = 4096, .task_core_id = 1};
|
|
esp_event_loop_create(&loop_args, &loop_handle);
|
|
|
|
esp_event_handler_register_with(loop_handle, LED_EVENTS_BASE, ESP_EVENT_ANY_ID, event_handler, NULL);
|
|
return ESP_OK;
|
|
}
|
|
|
|
uint64_t send_event(uint32_t event, led_event_data_t *payload)
|
|
{
|
|
if (payload == nullptr)
|
|
{
|
|
return ESP_ERR_INVALID_ARG;
|
|
}
|
|
|
|
esp_err_t err = esp_event_post_to(loop_handle, // Event-Loop Handle
|
|
LED_EVENTS_BASE, // Event Base
|
|
event, // Event ID (EVENT_LED_ON, EVENT_LED_OFF, etc.)
|
|
payload, // Daten-Pointer
|
|
sizeof(led_event_data_t), // Datengröße
|
|
portMAX_DELAY // Wartezeit
|
|
);
|
|
|
|
if (err != ESP_OK)
|
|
{
|
|
ESP_LOGE("LED", "Failed to post event: %s", esp_err_to_name(err));
|
|
return err;
|
|
}
|
|
|
|
return ESP_OK;
|
|
}
|