vision/main/status_led.c

66 lines
1.6 KiB
C
Raw Normal View History

2026-07-20 02:51:40 +00:00
#include "status_led.h"
#include "esp_check.h"
#include "esp_log.h"
#include "led_strip.h"
#include "led_strip_rmt.h"
static const char *TAG = "status_led";
static led_strip_handle_t s_strip;
esp_err_t status_led_init(void)
{
if (s_strip) {
return ESP_OK;
}
led_strip_config_t strip_cfg = {
.strip_gpio_num = STATUS_LED_GPIO,
.max_leds = STATUS_LED_COUNT,
.led_pixel_format = LED_PIXEL_FORMAT_GRB,
.led_model = LED_MODEL_WS2812,
.flags = {
.invert_out = false,
},
};
led_strip_rmt_config_t rmt_cfg = {
.clk_src = RMT_CLK_SRC_DEFAULT,
.resolution_hz = 10 * 1000 * 1000,
.mem_block_symbols = 64,
.flags = {
.with_dma = false,
},
};
ESP_RETURN_ON_ERROR(
led_strip_new_rmt_device(&strip_cfg, &rmt_cfg, &s_strip),
TAG, "led_strip_new_rmt_device failed");
2026-07-20 03:05:24 +00:00
/* Default: LED off */
ESP_RETURN_ON_ERROR(status_led_set_rgb(0, 0, 0), TAG, "set rgb");
ESP_LOGI(TAG, "WS2812 on GPIO%d — off", STATUS_LED_GPIO);
2026-07-20 02:51:40 +00:00
return ESP_OK;
}
esp_err_t status_led_set_rgb(uint8_t r, uint8_t g, uint8_t b)
{
if (!s_strip) {
return ESP_ERR_INVALID_STATE;
}
ESP_RETURN_ON_ERROR(led_strip_set_pixel(s_strip, 0, r, g, b), TAG, "set_pixel");
ESP_RETURN_ON_ERROR(led_strip_refresh(s_strip), TAG, "refresh");
return ESP_OK;
}
esp_err_t status_led_off(void)
{
if (!s_strip) {
return ESP_ERR_INVALID_STATE;
}
ESP_RETURN_ON_ERROR(led_strip_clear(s_strip), TAG, "clear");
ESP_RETURN_ON_ERROR(led_strip_refresh(s_strip), TAG, "refresh");
return ESP_OK;
}