- 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
85 lines
3.2 KiB
C++
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
|