Skip to content
Snippets Groups Projects
Select Git revision
  • a58a91eb04c50daafb31228a79f6752374338c5e
  • wip-bootstrap default
  • dualcore
  • ch3/leds
  • ch3/time
  • master
6 results

mpconfig.h

Blame
  • led_strip.h 4.00 KiB
    // 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);
    
    /**
     * @brief Init the RMT peripheral and LED strip configuration.
     *
     * @param[in] channel: RMT peripheral channel number.
     * @param[in] gpio: GPIO number for the RMT data output.
     * @param[in] led_num: number of addressable LEDs.
     * @return
     *      LED strip instance or NULL
     */
    led_strip_t *led_strip_init(uint8_t channel, uint8_t gpio, uint16_t led_num);
    
    /**
     * @brief Denit the RMT peripheral.
     *
     * @param[in] strip: LED strip
     * @return
     *     - ESP_OK
     *     - ESP_FAIL
     */
    esp_err_t led_strip_denit(led_strip_t *strip);
    
    #ifdef __cplusplus
    }
    #endif