CJ125 unit-tests coverage #617

This commit is contained in:
rusefi 2019-02-01 23:48:11 -05:00
parent 6992480f74
commit 4796942097
6 changed files with 26 additions and 20 deletions

View File

@ -301,6 +301,7 @@ void startSimplePwm(SimplePwm *state, const char *msg, ExecutorInterface *execut
OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *stateChangeCallback) { OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *stateChangeCallback) {
efiAssertVoid(CUSTOM_ERR_6692, state != NULL, "state"); efiAssertVoid(CUSTOM_ERR_6692, state != NULL, "state");
efiAssertVoid(CUSTOM_ERR_6665, dutyCycle >= 0 && dutyCycle <= 1, "dutyCycle"); efiAssertVoid(CUSTOM_ERR_6665, dutyCycle >= 0 && dutyCycle <= 1, "dutyCycle");
efiAssertVoid(CUSTOM_ERR_6693, stateChangeCallback != NULL, "listener");
if (frequency < 1) { if (frequency < 1) {
warning(CUSTOM_OBD_LOW_FREQUENCY, "low frequency %.2f", frequency); warning(CUSTOM_OBD_LOW_FREQUENCY, "low frequency %.2f", frequency);
return; return;

View File

@ -29,8 +29,6 @@ EXTERN_ENGINE;
#include "pin_repository.h" #include "pin_repository.h"
extern TunerStudioOutputChannels tsOutputChannels; extern TunerStudioOutputChannels tsOutputChannels;
static OutputPin wboHeaterPin;
static OutputPin cj125Cs;
static Logging *logger; static Logging *logger;
static unsigned char tx_buff[2]; static unsigned char tx_buff[2];
static unsigned char rx_buff[1]; static unsigned char rx_buff[1];
@ -351,15 +349,6 @@ static void cjStart(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
#endif #endif
} }
static void cjStartHeaterControl(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
scheduleMsg(logger, "cj125: Starting heater control");
// todo: use custom pin state method, turn pin off while not running
startSimplePwmExt(&globalInstance.wboHeaterControl, "wboHeaterPin",
&engine->executor,
CONFIGB(wboHeaterPin),
&wboHeaterPin, CJ125_HEATER_PWM_FREQ, 0.0f, applyPinState);
}
void CJ125::setError(cj125_error_e errCode DECLARE_ENGINE_PARAMETER_SUFFIX) { void CJ125::setError(cj125_error_e errCode DECLARE_ENGINE_PARAMETER_SUFFIX) {
errorCode = errCode; errorCode = errCode;
state = CJ125_ERROR; state = CJ125_ERROR;
@ -411,18 +400,16 @@ void cj125defaultPinout(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
} }
static void cjStartSpi(DECLARE_ENGINE_PARAMETER_SIGNATURE) { static void cjStartSpi(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
cj125Cs.initPin("cj125 CS", CONFIGB(cj125CsPin), globalInstance.cj125Cs.initPin("cj125 CS", CONFIGB(cj125CsPin),
&engineConfiguration->cj125CsPinMode); &engineConfiguration->cj125CsPinMode);
// Idle CS pin - SPI CS is high when idle // Idle CS pin - SPI CS is high when idle
cj125Cs.setValue(true); globalInstance.cj125Cs.setValue(true);
#if EFI_PROD_CODE
cj125spicfg.ssport = getHwPort("cj125", CONFIGB(cj125CsPin)); cj125spicfg.ssport = getHwPort("cj125", CONFIGB(cj125CsPin));
cj125spicfg.sspad = getHwPin("cj125", CONFIGB(cj125CsPin)); cj125spicfg.sspad = getHwPin("cj125", CONFIGB(cj125CsPin));
driver = getSpiDevice(engineConfiguration->cj125SpiDevice); driver = getSpiDevice(engineConfiguration->cj125SpiDevice);
scheduleMsg(logger, "cj125: Starting SPI driver"); scheduleMsg(logger, "cj125: Starting SPI driver");
spiStart(driver, &cj125spicfg); spiStart(driver, &cj125spicfg);
#endif /* EFI_PROD_CODE */
} }
/** /**
@ -595,11 +582,9 @@ float cjGetAfr(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
bool cjHasAfrSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE) { bool cjHasAfrSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (!CONFIGB(isCJ125Enabled)) if (!CONFIGB(isCJ125Enabled))
return false; return false;
#if ! EFI_UNIT_TEST
// check if controller is functioning // check if controller is functioning
if (!globalInstance.isWorkingState()) if (!globalInstance.isWorkingState())
return false; return false;
#endif /* EFI_UNIT_TEST */
// check if amplification is turned on // check if amplification is turned on
if (amplCoeff == 0.0f) if (amplCoeff == 0.0f)
return false; return false;
@ -642,8 +627,8 @@ void initCJ125(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) {
cjInitPid(PASS_ENGINE_PARAMETER_SIGNATURE); cjInitPid(PASS_ENGINE_PARAMETER_SIGNATURE);
cjStartSpi(PASS_ENGINE_PARAMETER_SIGNATURE); cjStartSpi(PASS_ENGINE_PARAMETER_SIGNATURE);
cjStartHeaterControl(PASS_ENGINE_PARAMETER_SIGNATURE); scheduleMsg(logger, "cj125: Starting heater control");
globalInstance.SetIdleHeater(PASS_ENGINE_PARAMETER_SIGNATURE); globalInstance.StartHeaterControl(applyPinState PASS_ENGINE_PARAMETER_SUFFIX);
cjStart(PASS_ENGINE_PARAMETER_SIGNATURE); cjStart(PASS_ENGINE_PARAMETER_SIGNATURE);
#ifdef CJ125_DEBUG #ifdef CJ125_DEBUG

View File

@ -36,3 +36,12 @@ void CJ125::SetIdleHeater(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
bool CJ125::isWorkingState(void) { bool CJ125::isWorkingState(void) {
return state != CJ125_ERROR && state != CJ125_INIT && state != CJ125_IDLE; return state != CJ125_ERROR && state != CJ125_INIT && state != CJ125_IDLE;
} }
void CJ125::StartHeaterControl(pwm_gen_callback *stateChangeCallback DECLARE_ENGINE_PARAMETER_SUFFIX) {
// todo: use custom pin state method, turn pin off while not running
startSimplePwmExt(&wboHeaterControl, "wboHeaterPin",
&engine->executor,
CONFIGB(wboHeaterPin),
&wboHeaterPin, CJ125_HEATER_PWM_FREQ, 0.0f, stateChangeCallback);
SetIdleHeater(PASS_ENGINE_PARAMETER_SIGNATURE);
}

View File

@ -54,6 +54,8 @@ public:
efitick_t prevNt; efitick_t prevNt;
float heaterDuty = 0.0f; float heaterDuty = 0.0f;
OutputPin wboHeaterPin;
OutputPin cj125Cs;
// Used by CJ125 driver state machine // Used by CJ125 driver state machine
volatile cj125_state_e state = CJ125_INIT; volatile cj125_state_e state = CJ125_INIT;
@ -64,6 +66,7 @@ public:
bool isWorkingState(void); bool isWorkingState(void);
void SetHeater(float value DECLARE_ENGINE_PARAMETER_SUFFIX); void SetHeater(float value DECLARE_ENGINE_PARAMETER_SUFFIX);
void SetIdleHeater(DECLARE_ENGINE_PARAMETER_SIGNATURE); void SetIdleHeater(DECLARE_ENGINE_PARAMETER_SIGNATURE);
void StartHeaterControl(pwm_gen_callback *stateChangeCallback DECLARE_ENGINE_PARAMETER_SUFFIX);
}; };
// Heater params for Idle(cold), Preheating and Control stages // Heater params for Idle(cold), Preheating and Control stages

View File

@ -50,7 +50,7 @@ GTEST_API_ int main(int argc, char **argv) {
// printTriggerDebug = true; // printTriggerDebug = true;
// resizeMap(); // resizeMap();
printf("Success 20190117\r\n"); printf("Success 20190201\r\n");
printAllTriggers(); printAllTriggers();
// printConvertedTable(); // printConvertedTable();
testing::InitGoogleTest(&argc, argv); testing::InitGoogleTest(&argc, argv);

View File

@ -9,15 +9,23 @@
#include "CJ125_logic.h" #include "CJ125_logic.h"
#include "engine_test_helper.h" #include "engine_test_helper.h"
static void applyHeaterPinState(PwmConfig *state, int stateIndex) {
}
TEST(testCJ125, testInitialState) { TEST(testCJ125, testInitialState) {
CJ125 cj; CJ125 cj;
ASSERT_EQ(cj.state, CJ125_INIT); ASSERT_EQ(cj.state, CJ125_INIT);
ASSERT_FALSE(cj.isWorkingState()); ASSERT_FALSE(cj.isWorkingState());
ASSERT_EQ(cj.heaterDuty, 0);
WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996);
ASSERT_EQ(engine->sensors.vBatt, 0); ASSERT_EQ(engine->sensors.vBatt, 0);
cj.StartHeaterControl(&applyHeaterPinState PASS_ENGINE_PARAMETER_SUFFIX);
ASSERT_EQ(cj.heaterDuty, CJ125_HEATER_IDLE_RATE);
} }