#ifndef EVSE_ERROR_H #define EVSE_ERROR_H #include #include #include "evse_pilot.h" // ---------------------------------------------------- // Holdoff interno pós-erro (sem expor "cooldown" ao resto) // ---------------------------------------------------- // Após TODOS os erros reais desaparecerem (raw_bits == 0), // o módulo mantém o erro "visível" durante este tempo. // Durante este período, evse_get_error() continua != 0. #define EVSE_ERROR_COOLDOWN_MS 60000 // Error bits #define EVSE_ERR_DIODE_SHORT_BIT (1 << 0) #define EVSE_ERR_LOCK_FAULT_BIT (1 << 1) #define EVSE_ERR_UNLOCK_FAULT_BIT (1 << 2) #define EVSE_ERR_RCM_SELFTEST_FAULT_BIT (1 << 3) #define EVSE_ERR_RCM_TRIGGERED_BIT (1 << 4) #define EVSE_ERR_TEMPERATURE_HIGH_BIT (1 << 5) #define EVSE_ERR_PILOT_FAULT_BIT (1 << 6) #define EVSE_ERR_TEMPERATURE_FAULT_BIT (1 << 7) // Inicialização do módulo de erros void evse_error_init(void); // Verificações e monitoramento void evse_error_check(pilot_voltage_t pilot_voltage, bool is_n12v); void evse_temperature_check(void); void evse_error_tick(void); // Leitura e controle de erros (estado "visível" com holdoff) uint32_t evse_get_error(void); void evse_error_set(uint32_t bitmask); void evse_error_clear(uint32_t bitmask); bool evse_error_is_active(void); uint32_t evse_error_get_bits(void); // ---------------------------------------------------- // Semântica sticky: flag "todos erros limpos" // (fica true quando o erro visível chega a 0; pode ser útil para UI/logs) // ---------------------------------------------------- bool evse_error_cleared_flag(void); void evse_error_reset_flag(void); #endif // EVSE_ERROR_H