98 lines
2.4 KiB
C
Executable File
98 lines
2.4 KiB
C
Executable File
#include "evse_limits.h"
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
// ========================
|
|
// 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);
|
|
}
|
|
}
|