From 1dffcf5729d5fcf9d31efc6b7baf98373662dc57 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 31 Mar 2021 11:46:50 -0700 Subject: [PATCH] make board config override actually usable (#2508) * new function * hellen * MRE * proteus * put those function declarations in a reasonable place * put the comment back * weak * move that to a reasonable place Co-authored-by: Matthew Kennedy --- firmware/config/boards/hellen/cypress/board.h | 1 - .../hellen/hellen72/board_configuration.cpp | 29 ++++++----- firmware/config/boards/kinetis/board.h | 1 - .../microrusefi/board_configuration.cpp | 47 +++++++++--------- .../nucleo_h743/board_configuration.cpp | 7 --- .../boards/proteus/board_configuration.cpp | 31 ++++++------ .../config/boards/st_stm32f4/board_extra.c | 7 --- .../controllers/algo/engine_configuration.cpp | 48 +++++++++++++++++-- .../controllers/algo/engine_configuration.h | 22 ++------- firmware/hw_layer/ports/chconf_common.h | 1 - firmware/hw_layer/sensors/hip9011.cpp | 40 ---------------- firmware/hw_layer/sensors/hip9011.h | 2 - 12 files changed, 98 insertions(+), 138 deletions(-) diff --git a/firmware/config/boards/hellen/cypress/board.h b/firmware/config/boards/hellen/cypress/board.h index 9eac698832..d39a8decee 100644 --- a/firmware/config/boards/hellen/cypress/board.h +++ b/firmware/config/boards/hellen/cypress/board.h @@ -24,7 +24,6 @@ extern "C" { #endif void boardInit(void); - void setBoardDefaultConfiguration(void); void setPinConfigurationOverrides(void); void setSerialConfigurationOverrides(void); void setSdCardConfigurationOverrides(void); diff --git a/firmware/config/boards/hellen/hellen72/board_configuration.cpp b/firmware/config/boards/hellen/hellen72/board_configuration.cpp index cc5261143c..9a68998ceb 100644 --- a/firmware/config/boards/hellen/hellen72/board_configuration.cpp +++ b/firmware/config/boards/hellen/hellen72/board_configuration.cpp @@ -19,15 +19,6 @@ EXTERN_ENGINE; -static const ConfigOverrides configOverrides = { - .canTxPin = GPIOD_1, - .canRxPin = GPIOD_0, -}; - -const ConfigOverrides& getConfigOverrides() { - return configOverrides; -} - static void setInjectorPins() { engineConfiguration->injectionPins[0] = GPIOG_7; engineConfiguration->injectionPins[1] = GPIOG_8; @@ -107,15 +98,25 @@ static void setupDefaultSensorInputs() { engineConfiguration->afr.hwChannel = EFI_ADC_1; engineConfiguration->clt.adcChannel = EFI_ADC_12; - engineConfiguration->clt.config.bias_resistor = 4700; engineConfiguration->iat.adcChannel = EFI_ADC_13; - engineConfiguration->iat.config.bias_resistor = 4700; engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_NONE; engineConfiguration->auxTempSensor2.adcChannel = EFI_ADC_NONE; } +void setBoardConfigOverrides(void) { + setLedPins(); + setupVbatt(); + setSdCardConfigurationOverrides(); + + engineConfiguration->clt.config.bias_resistor = 4700; + engineConfiguration->iat.config.bias_resistor = 4700; + + engineConfiguration->canTxPin = GPIOD_1; + engineConfiguration->canRxPin = GPIOD_0; +} + void setPinConfigurationOverrides(void) { } @@ -138,9 +139,8 @@ void setSerialConfigurationOverrides(void) { void setBoardDefaultConfiguration(void) { setInjectorPins(); setIgnitionPins(); - setLedPins(); - setupVbatt(); - setSdCardConfigurationOverrides(); + + engineConfiguration->isSdCardEnabled = true; CONFIG(enableSoftwareKnock) = true; @@ -180,5 +180,4 @@ void setSdCardConfigurationOverrides(void) { engineConfiguration->spi2sckPin = GPIOB_13; engineConfiguration->sdCardCsPin = GPIOB_12; CONFIG(is_enabled_spi_2) = true; - engineConfiguration->isSdCardEnabled = true; } diff --git a/firmware/config/boards/kinetis/board.h b/firmware/config/boards/kinetis/board.h index 0139baff32..9562a45877 100644 --- a/firmware/config/boards/kinetis/board.h +++ b/firmware/config/boards/kinetis/board.h @@ -24,7 +24,6 @@ extern "C" { #endif void boardInit(void); - void setBoardDefaultConfiguration(void); void setPinConfigurationOverrides(void); void setSerialConfigurationOverrides(void); void setSdCardConfigurationOverrides(void); diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 83c3b34671..4f6c6b5584 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -27,15 +27,6 @@ EXTERN_ENGINE; -static const ConfigOverrides configOverrides = { - .canTxPin = GPIOB_6, - .canRxPin = GPIOB_12, -}; - -const ConfigOverrides& getConfigOverrides() { - return configOverrides; -} - static void setInjectorPins() { engineConfiguration->injectionPins[0] = TLE8888_PIN_1; engineConfiguration->injectionPins[1] = TLE8888_PIN_2; @@ -161,11 +152,9 @@ static void setupDefaultSensorInputs() { // clt = "18 - AN temp 1" engineConfiguration->clt.adcChannel = EFI_ADC_0; - engineConfiguration->clt.config.bias_resistor = 2700; // iat = "23 - AN temp 2" engineConfiguration->iat.adcChannel = EFI_ADC_1; - engineConfiguration->iat.config.bias_resistor = 2700; setCommonNTCSensor(&engineConfiguration->auxTempSensor1, 2700); setCommonNTCSensor(&engineConfiguration->auxTempSensor2, 2700); @@ -176,6 +165,28 @@ static void setupDefaultSensorInputs() { #endif // HW_CHECK_MODE } +void setBoardConfigOverrides(void) { + setLedPins(); + setupVbatt(); + setupTle8888(); + setupEtb(); + + engineConfiguration->clt.config.bias_resistor = 2700; + engineConfiguration->iat.config.bias_resistor = 2700; + + engineConfiguration->canTxPin = GPIOB_6; + engineConfiguration->canRxPin = GPIOB_12; + + // SPI for SD card + CONFIG(is_enabled_spi_3) = true; + engineConfiguration->sdCardSpiDevice = SPI_DEVICE_3; + engineConfiguration->sdCardCsPin = GPIOB_9; + + engineConfiguration->spi3mosiPin = GPIOC_12; + engineConfiguration->spi3misoPin = GPIOC_11; + engineConfiguration->spi3sckPin = GPIOC_10; +} + void setPinConfigurationOverrides(void) { } @@ -199,13 +210,6 @@ void setSerialConfigurationOverrides(void) { void setBoardDefaultConfiguration(void) { setInjectorPins(); setIgnitionPins(); - setLedPins(); - setupVbatt(); - setupTle8888(); - setupEtb(); - - engineConfiguration->canTxPin = GPIOB_6; - engineConfiguration->canRxPin = GPIOB_12; // MRE has a special main relay control low side pin // rusEfi firmware is totally not involved with main relay control on microRusEfi board @@ -214,15 +218,8 @@ void setBoardDefaultConfiguration(void) { // TLE8888_PIN_21: "35 - GP Out 1" engineConfiguration->fuelPumpPin = TLE8888_PIN_21; - engineConfiguration->sdCardSpiDevice = SPI_DEVICE_3; - engineConfiguration->spi3mosiPin = GPIOC_12; - engineConfiguration->spi3misoPin = GPIOC_11; - engineConfiguration->spi3sckPin = GPIOC_10; - engineConfiguration->sdCardCsPin = GPIOB_9; - CONFIG(is_enabled_spi_3) = true; // engineConfiguration->isSdCardEnabled = true; - // TLE8888 high current low side: VVT2 IN9 / OUT5 // GPIOE_10: "3 - Lowside 2" engineConfiguration->idle.solenoidPin = TLE8888_PIN_5; diff --git a/firmware/config/boards/nucleo_h743/board_configuration.cpp b/firmware/config/boards/nucleo_h743/board_configuration.cpp index a7100f9f7e..b721fd65a8 100644 --- a/firmware/config/boards/nucleo_h743/board_configuration.cpp +++ b/firmware/config/boards/nucleo_h743/board_configuration.cpp @@ -1,12 +1,5 @@ #include "adc_inputs.h" -/** - * @brief Board-specific configuration defaults. - * @todo Add your board-specific code, if any. - */ -void setBoardDefaultConfiguration(void) { -} - /** * @brief Board-specific pin configuration code overrides. Needed by bootloader code. * @todo Add your board-specific code, if any. diff --git a/firmware/config/boards/proteus/board_configuration.cpp b/firmware/config/boards/proteus/board_configuration.cpp index b807a00fd4..9fff99c28a 100644 --- a/firmware/config/boards/proteus/board_configuration.cpp +++ b/firmware/config/boards/proteus/board_configuration.cpp @@ -43,15 +43,6 @@ static const brain_pin_e ignPins[] = { GPIOG_2, }; -static const ConfigOverrides configOverrides = { - .canTxPin = GPIOD_1, - .canRxPin = GPIOD_0, -}; - -const ConfigOverrides& getConfigOverrides() { - return configOverrides; -} - static void setInjectorPins() { copyArray(engineConfiguration->injectionPins, injPins); engineConfiguration->injectionPinMode = OM_DEFAULT; @@ -135,11 +126,9 @@ static void setupDefaultSensorInputs() { // CLT = Analog Temp 3 = PB0 engineConfiguration->clt.adcChannel = EFI_ADC_8; - engineConfiguration->clt.config.bias_resistor = 2700; // IAT = Analog Temp 2 = PC5 engineConfiguration->iat.adcChannel = EFI_ADC_15; - engineConfiguration->iat.config.bias_resistor = 2700; // TPS = Analog volt 2 = PC1 engineConfiguration->tps1_1AdcChannel = EFI_ADC_11; @@ -152,7 +141,6 @@ static void setupDefaultSensorInputs() { } static void setupSdCard() { - engineConfiguration->isSdCardEnabled = true; engineConfiguration->sdCardSpiDevice = SPI_DEVICE_3; engineConfiguration->sdCardCsPin = GPIOD_2; @@ -163,6 +151,19 @@ static void setupSdCard() { engineConfiguration->spi3mosiPin = GPIOC_12; } +void setBoardConfigOverrides(void) { + setupSdCard(); + setupEtb(); + setLedPins(); + setupVbatt(); + + engineConfiguration->clt.config.bias_resistor = 2700; + engineConfiguration->iat.config.bias_resistor = 2700; + + engineConfiguration->canTxPin = GPIOD_1; + engineConfiguration->canRxPin = GPIOD_0; +} + void setPinConfigurationOverrides(void) { } @@ -185,10 +186,8 @@ void setSerialConfigurationOverrides(void) { void setBoardDefaultConfiguration(void) { setInjectorPins(); setIgnitionPins(); - setLedPins(); - setupVbatt(); - setupEtb(); - setupSdCard(); + + engineConfiguration->isSdCardEnabled = true; // "required" hardware is done - set some reasonable defaults setupDefaultSensorInputs(); diff --git a/firmware/config/boards/st_stm32f4/board_extra.c b/firmware/config/boards/st_stm32f4/board_extra.c index 8c9ef1b598..e27d8b87e7 100644 --- a/firmware/config/boards/st_stm32f4/board_extra.c +++ b/firmware/config/boards/st_stm32f4/board_extra.c @@ -4,13 +4,6 @@ #include "chconf_common.h" -/** - * @brief Board-specific configuration defaults. - * @todo Add your board-specific code, if any. - */ -void setBoardDefaultConfiguration(void) { -} - /** * @brief Board-specific pin configuration code overrides. Needed by bootloader code. * @todo Add your board-specific code, if any. diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 05c0681d3c..e0009c2213 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -670,6 +670,42 @@ void setDefaultEngineNoiseTable(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->knockNoise[7] = 2; // 7000 } +static void setHip9011FrankensoPinout() { + /** + * SPI on PB13/14/15 + */ + // CONFIG(hip9011CsPin) = GPIOD_0; // rev 0.1 + + CONFIG(isHip9011Enabled) = true; + engineConfiguration->hip9011PrescalerAndSDO = HIP_8MHZ_PRESCALER; // 8MHz chip + CONFIG(is_enabled_spi_2) = true; + // todo: convert this to rusEfi, hardware-independent enum +#if EFI_PROD_CODE +#ifdef EFI_HIP_CS_PIN + CONFIG(hip9011CsPin) = EFI_HIP_CS_PIN; +#else + CONFIG(hip9011CsPin) = GPIOB_0; // rev 0.4 +#endif + CONFIG(hip9011CsPinMode) = OM_OPENDRAIN; + + CONFIG(hip9011IntHoldPin) = GPIOB_11; + CONFIG(hip9011IntHoldPinMode) = OM_OPENDRAIN; + + engineConfiguration->spi2SckMode = PO_OPENDRAIN; // 4 + engineConfiguration->spi2MosiMode = PO_OPENDRAIN; // 4 + engineConfiguration->spi2MisoMode = PO_PULLUP; // 32 +#endif /* EFI_PROD_CODE */ + + engineConfiguration->hip9011Gain = 1; + engineConfiguration->knockVThreshold = 4; + engineConfiguration->maxKnockSubDeg = 20; + + + if (!CONFIG(useTpicAdvancedMode)) { + engineConfiguration->hipOutputChannel = EFI_ADC_10; // PC0 + } +} + /** * @brief Global default engine configuration * This method sets the global engine configuration defaults. These default values are then @@ -1175,6 +1211,9 @@ void loadConfiguration(Logging* logger DECLARE_ENGINE_PARAMETER_SUFFIX) { engineConfiguration->engineType = DEFAULT_ENGINE_TYPE; resetConfigurationExt(logger, engineConfiguration->engineType PASS_ENGINE_PARAMETER_SUFFIX); #endif /* EFI_INTERNAL_FLASH */ + + // Force any board configuration options that humans shouldn't be able to change + setBoardConfigOverrides(); } void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallback, engine_type_e engineType DECLARE_ENGINE_PARAMETER_SUFFIX) { @@ -1194,6 +1233,7 @@ void resetConfigurationExt(Logging * logger, configuration_callback_t boardCallb #if EFI_PROD_CODE // call overrided board-specific configuration setup, if needed (for custom boards only) setBoardDefaultConfiguration(); + setBoardConfigOverrides(); #endif engineConfiguration->engineType = engineType; @@ -1519,8 +1559,6 @@ void setFrankenso0_1_joystick(engine_configuration_s *engineConfiguration) { engineConfiguration->joystickDPin = GPIOD_11; } -static const ConfigOverrides defaultConfigOverrides{}; -// This symbol is weak so that a board_configuration.cpp file can override it -__attribute__((weak)) const ConfigOverrides& getConfigOverrides() { - return defaultConfigOverrides; -} +// These symbols are weak so that a board_configuration.cpp file can override them +__attribute__((weak)) void setBoardDefaultConfiguration(void) { } +__attribute__((weak)) void setBoardConfigOverrides(void) { } diff --git a/firmware/controllers/algo/engine_configuration.h b/firmware/controllers/algo/engine_configuration.h index 8ae8ed82d7..bf6c065462 100644 --- a/firmware/controllers/algo/engine_configuration.h +++ b/firmware/controllers/algo/engine_configuration.h @@ -65,22 +65,8 @@ void resetConfigurationExt(Logging * logger, engine_type_e engineType DECLARE_EN void rememberCurrentConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE); #endif /* __cplusplus */ -struct ConfigOverrides { - // CAN pinout - brain_pin_e canTxPin; - brain_pin_e canRxPin; -}; +void setBoardDefaultConfiguration(void); +void setBoardConfigOverrides(void); -const ConfigOverrides& getConfigOverrides(); - -// If the overide value is default initialized -// Use the value from config if not overriden -// Otherwise use the override -// the == decltype(CONFIG(__x__)){} part means -// - take the type of the corresponding config field -// - default construct (ie, 0) an object of the corresponding type -// - check if the override value matches that (GPIO_UNASSIGNED, SPI_NONE, etc) -// If it matches, that field hasn't been overridden, so read from the config. -#define CONFIG_OVERRIDE(__x__) ( \ - (( getConfigOverrides().__x__ ) == decltype(CONFIG(__x__)){}) \ - ? (CONFIG( __x__ )) : ( getConfigOverrides().__x__ )) +// TODO: remove me +#define CONFIG_OVERRIDE(__x__) CONFIG(__x__) diff --git a/firmware/hw_layer/ports/chconf_common.h b/firmware/hw_layer/ports/chconf_common.h index f31136de48..9586adea53 100644 --- a/firmware/hw_layer/ports/chconf_common.h +++ b/firmware/hw_layer/ports/chconf_common.h @@ -50,7 +50,6 @@ extern "C" extern "C" { #endif void boardInit(void); - void setBoardDefaultConfiguration(void); void setPinConfigurationOverrides(void); void setSerialConfigurationOverrides(void); void setSdCardConfigurationOverrides(void); diff --git a/firmware/hw_layer/sensors/hip9011.cpp b/firmware/hw_layer/sensors/hip9011.cpp index 7498001296..74f32a18b8 100644 --- a/firmware/hw_layer/sensors/hip9011.cpp +++ b/firmware/hw_layer/sensors/hip9011.cpp @@ -463,44 +463,4 @@ static void hip_addconsoleActions(void) { addConsoleActionI("set_max_knock_sub_deg", setMaxKnockSubDeg); } -/*==========================================================================*/ -/* Boards specific functions. */ -/*==========================================================================*/ -/* TODO: move out oif here */ -void setHip9011FrankensoPinout(void) { - /** - * SPI on PB13/14/15 - */ - // CONFIG(hip9011CsPin) = GPIOD_0; // rev 0.1 - - CONFIG(isHip9011Enabled) = true; - engineConfiguration->hip9011PrescalerAndSDO = HIP_8MHZ_PRESCALER; // 8MHz chip - CONFIG(is_enabled_spi_2) = true; - // todo: convert this to rusEfi, hardware-independent enum -#if EFI_PROD_CODE -#ifdef EFI_HIP_CS_PIN - CONFIG(hip9011CsPin) = EFI_HIP_CS_PIN; -#else - CONFIG(hip9011CsPin) = GPIOB_0; // rev 0.4 -#endif - CONFIG(hip9011CsPinMode) = OM_OPENDRAIN; - - CONFIG(hip9011IntHoldPin) = GPIOB_11; - CONFIG(hip9011IntHoldPinMode) = OM_OPENDRAIN; - - engineConfiguration->spi2SckMode = PO_OPENDRAIN; // 4 - engineConfiguration->spi2MosiMode = PO_OPENDRAIN; // 4 - engineConfiguration->spi2MisoMode = PO_PULLUP; // 32 -#endif /* EFI_PROD_CODE */ - - engineConfiguration->hip9011Gain = 1; - engineConfiguration->knockVThreshold = 4; - engineConfiguration->maxKnockSubDeg = 20; - - - if (!CONFIG(useTpicAdvancedMode)) { - engineConfiguration->hipOutputChannel = EFI_ADC_10; // PC0 - } -} - #endif /* EFI_HIP_9011 */ diff --git a/firmware/hw_layer/sensors/hip9011.h b/firmware/hw_layer/sensors/hip9011.h index e653637472..7c62b4c8ac 100644 --- a/firmware/hw_layer/sensors/hip9011.h +++ b/firmware/hw_layer/sensors/hip9011.h @@ -18,5 +18,3 @@ void hipAdcCallback(adcsample_t value); #endif /* HAL_USE_ADC */ void hip9011_startKnockSampling(uint8_t cylinderNumber, efitick_t nowNt); - -void setHip9011FrankensoPinout(void);