Starter seems to be engaged forever #1965

This commit is contained in:
rusefillc 2020-11-18 22:47:40 -05:00
parent 905d740b4b
commit a9e0bffbbd
5 changed files with 25 additions and 12 deletions

View File

@ -30,7 +30,7 @@ void setMockAfrVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockMafVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); void setMockMafVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockIatVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); void setMockIatVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockCltVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); void setMockCltVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX);
void setMockState(brain_pin_e pin, bool state DECLARE_ENGINE_PARAMETER_SUFFIX); void setMockState(brain_pin_e pin, bool state);
void printCurrentState(Logging *logging, int seconds, const char *engineTypeName, const char *firmwareBuildId); void printCurrentState(Logging *logging, int seconds, const char *engineTypeName, const char *firmwareBuildId);

View File

@ -75,8 +75,8 @@ void setMockVBattVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX) {
setMockVoltage(engineConfiguration->vbattAdcChannel, voltage PASS_ENGINE_PARAMETER_SUFFIX); setMockVoltage(engineConfiguration->vbattAdcChannel, voltage PASS_ENGINE_PARAMETER_SUFFIX);
} }
void setMockState(brain_pin_e pin, bool state DECLARE_ENGINE_PARAMETER_SUFFIX) { void setMockState(brain_pin_e pin, bool state) {
#if ! EFI_PROD_CODE #if EFI_UNIT_TEST
mockPinStates[static_cast<int>(pin)] = state; mockPinStates[static_cast<int>(pin)] = state;
#endif #endif
} }

View File

@ -11,6 +11,7 @@
#include "efi_gpio.h" #include "efi_gpio.h"
#include "drivers/gpio/gpio_ext.h" #include "drivers/gpio/gpio_ext.h"
#include "perf_trace.h" #include "perf_trace.h"
#include "engine_controller.h"
#if EFI_GPIO_HARDWARE #if EFI_GPIO_HARDWARE
#include "pin_repository.h" #include "pin_repository.h"
@ -75,19 +76,17 @@ bool RegisteredOutputPin::isPinConfigurationChanged() {
pin_output_mode_e newMode = *(pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset])); pin_output_mode_e newMode = *(pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset]));
return curPin != newPin || curMode != newMode; return curPin != newPin || curMode != newMode;
#else #else
return false; return true;
#endif // EFI_PROD_CODE #endif // EFI_PROD_CODE
} }
void RegisteredOutputPin::init() { void RegisteredOutputPin::init(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
#if EFI_PROD_CODE
brain_pin_e newPin = *(brain_pin_e *) ((void *) (&((char*) engineConfiguration)[pinOffset])); brain_pin_e newPin = *(brain_pin_e *) ((void *) (&((char*) engineConfiguration)[pinOffset]));
pin_output_mode_e *newMode = (pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset])); pin_output_mode_e *newMode = (pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset]));
if (isPinConfigurationChanged()) { if (isPinConfigurationChanged()) {
this->initPin(registrationName, newPin, newMode); this->initPin(registrationName, newPin, newMode);
} }
#endif // EFI_PROD_CODE
} }
void RegisteredOutputPin::unregister() { void RegisteredOutputPin::unregister() {
@ -176,6 +175,7 @@ EnginePins::EnginePins() :
if ((outputPin)->currentLogicValue != (logicValue)) { \ if ((outputPin)->currentLogicValue != (logicValue)) { \
(outputPin)->currentLogicValue = (logicValue); \ (outputPin)->currentLogicValue = (logicValue); \
} \ } \
setMockState((outputPin)->brainPin, logicValue); \
} }
#endif /* EFI_PROD_CODE */ #endif /* EFI_PROD_CODE */
@ -228,7 +228,7 @@ void EnginePins::startPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
RegisteredOutputPin * pin = registeredOutputHead; RegisteredOutputPin * pin = registeredOutputHead;
while (pin != nullptr) { while (pin != nullptr) {
pin->init(); pin->init(PASS_ENGINE_PARAMETER_SIGNATURE);
pin = pin->next; pin = pin->next;
} }
} }
@ -471,6 +471,10 @@ void OutputPin::initPin(const char *msg, brain_pin_e brainPin) {
} }
void OutputPin::initPin(const char *msg, brain_pin_e brainPin, const pin_output_mode_e *outputMode) { void OutputPin::initPin(const char *msg, brain_pin_e brainPin, const pin_output_mode_e *outputMode) {
#if EFI_UNIT_TEST
this->brainPin = brainPin;
#endif
#if EFI_GPIO_HARDWARE && EFI_PROD_CODE #if EFI_GPIO_HARDWARE && EFI_PROD_CODE
if (brainPin == GPIO_UNASSIGNED) if (brainPin == GPIO_UNASSIGNED)
return; return;

View File

@ -35,7 +35,7 @@ TEST(idle, fsioPidParameters) {
applyFsioExpression(QUOTE(MAGIC_OFFSET_FOR_IDLE_MIN_VALUE), "ac_on_switch 0 cfg_acIdleExtraMin if" PASS_ENGINE_PARAMETER_SUFFIX); applyFsioExpression(QUOTE(MAGIC_OFFSET_FOR_IDLE_MIN_VALUE), "ac_on_switch 0 cfg_acIdleExtraMin if" PASS_ENGINE_PARAMETER_SUFFIX);
ASSERT_EQ(1, hasAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); ASSERT_EQ(1, hasAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE));
setMockState(engineConfiguration->acSwitch, true PASS_ENGINE_PARAMETER_SUFFIX); setMockState(engineConfiguration->acSwitch, true);
timeNowUs += MS2US(15); timeNowUs += MS2US(15);
ASSERT_TRUE(getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); ASSERT_TRUE(getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE));
@ -43,7 +43,7 @@ TEST(idle, fsioPidParameters) {
ASSERT_EQ(40, getIdlePidOffset(PASS_ENGINE_PARAMETER_SIGNATURE)); ASSERT_EQ(40, getIdlePidOffset(PASS_ENGINE_PARAMETER_SIGNATURE));
ASSERT_EQ(30, getIdlePidMinValue(PASS_ENGINE_PARAMETER_SIGNATURE)); ASSERT_EQ(30, getIdlePidMinValue(PASS_ENGINE_PARAMETER_SIGNATURE));
setMockState(engineConfiguration->acSwitch, false PASS_ENGINE_PARAMETER_SUFFIX); setMockState(engineConfiguration->acSwitch, false);
timeNowUs += MS2US(15); timeNowUs += MS2US(15);
ASSERT_FALSE(getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); ASSERT_FALSE(getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE));

View File

@ -11,9 +11,18 @@
TEST(start, startStop) { TEST(start, startStop) {
WITH_ENGINE_TEST_HELPER(BMW_M73_PROTEUS); WITH_ENGINE_TEST_HELPER(BMW_M73_PROTEUS);
// this is a pull-up, so 'true' on start-up // this is a pull-up, so 'true' on start-up
setMockState(engineConfiguration->startStopButtonPin, true PASS_ENGINE_PARAMETER_SUFFIX); setMockState(engineConfiguration->startStopButtonPin, true);
ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), 0); ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), false);
slowStartStopButtonCallback(PASS_ENGINE_PARAMETER_SIGNATURE); slowStartStopButtonCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), false);
eth.smartMoveTimeForwardSeconds(10);
// inverted since pull-up
setMockState(engineConfiguration->startStopButtonPin, false);
slowStartStopButtonCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), true);
} }