From cb0b9b2a4eb0458d401a3ac9188881d602f24b05 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sat, 20 Sep 2014 14:03:00 -0500 Subject: [PATCH] auto-sync --- .../controllers/algo/engine_configuration.h | 4 +-- firmware/controllers/algo/rusefi_enums.h | 2 ++ firmware/controllers/settings.cpp | 27 ++++++++++++++++--- firmware/controllers/settings.h | 2 +- firmware/emulation/hw_layer/poten.c | 22 +-------------- firmware/hw_layer/hardware.cpp | 21 +++++++++++++++ firmware/hw_layer/hardware.h | 1 + firmware/hw_layer/max31855.c | 4 +++ firmware/util/cli_registry.c | 19 ++++++++++--- firmware/util/cli_registry.h | 11 +++++++- 10 files changed, 80 insertions(+), 33 deletions(-) diff --git a/firmware/controllers/algo/engine_configuration.h b/firmware/controllers/algo/engine_configuration.h index cb5e2de67f..939d89bfcb 100644 --- a/firmware/controllers/algo/engine_configuration.h +++ b/firmware/controllers/algo/engine_configuration.h @@ -183,8 +183,8 @@ typedef struct { brain_pin_e canTxPin; brain_pin_e canRxPin; - brain_pin_e triggerSimulatorPins[3]; - pin_output_mode_e triggerSimulatorPinModes[3]; + brain_pin_e triggerSimulatorPins[TRIGGER_SIMULATOR_PIN_COUNT]; + pin_output_mode_e triggerSimulatorPinModes[TRIGGER_SIMULATOR_PIN_COUNT]; brain_pin_e o2heaterPin; pin_output_mode_e o2heaterPinModeTodO; diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 4065a8da14..2211e6e331 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -19,6 +19,8 @@ #define DIGIPOT_COUNT 4 +#define TRIGGER_SIMULATOR_PIN_COUNT 3 + #define LOGIC_ANALYZER_CHANNEL_COUNT 4 typedef enum { diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index cdd94245ef..04d2c1854e 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -54,6 +54,11 @@ void printFloatArray(const char *prefix, float array[], int size) { scheduleLogging(&logger); } +void printSpiState(Logging *logger, board_configuration_s *boardConfiguration) { + scheduleMsg(logger, "spi 1=%s/2=%s/3=%s", boolToString(boardConfiguration->is_enabled_spi_1), + boolToString(boardConfiguration->is_enabled_spi_2), boolToString(boardConfiguration->is_enabled_spi_3)); +} + extern board_configuration_s *boardConfiguration; /** @@ -150,8 +155,8 @@ void printConfiguration(engine_configuration_s *engineConfiguration, engine_conf hwPortname(boardConfiguration->digitalPotentiometerChipSelect[i])); } - scheduleMsg(&logger, "spi 1=%s/2=%s/3=%s", boolToString(boardConfiguration->is_enabled_spi_1), - boolToString(boardConfiguration->is_enabled_spi_2), boolToString(boardConfiguration->is_enabled_spi_3)); + printSpiState(&logger, boardConfiguration); + #endif /* EFI_PROD_CODE */ } @@ -504,7 +509,7 @@ static void setTriggerInputPin(const char *indexStr, const char *pinName) { static void setTriggerSimulatorMode(const char *indexStr, const char *modeCode) { int index = atoi(indexStr); - if (index < 0 || index > 2 || absI(index) == ERROR_CODE) { + if (index < 0 || index > TRIGGER_SIMULATOR_PIN_COUNT || absI(index) == ERROR_CODE) { return; } int mode = atoi(modeCode); @@ -514,9 +519,22 @@ static void setTriggerSimulatorMode(const char *indexStr, const char *modeCode) boardConfiguration->triggerSimulatorPinModes[index] = (pin_output_mode_e) mode; } +static void setEgtCSPin(const char *indexStr, const char *pinName, board_configuration_s * board_configuration_s) { + int index = atoi(indexStr); + if (index < 0 || index > MAX31855_CS_COUNT || absI(index) == ERROR_CODE) + return; + brain_pin_e pin = parseBrainPin(pinName); + if (pin == GPIO_INVALID) { + scheduleMsg(&logger, "invalid pin name [%s]", pinName); + return; + } + scheduleMsg(&logger, "setting EGT CS pin[%d] to %s please save&restart", index, hwPortname(pin)); + boardConfiguration->max31855_cs[index] = pin; +} + static void setTriggerSimulatorPin(const char *indexStr, const char *pinName) { int index = atoi(indexStr); - if (index < 0 || index > 2) + if (index < 0 || index > TRIGGER_SIMULATOR_PIN_COUNT || absI(index) == ERROR_CODE) return; brain_pin_e pin = parseBrainPin(pinName); if (pin == GPIO_INVALID) { @@ -780,6 +798,7 @@ void initSettings(engine_configuration_s *engineConfiguration) { addConsoleActionSS("set_ignition_pin", setIgnitionPin); addConsoleActionSS("set_trigger_input_pin", setTriggerInputPin); addConsoleActionSS("set_trigger_simulator_pin", setTriggerSimulatorPin); + addConsoleActionSSP("set_egt_cs_pin", (VoidCharPtrCharPtrVoidPtr)setEgtCSPin, boardConfiguration); addConsoleActionSS("set_trigger_simulator_mode", setTriggerSimulatorMode); addConsoleActionS("set_fuel_pump_pin", setFuelPumpPin); addConsoleActionS("set_idle_pin", setIdlePin); diff --git a/firmware/controllers/settings.h b/firmware/controllers/settings.h index b67d849cac..ea07250605 100644 --- a/firmware/controllers/settings.h +++ b/firmware/controllers/settings.h @@ -17,7 +17,7 @@ extern "C" { #endif /* __cplusplus */ - +void printSpiState(Logging *logger, board_configuration_s *boardConfiguration); void pokeControl(void); void setEngineType(int value); diff --git a/firmware/emulation/hw_layer/poten.c b/firmware/emulation/hw_layer/poten.c index 864203e448..38391bf772 100644 --- a/firmware/emulation/hw_layer/poten.c +++ b/firmware/emulation/hw_layer/poten.c @@ -36,26 +36,6 @@ * */ -SPIDriver * getDigiralPotDevice(spi_device_e spiDevice) { -#if STM32_SPI_USE_SPI1 || defined(__DOXYGEN__) - if (spiDevice == SPI_DEVICE_1) { - return &SPID1; - } -#endif -#if STM32_SPI_USE_SPI2 || defined(__DOXYGEN__) - if (spiDevic e== SPI_DEVICE_2) { - return &SPID2; - } -#endif -#if STM32_SPI_USE_SPI3 || defined(__DOXYGEN__) - if (spiDevice == SPI_DEVICE_3) { - return &SPID3; - } -#endif - firmwareError("Unexpected SPI device: %d", spiDevice); - return NULL; -} - /* Low speed SPI configuration (281.250kHz, CPHA=0, CPOL=0, MSb first).*/ #define SPI_POT_CONFIG SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_DFF @@ -130,7 +110,7 @@ void initPotentiometers(board_configuration_s *boardConfiguration) { continue; } - initPotentiometer(&config[i], getDigiralPotDevice(boardConfiguration->digitalPotentiometerSpiDevice), + initPotentiometer(&config[i], getSpiDevice(boardConfiguration->digitalPotentiometerSpiDevice), getHwPort(csPin), getHwPin(csPin)); } diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index efe7d492f2..b3f2b0b1df 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -268,3 +268,24 @@ void initHardware(Logging *logger, Engine *engine) { printMsg(logger, "initHardware() OK!"); } + +SPIDriver * getSpiDevice(spi_device_e spiDevice) { +#if STM32_SPI_USE_SPI1 || defined(__DOXYGEN__) + if (spiDevice == SPI_DEVICE_1) { + return &SPID1; + } +#endif +#if STM32_SPI_USE_SPI2 || defined(__DOXYGEN__) + if (spiDevic e== SPI_DEVICE_2) { + return &SPID2; + } +#endif +#if STM32_SPI_USE_SPI3 || defined(__DOXYGEN__) + if (spiDevice == SPI_DEVICE_3) { + return &SPID3; + } +#endif + firmwareError("Unexpected SPI device: %d", spiDevice); + return NULL; +} + diff --git a/firmware/hw_layer/hardware.h b/firmware/hw_layer/hardware.h index a62fd766e1..8094d9d8f7 100644 --- a/firmware/hw_layer/hardware.h +++ b/firmware/hw_layer/hardware.h @@ -15,6 +15,7 @@ extern "C" { #endif /* __cplusplus */ +SPIDriver * getSpiDevice(spi_device_e spiDevice); void turnOnSpi(spi_device_e device); void lockSpi(spi_device_e device); void unlockSpi(void); diff --git a/firmware/hw_layer/max31855.c b/firmware/hw_layer/max31855.c index b88f7c34f5..84c05beada 100644 --- a/firmware/hw_layer/max31855.c +++ b/firmware/hw_layer/max31855.c @@ -14,12 +14,16 @@ #include "max31855.h" #include "pin_repository.h" +#include "settings.h" #if EFI_MAX_31855 static Logging logger; static void showEgtInfo(board_configuration_s *boardConfiguration) { + printSpiState(&logger, boardConfiguration); + + for (int i = 0; i < MAX31855_CS_COUNT; i++) { if (boardConfiguration->max31855_cs[i] != GPIO_NONE) { scheduleMsg(&logger, "%d ETG @ %s", i, hwPortname(boardConfiguration->max31855_cs[i])); diff --git a/firmware/util/cli_registry.c b/firmware/util/cli_registry.c index cf001487fe..875d796430 100644 --- a/firmware/util/cli_registry.c +++ b/firmware/util/cli_registry.c @@ -50,6 +50,10 @@ void addConsoleActionP(const char *token, VoidPtr callback, void *param) { doAddAction(token, NO_PARAMETER_P, (Void) callback, param); } +void addConsoleActionSSP(const char *token, VoidCharPtrCharPtrVoidPtr callback, void *param) { + doAddAction(token, STRING2_PARAMETER_P, (Void) callback, param); +} + /** * @brief Register console action without parameters */ @@ -105,8 +109,11 @@ static int getParameterCount(action_type_e parameterType) { case STRING_PARAMETER: return 1; case FLOAT_FLOAT_PARAMETER: + case FLOAT_FLOAT_PARAMETER_P: case STRING2_PARAMETER: + case STRING2_PARAMETER_P: case TWO_INTS_PARAMETER: + case TWO_INTS_PARAMETER_P: return 2; case STRING3_PARAMETER: return 3; @@ -152,7 +159,7 @@ void handleActionWithParameter(TokenCallback *current, char *parameter) { } // todo: refactor this hell! - if (current->parameterType == STRING2_PARAMETER) { + if (current->parameterType == STRING2_PARAMETER || current->parameterType == STRING2_PARAMETER_P) { int spaceIndex = indexOf(parameter, ' '); if (spaceIndex == -1) { return; @@ -163,10 +170,14 @@ void handleActionWithParameter(TokenCallback *current, char *parameter) { parameter += spaceIndex + 1; char * param1 = parameter; - VoidCharPtrCharPtr callbackS = (VoidCharPtrCharPtr) current->callback; - (*callbackS)(param0, param1); + if (current->parameterType == STRING2_PARAMETER) { + VoidCharPtrCharPtr callbackS = (VoidCharPtrCharPtr) current->callback; + (*callbackS)(param0, param1); + } else { + VoidCharPtrCharPtrVoidPtr callbackS = (VoidCharPtrCharPtrVoidPtr) current->callback; + (*callbackS)(param0, param1, current->param); + } return; - } if (current->parameterType == STRING3_PARAMETER) { diff --git a/firmware/util/cli_registry.h b/firmware/util/cli_registry.h index 9c4e33421d..949939af74 100644 --- a/firmware/util/cli_registry.h +++ b/firmware/util/cli_registry.h @@ -23,10 +23,13 @@ typedef enum { FLOAT_PARAMETER, STRING_PARAMETER, STRING2_PARAMETER, + STRING2_PARAMETER_P, STRING3_PARAMETER, STRING5_PARAMETER, TWO_INTS_PARAMETER, - FLOAT_FLOAT_PARAMETER + TWO_INTS_PARAMETER_P, + FLOAT_FLOAT_PARAMETER, + FLOAT_FLOAT_PARAMETER_P, } action_type_e; typedef struct { @@ -49,7 +52,10 @@ typedef void (*VoidFloat)(float); typedef void (*VoidFloatFloat)(float, float); typedef void (*VoidIntInt)(int, int); typedef void (*VoidCharPtr)(const char *); + typedef void (*VoidCharPtrCharPtr)(const char *, const char *); +typedef void (*VoidCharPtrCharPtrVoidPtr)(const char *, const char *, void*); + typedef void (*VoidCharPtrCharPtrCharPtr)(const char *, const char *, const char *); typedef void (*VoidCharPtrCharPtrCharPtrCharPtrCharPtr)(const char *, const char *, const char *, const char *, const char *); @@ -68,7 +74,10 @@ void addConsoleActionII(const char *token, VoidIntInt callback); void addConsoleActionF(const char *token, VoidFloat callback); void addConsoleActionFF(const char *token, VoidFloatFloat callback); void addConsoleActionS(const char *token, VoidCharPtr callback); + void addConsoleActionSS(const char *token, VoidCharPtrCharPtr callback); +void addConsoleActionSSP(const char *token, VoidCharPtrCharPtrVoidPtr callback, void *param); + void addConsoleActionSSS(const char *token, VoidCharPtrCharPtrCharPtr callback); void addConsoleActionSSSSS(const char *token, VoidCharPtrCharPtrCharPtrCharPtrCharPtr callback);