diff --git a/modules/EvseManager/IECStateMachine.cpp b/modules/EvseManager/IECStateMachine.cpp index a5ad1b83d9..2827ecdaf0 100644 --- a/modules/EvseManager/IECStateMachine.cpp +++ b/modules/EvseManager/IECStateMachine.cpp @@ -415,7 +415,17 @@ void IECStateMachine::connector_unlock() { } void IECStateMachine::connector_force_unlock() { - force_unlocked = true; + RawCPState cp; + + { + Everest::scoped_lock_timeout lock(state_machine_mutex, Everest::MutexDescription::IEC_force_unlock); + cp = cp_state; + } + + if (cp == RawCPState::B or cp == RawCPState::C) { + force_unlocked = true; + check_connector_lock(); + } } void IECStateMachine::check_connector_lock() { diff --git a/modules/EvseManager/scoped_lock_timeout.hpp b/modules/EvseManager/scoped_lock_timeout.hpp index 65dc05dc2e..78ca04a88f 100644 --- a/modules/EvseManager/scoped_lock_timeout.hpp +++ b/modules/EvseManager/scoped_lock_timeout.hpp @@ -57,6 +57,7 @@ enum class MutexDescription { IEC_set_pwm_off, IEC_set_pwm_F, IEC_allow_power_on, + IEC_force_unlock, EVSE_set_ev_info, EVSE_publish_ev_info, EVSE_subscribe_DC_EVMaximumLimits, @@ -171,6 +172,8 @@ static std::string to_string(MutexDescription d) { return "IECStateMachine::set_pwm_F"; case MutexDescription::IEC_allow_power_on: return "IECStateMachine::allow_power_on"; + case MutexDescription::IEC_force_unlock: + return "IECStateMachine::force_unlock"; case MutexDescription::EVSE_set_ev_info: return "EvseManager.cpp: set ev_info present_voltage/current"; case MutexDescription::EVSE_publish_ev_info: