diff --git a/firmware/controllers/algo/obd_error_codes.h b/firmware/controllers/algo/obd_error_codes.h index c762e5e674..5a689acf04 100644 --- a/firmware/controllers/algo/obd_error_codes.h +++ b/firmware/controllers/algo/obd_error_codes.h @@ -2058,6 +2058,19 @@ typedef enum { CUSTOM_ERR_ARRAY_REMOVE_ERROR = 6699, CUSTOM_ERR_INVALID_INPUT_ICU_PIN = 6700, + CUSTOM_CJ125_0 = 6700, + CUSTOM_CJ125_1 = 6701, + CUSTOM_CJ125_2 = 6702, + CUSTOM_ERR_6703 = 6703, + CUSTOM_ERR_6704 = 6704, + CUSTOM_TLE8888 = 6705, + CUSTOM_ERR_6706 = 6706, + CUSTOM_ERR_6707 = 6707, + CUSTOM_ERR_6708 = 6708, + CUSTOM_ERR_6709 = 6709, + CUSTOM_ERR_6710 = 6710, + + CUSTOM_ERR_TRIGGER_SYNC = 9000, CUSTOM_OBD_TRIGGER_SHAPE = 9001, /** diff --git a/firmware/development/hw_layer/poten.cpp b/firmware/development/hw_layer/poten.cpp index 94b4cab4c1..baf7661d55 100644 --- a/firmware/development/hw_layer/poten.cpp +++ b/firmware/development/hw_layer/poten.cpp @@ -108,8 +108,13 @@ void initPotentiometers(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { continue; } - initPotentiometer(&potConfig[i], getSpiDevice(CONFIGB(digitalPotentiometerSpiDevice)), - csPin); + SPIDriver *driver = getSpiDevice(CONFIGB(digitalPotentiometerSpiDevice)); + if (driver == NULL) { + // error already reported + return; + } + + initPotentiometer(&potConfig[i], driver, csPin); } addConsoleActionII("pot", setPotResistanceCommand); diff --git a/firmware/hw_layer/HIP9011.cpp b/firmware/hw_layer/HIP9011.cpp index c690a0f155..4934dc9334 100644 --- a/firmware/hw_layer/HIP9011.cpp +++ b/firmware/hw_layer/HIP9011.cpp @@ -387,6 +387,10 @@ void initHip9011(Logging *sharedLogger) { #if EFI_PROD_CODE driver = getSpiDevice(engineConfiguration->hip9011SpiDevice); + if (driver == NULL) { + // error already reported + return; + } hipSpiCfg.ssport = getHwPort("hip", CONFIGB(hip9011CsPin)); hipSpiCfg.sspad = getHwPin("hip", CONFIGB(hip9011CsPin)); diff --git a/firmware/hw_layer/accelerometer.cpp b/firmware/hw_layer/accelerometer.cpp index 44f5d30df7..ee61452d40 100644 --- a/firmware/hw_layer/accelerometer.cpp +++ b/firmware/hw_layer/accelerometer.cpp @@ -80,6 +80,10 @@ void initAccelerometer(DECLARE_ENGINE_PARAMETER_SIGNATURE) { return; // temporary #if HAL_USE_SPI || defined(__DOXYGEN__) driver = getSpiDevice(engineConfiguration->accelerometerSpiDevice); + if (driver == NULL) { + // error already reported + return; + } turnOnSpi(engineConfiguration->accelerometerSpiDevice); spiStart(driver, &accelerometerCfg); diff --git a/firmware/hw_layer/drivers/gpio/tle8888.cpp b/firmware/hw_layer/drivers/gpio/tle8888.cpp index 3388e14732..cdeae94d99 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.cpp +++ b/firmware/hw_layer/drivers/gpio/tle8888.cpp @@ -42,6 +42,10 @@ void initTle8888(DECLARE_ENGINE_PARAMETER_SIGNATURE) { spiConfig.cr1 += getSpiPrescaler(_150KHz, engineConfiguration->tle8888spiDevice); driver = getSpiDevice(engineConfiguration->tle8888spiDevice); + if (driver == NULL) { + // error already reported + return; + } // todo: reuse initSpiCs method? spiConfig.ssport = getHwPort("tle8888", engineConfiguration->tle8888_cs); spiConfig.sspad = getHwPin("tle8888", engineConfiguration->tle8888_cs); diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 9f6e0b16bc..a5cfb15409 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -111,6 +111,9 @@ static void initSpiModules(board_configuration_s *boardConfiguration) { } } +/** + * @return NULL if SPI device not specified + */ SPIDriver * getSpiDevice(spi_device_e spiDevice) { if (spiDevice == SPI_NONE) { return NULL; diff --git a/firmware/hw_layer/max31855.cpp b/firmware/hw_layer/max31855.cpp index c19fe19083..75633db860 100644 --- a/firmware/hw_layer/max31855.cpp +++ b/firmware/hw_layer/max31855.cpp @@ -142,11 +142,15 @@ static void egtRead(void) { } void initMax31855(Logging *sharedLogger, spi_device_e device, egt_cs_array_t max31855_cs) { - SPIDriver *drv = getSpiDevice(device); + driver = getSpiDevice(device); + if (driver == NULL) { + // error already reported + return; + } + logger = sharedLogger; // todo:spi device is now enabled separately - should probably be enabled here - driver = drv; addConsoleAction("egtinfo", (Void) showEgtInfo); diff --git a/firmware/hw_layer/sensors/CJ125.cpp b/firmware/hw_layer/sensors/CJ125.cpp index f4741cba81..dc634cdbd4 100644 --- a/firmware/hw_layer/sensors/CJ125.cpp +++ b/firmware/hw_layer/sensors/CJ125.cpp @@ -338,6 +338,10 @@ static void cjStartSpi(DECLARE_ENGINE_PARAMETER_SIGNATURE) { cj125spicfg.ssport = getHwPort("cj125", CONFIGB(cj125CsPin)); cj125spicfg.sspad = getHwPin("cj125", CONFIGB(cj125CsPin)); driver = getSpiDevice(engineConfiguration->cj125SpiDevice); + if (driver == NULL) { + // error already reported + return; + } scheduleMsg(logger, "cj125: Starting SPI driver"); spiStart(driver, &cj125spicfg); } @@ -540,16 +544,22 @@ void initCJ125(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { if (CONFIG(cj125ur) == EFI_ADC_NONE || CONFIG(cj125ua) == EFI_ADC_NONE) { scheduleMsg(logger, "cj125 init error! cj125ur and cj125ua are required."); + warning(CUSTOM_CJ125_0, "cj ur ua"); return; } if (CONFIGB(wboHeaterPin) == GPIO_UNASSIGNED) { scheduleMsg(logger, "cj125 init error! wboHeaterPin is required."); + warning(CUSTOM_CJ125_1, "cj heater"); return; } globalInstance.cjInitPid(PASS_ENGINE_PARAMETER_SIGNATURE); cjStartSpi(PASS_ENGINE_PARAMETER_SIGNATURE); + if (driver == NULL) { + // error already reported + return; + } scheduleMsg(logger, "cj125: Starting heater control"); globalInstance.StartHeaterControl(applyPinState PASS_ENGINE_PARAMETER_SUFFIX); cjStart(PASS_ENGINE_PARAMETER_SIGNATURE);