better error handling for invalid SPI settings

This commit is contained in:
rusefi 2019-03-26 09:38:23 -04:00
parent 3ff5581e77
commit ddb0fc6510
8 changed files with 51 additions and 4 deletions

View File

@ -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,
/**

View File

@ -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);

View File

@ -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));

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);