diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index 5da2e92d78..8a5459c595 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -37,6 +37,7 @@ #include "malfunction_central.h" #include "trigger_emulator_algo.h" #include "microsecond_timer.h" +#include "gpio_ext.h" #if EFI_WIDEBAND_FIRMWARE_UPDATE #include "rusefi_wideband.h" @@ -67,7 +68,16 @@ void benchOn(OutputPin* output) { output->setValue(true); } +static char pin_error[64]; + void benchOff(OutputPin* output) { + brain_pin_diag_e diag = gpiochips_getDiag(output->brainPin); + if (diag == PIN_OK) { + efiPrintf("Diag says OK"); + } else { + pinDiag2string(pin_error, sizeof(pin_error), diag); + efiPrintf("Diag says %s", pin_error); + } output->setValue(false); } @@ -103,6 +113,7 @@ static void runBench(brain_pin_e brainPin, OutputPin *output, float delayMs, flo chThdSleepMicroseconds(onTimeUs + offTimeUs); } + efiPrintf("Done!"); isRunningBench = false; } @@ -521,7 +532,7 @@ void onConfigurationChangeBenchTest() { if (engineConfiguration->benchTestOffTime < 5) engineConfiguration->benchTestOffTime = 500; // default value if configuration was not specified if (engineConfiguration->benchTestCount < 1) - engineConfiguration->benchTestOffTime = 3; // default value if configuration was not specified + engineConfiguration->benchTestCount = 3; // default value if configuration was not specified itoa10(offTimeBuffer, engineConfiguration->benchTestOffTime); itoa10(counterBuffer, engineConfiguration->benchTestCount); } diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 2241ee798c..733533198a 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -1166,6 +1166,10 @@ static void setValue(const char *paramStr, const char *valueStr) { engineConfiguration->wwaeTau = valueF; } else if (strEqualCaseInsensitive(paramStr, "wwaeBeta")) { engineConfiguration->wwaeBeta = valueF; + } else if (strEqualCaseInsensitive(paramStr, "benchTestOffTime")) { + engineConfiguration->benchTestOffTime = valueI; + } else if (strEqualCaseInsensitive(paramStr, "benchTestCount")) { + engineConfiguration->benchTestCount = valueI; } else if (strEqualCaseInsensitive(paramStr, "cranking_dwell")) { engineConfiguration->ignitionDwellForCrankingMs = valueF; #if EFI_PROD_CODE diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index 3d5ce52aa2..6005d23fef 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -112,6 +112,22 @@ PinRepository::PinRepository() { #include "smart_gpio.h" #include "hardware.h" +void pinDiag2string(char *buffer, size_t size, brain_pin_diag_e pin_diag) { + /* use autogeneraged helpers here? */ + if (pin_diag == PIN_OK) { + chsnprintf(buffer, size, "Ok"); + } else if (pin_diag != PIN_INVALID) { + chsnprintf(buffer, size, "%s%s%s%s%s", + pin_diag & PIN_OPEN ? "open_load " : "", + pin_diag & PIN_SHORT_TO_GND ? "short_to_gnd " : "", + pin_diag & PIN_SHORT_TO_BAT ? "short_to_bat " : "", + pin_diag & PIN_OVERLOAD ? "overload " : "", + pin_diag & PIN_DRIVER_OVERTEMP ? "overtemp": ""); + } else { + chsnprintf(buffer, size, "INVALID"); + } +} + static brain_pin_e index_to_brainPin(unsigned int i) { if (i < getBrainPinTotalNum()) @@ -137,28 +153,13 @@ static void reportPins() { #if (BOARD_EXT_GPIOCHIPS > 0) for (unsigned int i = getBrainPinOnchipNum() ; i < getBrainPinTotalNum(); i++) { static char pin_error[64]; - const char *pin_name; - const char *pin_user; - brain_pin_diag_e pin_diag; brain_pin_e brainPin = index_to_brainPin(i); - pin_name = gpiochips_getPinName(brainPin); - pin_user = getBrainUsedPin(i); - pin_diag = gpiochips_getDiag(brainPin); + const char *pin_name = gpiochips_getPinName(brainPin); + const char *pin_user = getBrainUsedPin(i); + brain_pin_diag_e pin_diag = gpiochips_getDiag(brainPin); - /* use autogeneraged helpers here? */ - if (pin_diag == PIN_OK) { - chsnprintf(pin_error, sizeof(pin_error), "Ok"); - } else if (pin_diag != PIN_INVALID) { - chsnprintf(pin_error, sizeof(pin_error), "%s%s%s%s%s", - pin_diag & PIN_OPEN ? "open_load " : "", - pin_diag & PIN_SHORT_TO_GND ? "short_to_gnd " : "", - pin_diag & PIN_SHORT_TO_BAT ? "short_to_bat " : "", - pin_diag & PIN_OVERLOAD ? "overload " : "", - pin_diag & PIN_DRIVER_OVERTEMP ? "overtemp": ""); - } else { - chsnprintf(pin_error, sizeof(pin_error), "INVALID"); - } + pinDiag2string(pin_error, sizeof(pin_error), pin_diag); /* here show all pins, unused too */ if (pin_name != NULL) { diff --git a/firmware/hw_layer/pin_repository.h b/firmware/hw_layer/pin_repository.h index 511c2902b5..e01abdb598 100644 --- a/firmware/hw_layer/pin_repository.h +++ b/firmware/hw_layer/pin_repository.h @@ -33,6 +33,7 @@ bool isBrainPinValid(brain_pin_e brainPin); void initPinRepository(void); EXTERNC bool brain_pin_is_onchip(brain_pin_e brainPin); EXTERNC bool brain_pin_is_ext(brain_pin_e brainPin); +void pinDiag2string(char *buffer, size_t size, brain_pin_diag_e pin_diag); /** * Usually high-level code would invoke efiSetPadMode, not this method directly