From f9fb3d81686b95f5608cb8ef7a08d555f24a30fc Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 3 Nov 2018 09:44:34 -0400 Subject: [PATCH] CJ125 unit-tests coverage #617 --- firmware/controllers/algo/engine.cpp | 6 ++++++ firmware/controllers/algo/engine.h | 2 +- firmware/controllers/engine_controller.cpp | 7 +++++-- firmware/hw_layer/HIP9011.cpp | 24 ++++++++++++++++------ 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index badf3a930e..09cdd4a410 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -334,6 +334,12 @@ void Engine::preCalculate() { sparkTable.preCalc(engineConfiguration->sparkDwellRpmBins, engineConfiguration->sparkDwellValues); +#if ! EFI_UNIT_TEST + adcToVoltageInputDividerCoefficient = adcToVolts(1) * engineConfiguration->analogInputDividerCoefficient; +#else + adcToVoltageInputDividerCoefficient = engineConfiguration->analogInputDividerCoefficient; +#endif + /** * Here we prepare a fast, index-based MAF lookup from a slower curve description */ diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index d17d2a8cc5..30cf96f52e 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -441,7 +441,7 @@ public: /** * This coefficient translates ADC value directly into voltage adjusted according to - * voltage divider configuration. This is a future (?) performance optimization. + * voltage divider configuration with just one multiplication. This is a future (?) performance optimization. */ float adcToVoltageInputDividerCoefficient; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 22f37e7636..6d8e915c89 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -66,9 +66,12 @@ #include "lcd_controller.h" #include "pin_repository.h" #include "tachometer.h" -#include "CJ125.h" #endif /* EFI_PROD_CODE */ +#if EFI_CJ125 || defined(__DOXYGEN__) +#include "CJ125.h" +#endif + #if defined(EFI_BOOTLOADER_INCLUDE_CODE) || defined(__DOXYGEN__) #include "bootloader/bootloader.h" #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ @@ -623,7 +626,7 @@ void initEngineContoller(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) * this uses SimplePwm which depends on scheduler, has to be initialized after scheduler */ initCJ125(sharedLogger); -#endif +#endif /* EFI_CJ125 */ #if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__) diff --git a/firmware/hw_layer/HIP9011.cpp b/firmware/hw_layer/HIP9011.cpp index c75fd92902..ec8fb4261b 100644 --- a/firmware/hw_layer/HIP9011.cpp +++ b/firmware/hw_layer/HIP9011.cpp @@ -93,12 +93,14 @@ static Logging *logger; // SPI_CR1_CPHA Clock Phase // todo: nicer method which would mention SPI speed explicitly? +#if EFI_PROD_CODE static SPIConfig hipSpiCfg = { NULL, /* HW dependent part.*/ NULL, 0, SPI_CR1_MSTR | //SPI_CR1_BR_1 // 5MHz SPI_CR1_CPHA | SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_BR_2 }; +#endif static void checkResponse(void) { if (tx_buff[0] == rx_buff[0]) { @@ -158,6 +160,7 @@ static void showHipInfo(void) { msg); scheduleMsg(logger, "CS@%s updateCount=%d", hwPortname(boardConfiguration->hip9011CsPin), settingUpdateCount); +#if EFI_PROD_CODE scheduleMsg(logger, "hip %.2fv/last=%.2f@%s/max=%.2f adv=%d", engine->knockVolts, getVoltage("hipinfo", engineConfiguration->hipOutputChannel), @@ -167,6 +170,7 @@ static void showHipInfo(void) { scheduleMsg(logger, "mosi=%s", hwPortname(getMosiPin(engineConfiguration->hip9011SpiDevice))); scheduleMsg(logger, "miso=%s", hwPortname(getMisoPin(engineConfiguration->hip9011SpiDevice))); scheduleMsg(logger, "sck=%s", hwPortname(getSckPin(engineConfiguration->hip9011SpiDevice))); +#endif scheduleMsg(logger, "start %.2f end %.2f", engineConfiguration->knockDetectionWindowStart, engineConfiguration->knockDetectionWindowEnd); @@ -182,16 +186,20 @@ void setHip9011FrankensoPinout(void) { // boardConfiguration->hip9011CsPin = GPIOD_0; // rev 0.1 boardConfiguration->isHip9011Enabled = true; - boardConfiguration->hip9011CsPin = GPIOB_0; // rev 0.4 - boardConfiguration->hip9011CsPinMode = OM_OPENDRAIN; engineConfiguration->hip9011PrescalerAndSDO = 6; // 8MHz chip - boardConfiguration->hip9011IntHoldPin = GPIOB_11; - boardConfiguration->hip9011IntHoldPinMode = OM_OPENDRAIN; boardConfiguration->is_enabled_spi_2 = true; // todo: convert this to rusEfi, hardware-independent enum +#if EFI_PROD_CODE + boardConfiguration->hip9011CsPin = GPIOB_0; // rev 0.4 + boardConfiguration->hip9011CsPinMode = OM_OPENDRAIN; + + boardConfiguration->hip9011IntHoldPin = GPIOB_11; + boardConfiguration->hip9011IntHoldPinMode = OM_OPENDRAIN; + engineConfiguration->spi2SckMode = PAL_STM32_OTYPE_OPENDRAIN; // 4 engineConfiguration->spi2MosiMode = PAL_STM32_OTYPE_OPENDRAIN; // 4 engineConfiguration->spi2MisoMode = PAL_STM32_PUPDR_PULLUP; // 32 +#endif /* EFI_PROD_CODE */ boardConfiguration->hip9011Gain = 1; engineConfiguration->knockVThreshold = 4; @@ -287,11 +295,11 @@ static int getBandIndex(void) { return getHip9011BandIndex(freq); } -void hipAdcCallback(adcsample_t value) { +void hipAdcCallback(adcsample_t adcValue) { if (state == WAITING_FOR_ADC_TO_SKIP) { state = WAITING_FOR_RESULT_ADC; } else if (state == WAITING_FOR_RESULT_ADC) { - engine->knockVolts = adcToVoltsDivided(value); + engine->knockVolts = adcValue * engine->adcToVoltageInputDividerCoefficient; hipValueMax = maxF(engine->knockVolts, hipValueMax); engine->knockLogic(engine->knockVolts); @@ -389,7 +397,9 @@ static void hipStartupCode(void) { * asynchronous mode */ spiStop(driver); +#if EFI_PROD_CODE hipSpiCfg.end_cb = endOfSpiExchange; +#endif spiStart(driver, &hipSpiCfg); state = READY_TO_INTEGRATE; } @@ -429,10 +439,12 @@ void initHip9011(Logging *sharedLogger) { prepareHip9011RpmLookup(currentAngleWindowWidth); +#if EFI_PROD_CODE driver = getSpiDevice(engineConfiguration->hip9011SpiDevice); hipSpiCfg.ssport = getHwPort("hip", boardConfiguration->hip9011CsPin); hipSpiCfg.sspad = getHwPin("hip", boardConfiguration->hip9011CsPin); +#endif intHold.initPin("hip int/hold", boardConfiguration->hip9011IntHoldPin, &boardConfiguration->hip9011IntHoldPinMode);