diff --git a/firmware/controllers/algo/obd_error_codes.h b/firmware/controllers/algo/obd_error_codes.h index 765674031d..637cc1ad1a 100644 --- a/firmware/controllers/algo/obd_error_codes.h +++ b/firmware/controllers/algo/obd_error_codes.h @@ -1671,7 +1671,7 @@ typedef enum { CUSTOM_OBD_4 = 6004, CUSTOM_OBD_5 = 6005, CUSTOM_OBD_6 = 6006, - CUSTOM_OBD_7 = 6007, + CUSTOM_NO_FSIO = 6007, CUSTOM_OBD_8 = 6008, CUSTOM_OBD_9 = 6009, diff --git a/firmware/controllers/core/fsio_core.cpp b/firmware/controllers/core/fsio_core.cpp index 875cf5e5bc..cec315b8c1 100644 --- a/firmware/controllers/core/fsio_core.cpp +++ b/firmware/controllers/core/fsio_core.cpp @@ -300,9 +300,13 @@ float LECalculator::getValue2(float selfValue, LEElement *fistElementInList, Eng return getValue(selfValue, engine); } +bool LECalculator::isEmpty() { + return first == NULL; +} + float LECalculator::getValue(float selfValue, Engine *engine) { - if (first == NULL) { - warning(CUSTOM_OBD_7, "no FSIO code"); + if (isEmpty()) { + warning(CUSTOM_NO_FSIO, "no FSIO code"); return NAN; } LEElement *element = first; diff --git a/firmware/controllers/core/fsio_core.h b/firmware/controllers/core/fsio_core.h index 58132068a4..4ef7e52146 100644 --- a/firmware/controllers/core/fsio_core.h +++ b/firmware/controllers/core/fsio_core.h @@ -95,6 +95,7 @@ public: float getValue(float selfValue, Engine *engine); float getValue2(float selfValue, LEElement *fistElementInList, Engine *engine); void add(LEElement *element); + bool isEmpty(); void reset(); void reset(LEElement *element); le_action_e calcLogAction[MAX_CALC_LOG]; diff --git a/firmware/controllers/core/fsio_impl.cpp b/firmware/controllers/core/fsio_impl.cpp index 6483948eb7..b0cbe82bc1 100644 --- a/firmware/controllers/core/fsio_impl.cpp +++ b/firmware/controllers/core/fsio_impl.cpp @@ -225,13 +225,22 @@ static const char *getGpioPinName(int index) { return NULL; } +/** + * @param index from zero for (LE_COMMAND_COUNT - 1) + */ static void handleFsio(Engine *engine, int index) { if (boardConfiguration->fsioPins[index] == GPIO_UNASSIGNED) return; bool isPwmMode = boardConfiguration->fsioFrequency[index] != NO_PWM; - float fvalue = calc.getValue2(engine->engineConfiguration2->fsioLastValue[index], fsioLogics[index], engine); + float fvalue; + if (fsioLogics[index] == NULL) { + warning(CUSTOM_NO_FSIO, "no FSIO for #%d %s", index + 1, hwPortname(boardConfiguration->fsioPins[index])); + fvalue = NAN; + } else { + fvalue = calc.getValue2(engine->engineConfiguration2->fsioLastValue[index], fsioLogics[index], engine); + } engine->engineConfiguration2->fsioLastValue[index] = fvalue; if (isPwmMode) {