#ifndef LED_H_ #define LED_H_ #include #include /** * @brief Identificadores dos LEDs disponíveis no hardware (por cor) */ typedef enum { LED_ID_GREEN = 0, LED_ID_BLUE, LED_ID_RED, LED_ID_MAX } led_id_t; /** * @brief Padrões de comportamento possíveis para os LEDs. * * Estes padrões são usados tanto pela lógica interna (estado EVSE, efeitos * de sessão, etc.) como por código externo que queira forçar um determinado * comportamento num LED. * * Nota: * - LED_PATTERN_BREATHING é implementado por uma task interna (HSV). * - LED_PATTERN_CHARGING_EFFECT é legado/experimental e pode não ser usado * diretamente na implementação atual. */ typedef enum { LED_PATTERN_OFF, ///< LED sempre desligado LED_PATTERN_ON, ///< LED sempre ligado LED_PATTERN_BLINK, ///< Pisca com ciclo padrão (500ms on / 500ms off) LED_PATTERN_BLINK_FAST, ///< Pisca rápido (250ms on / 250ms off) LED_PATTERN_BLINK_SLOW, ///< Pisca lento (500ms on / 1500ms off) LED_PATTERN_CHARGING_EFFECT, ///< Efeito de carregamento (2s on / 1s off) - legado/opcional LED_PATTERN_BREATHING ///< Efeito "breathing" (brilho suave via HSV) } led_pattern_t; /** * @brief Inicializa o subsistema de LEDs com base na configuração da placa. * * - Configura o driver LEDC com os GPIOs definidos em board_config. * - Cria a task de efeitos (para padrões como BREATHING). * - Regista handlers dos eventos EVSE (estado e sessão) para aplicar * padrões automáticos em função do estado do carregador. * * Deve ser chamada uma única vez na inicialização do sistema. */ void led_init(void); /** * @brief Define diretamente o tempo ligado/desligado de um LED. * * Esta função permite criar padrões personalizados à parte da tabela * led_pattern_t. Normalmente, código de alto nível deve preferir * led_apply_pattern(), deixando a lógica de tempos a cargo do módulo. * * @param led_id Identificador do LED (ver led_id_t) * @param ontime Tempo ligado em milissegundos (0 = sempre off) * @param offtime Tempo desligado em milissegundos (0 = sempre on) */ void led_set_state(led_id_t led_id, uint16_t ontime, uint16_t offtime); /** * @brief Aplica um padrão de piscar/efeito definido ao LED. * * Esta é a API recomendada para controlar LEDs externamente. A implementação * interna do módulo também a usa para reagir a eventos EVSE (estado de * carregamento, início/fim de sessão, etc.). * * @param led_id Identificador do LED (ver led_id_t) * @param pattern Padrão desejado (ver led_pattern_t) */ void led_apply_pattern(led_id_t led_id, led_pattern_t pattern); #endif /* LED_H_ */