#ifndef EVSE_STATE_H #define EVSE_STATE_H #include #include "freertos/FreeRTOS.h" #include "evse_events.h" #ifdef __cplusplus extern "C" { #endif // ============================ // EVSE Pilot Signal States // ============================ typedef enum { EVSE_STATE_A, // EV Not Connected (12V) EVSE_STATE_B1, // EV Connected (9V, Not Authorized) EVSE_STATE_B2, // EV Connected (9V, Authorized and Ready) EVSE_STATE_C1, // Charging Requested (6V, Relay Off) EVSE_STATE_C2, // Charging Active (6V, Relay On) EVSE_STATE_D1, // Ventilation Required (3V, Relay Off) EVSE_STATE_D2, // Ventilation Active (3V, Relay On) EVSE_STATE_E, // Error: Pilot Short to Ground (0V) EVSE_STATE_F // Fault: No Pilot or EVSE Unavailable } evse_state_t; // ============================ // Initialization // ============================ /** * @brief Initializes the EVSE state machine and default state. */ void evse_state_init(void); /** * @brief Periodic tick for state handling (optional hook). */ void evse_state_tick(void); // ============================ // State Access & Control // ============================ /** * @brief Returns the current EVSE state. */ evse_state_t evse_get_state(void); /** * @brief Sets the current EVSE state and emits a change event if needed. */ void evse_set_state(evse_state_t state); /** * @brief Returns the tick count when the current charging session began. */ TickType_t evse_get_session_start(void); /** * @brief Converts the state enum into a human-readable string. */ const char* evse_state_to_str(evse_state_t state); // ============================ // State Evaluation Helpers // ============================ /** * @brief True if EV is in an active session (B2, C1, C2). */ bool evse_state_is_session(evse_state_t state); /** * @brief True if EV is actively charging (C1, C2). */ bool evse_state_is_charging(evse_state_t state); /** * @brief True if EV is physically plugged in (B1 and beyond). */ bool evse_state_is_plugged(evse_state_t state); // ============================ // Authorization Control // ============================ /** * @brief Sets whether the EV is authorized to charge. */ void evse_state_set_authorized(bool authorized); /** * @brief Gets whether the EV is currently authorized. */ bool evse_state_get_authorized(void); #ifdef __cplusplus } #endif #endif // EVSE_STATE_H