/* * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include #include "esp_err.h" #include "esp32_led_strip_types.h" #include "esp_idf_version.h" #include "driver/rmt_types.h" #ifdef __cplusplus extern "C" { #endif /** * @brief LED Strip RMT specific configuration */ typedef struct { rmt_clock_source_t clk_src; /*!< RMT clock source */ uint32_t resolution_hz; /*!< RMT tick resolution, if set to zero, a default resolution (10MHz) will be applied */ size_t mem_block_symbols; /*!< How many RMT symbols can one RMT channel hold at one time. Set to 0 will fallback to use the default size. */ /*!< Extra RMT specific driver flags */ struct led_strip_rmt_extra_config { uint32_t with_dma: 1; /*!< Use DMA to transmit data */ } flags; /*!< Extra driver flags */ } led_strip_rmt_config_t; /** * @brief Create LED strip based on RMT TX channel * * @param led_config LED strip configuration * @param rmt_config RMT specific configuration * @param ret_strip Returned LED strip handle * @return * - ESP_OK: create LED strip handle successfully * - ESP_ERR_INVALID_ARG: create LED strip handle failed because of invalid argument * - ESP_ERR_NO_MEM: create LED strip handle failed because of out of memory * - ESP_FAIL: create LED strip handle failed because some other error */ esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const led_strip_rmt_config_t *rmt_config, led_strip_handle_t *ret_strip); /** * @brief Set RGB for a specific pixel * * @param strip: LED strip * @param index: index of pixel to set * @param red: red part of color * @param green: green part of color * @param blue: blue part of color * * @return * - ESP_OK: Set RGB for a specific pixel successfully * - ESP_ERR_INVALID_ARG: Set RGB for a specific pixel failed because of invalid parameters * - ESP_FAIL: Set RGB for a specific pixel failed because other error occurred */ esp_err_t led_strip_rmt_set_pixel(led_strip_handle_t strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue); /** * @brief Refresh memory colors to LEDs * * @param strip: LED strip * * @return * - ESP_OK: Refresh successfully * - ESP_FAIL: Refresh failed because some other error occurred * * @note: * After updating the LED colors in the memory, a following invocation of this API is needed to flush colors to strip. */ esp_err_t led_strip_rmt_refresh(led_strip_handle_t strip); /** * @brief Clear LED strip (turn off all LEDs) * * @param strip: LED strip * * @return * - ESP_OK: Clear LEDs successfully * - ESP_FAIL: Clear LEDs failed because some other error occurred */ esp_err_t led_strip_rmt_clear(led_strip_handle_t strip); /** * @brief Free LED strip resources * * @param strip: LED strip * * @return * - ESP_OK: Free resources successfully * - ESP_FAIL: Free resources failed because error occurred */ esp_err_t led_strip_rmt_del(led_strip_handle_t strip); #ifdef __cplusplus } #endif