// Copyright 2019 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #ifdef __cplusplus extern "C" { #endif #include "esp_err.h" /** * @brief LED Strip Type * */ typedef struct led_strip_s led_strip_t; /** * @brief LED Strip Device Type * */ typedef void *led_strip_dev_t; /** * @brief Declare of LED Strip Type * */ struct led_strip_s { /** * @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 (*set_pixel)(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue); /** * @brief Refresh memory colors to LEDs * * @param strip: LED strip * @param timeout_ms: timeout value for refreshing task * * @return * - ESP_OK: Refresh successfully * - ESP_ERR_TIMEOUT: Refresh failed because of timeout * - 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 (*refresh)(led_strip_t *strip, uint32_t timeout_ms); /** * @brief Clear LED strip (turn off all LEDs) * * @param strip: LED strip * @param timeout_ms: timeout value for clearing task * * @return * - ESP_OK: Clear LEDs successfully * - ESP_ERR_TIMEOUT: Clear LEDs failed because of timeout * - ESP_FAIL: Clear LEDs failed because some other error occurred */ esp_err_t (*clear)(led_strip_t *strip, uint32_t timeout_ms); /** * @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 (*del)(led_strip_t *strip); }; /** * @brief LED Strip Configuration Type * */ typedef struct { uint32_t max_leds; /*!< Maximum LEDs in a single strip */ led_strip_dev_t dev; /*!< LED strip device (e.g. RMT channel, PWM channel, etc) */ } led_strip_config_t; /** * @brief Default configuration for LED strip * */ #define LED_STRIP_DEFAULT_CONFIG(number, dev_hdl) \ { \ .max_leds = number, \ .dev = dev_hdl, \ } /** * @brief Install a new ws2812 driver (based on RMT peripheral) * * @param config: LED strip configuration * @return * LED strip instance or NULL */ led_strip_t *led_strip_new_rmt_ws2812(const led_strip_config_t *config); #ifdef __cplusplus } #endif