rusefi/firmware/controllers/tcu/tcu.cpp

61 lines
1.4 KiB
C++

/**
* @file tcu.cpp
* @brief Base classes for gear selection and transmission control
*
* @date Aug 31, 2020
* @author David Holdeman, (c) 2020
*/
#include "pch.h"
#include "tcu.h"
#if EFI_TCU
void TransmissionControllerBase::init() {
}
void TransmissionControllerBase::update(gear_e /*gear*/) {
postState();
}
gear_e TransmissionControllerBase::setCurrentGear(gear_e gear) {
currentGear = gear;
return getCurrentGear();
}
gear_e TransmissionControllerBase::getCurrentGear() const {
return currentGear;
}
void TransmissionControllerBase::postState() {
#if EFI_TUNER_STUDIO
auto iss = Sensor::get(SensorType::InputShaftSpeed);
auto rpm = Sensor::get(SensorType::Rpm);
if (iss.Valid && rpm.Valid) {
tcRatio = rpm.Value / iss.Value;
}
tcuCurrentGear = getCurrentGear();
#endif
}
void TransmissionControllerBase::measureShiftTime(gear_e gear) {
m_shiftTime = true;
m_shiftTimer.reset();
m_shiftTimeGear = gear;
}
float TransmissionControllerBase::isShiftCompleted() {
auto detected = Sensor::get(SensorType::DetectedGear);
auto iss = Sensor::get(SensorType::InputShaftSpeed);
if (detected.Valid && m_shiftTime && m_shiftTimeGear == detected.Value) {
m_shiftTime = false;
return m_shiftTimer.getElapsedSeconds();
} else if (!iss.Valid && m_shiftTime && m_shiftTimer.hasElapsedMs(config->tcu_shiftTime)) {
m_shiftTime = false;
return config->tcu_shiftTime * 0.001;
} else {
return 0;
}
}
#endif // EFI_TCU