Untitled

 avatar
unknown
c_cpp
2 years ago
3.3 kB
6
Indexable
/*
Reference:
    https://clover.coex.tech/ru/leds.html
*/

#ifndef __LED_STRIP_H
#define __LED_STRIP_H

#include "main.h"

#include "color_space.h"
#include "led_strip_config.h"

typedef enum {
    /// @brief  отключить ленту
    LED_EFFECT__NONE = 0,
    /// @brief  залить всю ленту цветом
    LED_EFFECT__FILL,
    /// @brief  мигание цветом
    LED_EFFECT__BLINK,
    /// @brief  ускоренное мигание цветом
    LED_EFFECT__BLINK_FAST,
    /// @brief  плавное перетекание в цвет
    LED_EFFECT__FADE,
    /// @brief  "надвигание" нового цвета
    LED_EFFECT__WIPE,
    /// @brief  переливание ленты цветами радуги
    LED_EFFECT__RAINBOW,
    /// @brief  переливать заливку по цветам радуги
    LED_EFFECT__RAINBOW_FILL,

    LED_EFFECT__COUNT,
} led_effect_type_t;

typedef enum {
    /// @brief Без эффектов
    LED_EVENT__NONE = 0,
    /// @brief  Запуск всех систем. Белый
    LED_EVENT__STARTUP,
    /// @brief Успешное подключение к полетному контроллеру. Эффект радуги
    LED_EVENT__CONNECTED,
    /// @brief Разрыв связи с полетным контроллером. Мигание красным
    LED_EVENT__DISCONNECTED,
    /// @brief Переход в состояние Armed
    LED_EVENT__ARMED,
    /// @brief Переход в состояние Disarmed
    LED_EVENT__DISARMED,
    /// @brief Режим Acro. Оранжевый
    LED_EVENT__ACRO,
    /// @brief Режим Stabilized. Зеленый
    LED_EVENT__STABILIZED,
    /// @brief Режим Altitude. Желтый
    LED_EVENT__ALTCTL,
    /// @brief Режим Position. Синий
    LED_EVENT__POSCTL,
    /// @brief Режим Offboard. Фиолетовый
    LED_EVENT__OFFBOARD,
    /// @brief Переход в соответствующие режимы
    LED_EVENT__RATTITUDE,
    LED_EVENT__MISSION,
    LED_EVENT__RTL,
    LED_EVENT__LAND,
    /// @brief Возникновение ошибки в полетном контроллере. Мигнуть красным
    LED_EVENT__ERROR,
    /// @brief Низкий заряд батареи. Быстрое мигание красным
    LED_EVENT__LOW_BATTERY,

    LED_EVENT__COUNT,
} led_event_t;

/**
 * @brief Init all led strips
*/
void led_strip_init(void);

/**
 * @brief Process all led strips
 *
 * @note Should be called LED_STRIP_FPS times per second
*/
void led_strip_process(void);

/**
 * @brief Post event which should be showed by led strip
 * @param led_idx index of led_strip
 * @param event type of posted event
 * @return 0 - success
*/
int led_strip_post_event(uint8_t led_idx, led_event_t event);

/**
 * @brief Set new effect to showed by led_strip
 * @param led_idx index of led_strip
 * @param effect_type type of effect
 * @param common_color pointer to color effect, which will be used in effect.
 *                      NULL if use color from previous effect, or if effect not use color (like rainbow)
 * @return 0 - success
*/
int led_strip_set_effect(uint8_t led_idx, led_effect_type_t effect_type, color_t* common_color);

#endif  // __LED_STRIP_H
Editor is loading...