#include "evse_limits.h" #include #include // ======================== // Estado interno // ======================== static bool limit_reached = false; static uint32_t consumption_limit = 0; static uint32_t charging_time_limit = 0; static uint16_t under_power_limit = 0; static uint32_t default_consumption_limit = 0; static uint32_t default_charging_time_limit = 0; static uint16_t default_under_power_limit = 0; // ======================== // Estado de controle // ======================== void evse_set_limit_reached(uint8_t value) { limit_reached = (value != 0); } bool evse_is_limit_reached(void) { return limit_reached; } // ======================== // Limites em tempo de execução // ======================== uint32_t evse_get_consumption_limit(void) { return consumption_limit; } void evse_set_consumption_limit(uint32_t value) { consumption_limit = value; } uint32_t evse_get_charging_time_limit(void) { return charging_time_limit; } void evse_set_charging_time_limit(uint32_t value) { charging_time_limit = value; } uint16_t evse_get_under_power_limit(void) { return under_power_limit; } void evse_set_under_power_limit(uint16_t value) { under_power_limit = value; } // ======================== // Limites padrão (persistentes) // ======================== uint32_t evse_get_default_consumption_limit(void) { return default_consumption_limit; } void evse_set_default_consumption_limit(uint32_t value) { default_consumption_limit = value; } uint32_t evse_get_default_charging_time_limit(void) { return default_charging_time_limit; } void evse_set_default_charging_time_limit(uint32_t value) { default_charging_time_limit = value; } uint16_t evse_get_default_under_power_limit(void) { return default_under_power_limit; } void evse_set_default_under_power_limit(uint16_t value) { default_under_power_limit = value; } // ======================== // Lógica de verificação de limites // ======================== void evse_limits_check(evse_state_t state) { // Se algum limite estiver ativo, verifique o estado if ((consumption_limit > 0 || charging_time_limit > 0 || under_power_limit > 0) && evse_state_is_charging(state)) { // (Lógica real a ser aplicada aqui, ex: medição de consumo, tempo ou potência) evse_set_limit_reached(1); } }