Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
This commit is contained in:
85
tools/EVerest-main/modules/EVSE/Auth/lib/Connector.cpp
Normal file
85
tools/EVerest-main/modules/EVSE/Auth/lib/Connector.cpp
Normal file
@@ -0,0 +1,85 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
|
||||
#include <Connector.hpp>
|
||||
|
||||
namespace module {
|
||||
|
||||
void Connector::submit_event(ConnectorEvent event) {
|
||||
state_machine.handle_event(event);
|
||||
}
|
||||
|
||||
ConnectorState Connector::get_state() const {
|
||||
return this->state_machine.get_state();
|
||||
}
|
||||
|
||||
bool Connector::is_unavailable() const {
|
||||
return this->get_state() == ConnectorState::UNAVAILABLE || this->get_state() == ConnectorState::UNAVAILABLE_FAULTED;
|
||||
}
|
||||
|
||||
namespace conversions {
|
||||
std::string connector_state_to_string(const ConnectorState& state) {
|
||||
switch (state) {
|
||||
case ConnectorState::AVAILABLE:
|
||||
return "AVAILABLE";
|
||||
case ConnectorState::OCCUPIED:
|
||||
return "OCCUPIED";
|
||||
case ConnectorState::UNAVAILABLE:
|
||||
return "UNAVAILABLE";
|
||||
case ConnectorState::FAULTED:
|
||||
return "FAULTED";
|
||||
case ConnectorState::FAULTED_OCCUPIED:
|
||||
return "FAULTED_OCCUPIED";
|
||||
case ConnectorState::UNAVAILABLE_FAULTED:
|
||||
return "UNAVAILABLE_FAULTED";
|
||||
default:
|
||||
throw std::runtime_error("No known conversion for the given connector state");
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace conversions
|
||||
|
||||
bool EVSEContext::is_available() {
|
||||
if (this->plug_in_timeout) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// if an identifier is present, an EVSE is not considered available
|
||||
if (this->identifier.has_value()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool occupied = false;
|
||||
bool available = false;
|
||||
for (const auto& connector : this->connectors) {
|
||||
if (connector.get_state() == ConnectorState::OCCUPIED ||
|
||||
connector.get_state() == ConnectorState::FAULTED_OCCUPIED) {
|
||||
occupied = true;
|
||||
}
|
||||
if (connector.get_state() != ConnectorState::UNAVAILABLE && connector.get_state() != ConnectorState::FAULTED) {
|
||||
available = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (occupied) {
|
||||
// When at least one connector is occupied, they are both not available.
|
||||
return false;
|
||||
}
|
||||
|
||||
return available;
|
||||
}
|
||||
|
||||
bool EVSEContext::is_unavailable() {
|
||||
for (const auto& connector : this->connectors) {
|
||||
if (!connector.is_unavailable()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// namespace conversions
|
||||
|
||||
// namespace conversions
|
||||
} // namespace module
|
||||
Reference in New Issue
Block a user