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:
Eric F
2026-06-08 00:38:27 -04:00
parent 468cfeaa50
commit d398a6ced2
7326 changed files with 1177561 additions and 7 deletions

View 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