Files
cariflex/tools/EVerest-main/modules/HardwareDrivers/EV/YetiEvDriver/YetiEvDriver.cpp
Eric F d398a6ced2 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
2026-06-08 00:38:27 -04:00

85 lines
3.2 KiB
C++

// SPDX-License-Identifier: Apache-2.0
// Copyright Pionix GmbH and Contributors to EVerest
#include "YetiEvDriver.hpp"
namespace module {
void YetiEvDriver::init() {
// initialize serial driver
if (!serial.openDevice(config.serial_port.c_str(), config.baud_rate)) {
EVLOG_error << "Could not open serial port " << config.serial_port << " with baud rate " << config.baud_rate;
p_ev_board_support->raise_error(p_ev_board_support->error_factory->create_error(
"generic/CommunicationFault", "", "Could not open serial port"));
return;
}
invoke_init(*p_ev_board_support);
}
void YetiEvDriver::ready() {
serial.run();
if (!serial.reset(config.reset_gpio)) {
EVLOG_error << "EVYeti reset not successful.";
}
serial.signalSpuriousReset.connect([this]() { EVLOG_error << "EVYeti uC spurious reset!"; });
serial.signalConnectionTimeout.connect([this]() { EVLOG_error << "EVYeti UART timeout!"; });
serial.signalEvent.connect([this](Event e) {
types::board_support_common::BspEvent bspe;
bspe.event = types::board_support_common::Event::Disconnected;
switch (e.type) {
case Event_InterfaceEvent::Event_InterfaceEvent_A:
bspe.event = types::board_support_common::Event::A;
EVLOG_info << "BspEvent::A";
break;
case Event_InterfaceEvent::Event_InterfaceEvent_B:
EVLOG_info << "BspEvent::B";
bspe.event = types::board_support_common::Event::B;
break;
case Event_InterfaceEvent::Event_InterfaceEvent_C:
EVLOG_info << "BspEvent::C";
bspe.event = types::board_support_common::Event::C;
break;
case Event_InterfaceEvent::Event_InterfaceEvent_D:
EVLOG_info << "BspEvent::D";
bspe.event = types::board_support_common::Event::D;
break;
case Event_InterfaceEvent::Event_InterfaceEvent_DISCONNECTED:
EVLOG_info << "BspEvent::Disconnected";
bspe.event = types::board_support_common::Event::Disconnected;
break;
/// explicitly fall through all the Event_InterfaceEvent values we are not handling
case Event_InterfaceEvent::Event_InterfaceEvent_E:
[[fallthrough]];
case Event_InterfaceEvent::Event_InterfaceEvent_F:
[[fallthrough]];
case Event_InterfaceEvent::Event_InterfaceEvent_EF:
[[fallthrough]];
case Event_InterfaceEvent::Event_InterfaceEvent_ERROR_RELAIS:
[[fallthrough]];
case Event_InterfaceEvent::Event_InterfaceEvent_RELAIS_ON:
[[fallthrough]];
case Event_InterfaceEvent::Event_InterfaceEvent_RELAIS_OFF:
break;
}
p_ev_board_support->publish_bsp_event(bspe);
});
serial.signalMeasurements.connect([this](Measurements m) {
types::board_support_common::BspMeasurement bspm;
bspm.cp_pwm_duty_cycle = m.pwmDutyCycle * 100.;
// FIXME(cc): This is not implemented on MCU side yet
bspm.proximity_pilot = {types::board_support_common::Ampacity::None};
p_ev_board_support->publish_bsp_measurement(bspm);
});
invoke_ready(*p_ev_board_support);
}
} // namespace module