diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index a6e85bcc70..2e76561def 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -427,10 +427,10 @@ void setDefaultConfiguration(engine_configuration_s *engineConfiguration, board_ boardConfiguration->ignitionPins[11] = GPIO_UNASSIGNED; boardConfiguration->ignitionPinMode = OM_DEFAULT; - boardConfiguration->malfunctionIndicatorPin = GPIOC_9; + boardConfiguration->malfunctionIndicatorPin = GPIO_UNASSIGNED; boardConfiguration->malfunctionIndicatorPinMode = OM_DEFAULT; - boardConfiguration->fanPin = GPIOC_15; + boardConfiguration->fanPin = GPIO_UNASSIGNED; boardConfiguration->fanPinMode = OM_DEFAULT; boardConfiguration->clutchDownPin = GPIO_UNASSIGNED; diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 43c8de13d3..9774b5e6fd 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -694,6 +694,16 @@ static void setLogicInputPin(const char *indexStr, const char *pinName) { scheduleMsg(&logger, "setting logic input pin[%d] to %s please save&restart", index, hwPortname(pin)); boardConfiguration->logicAnalyzerPins[index] = pin; } + +static void showPinFunction(const char *pinName) { + brain_pin_e pin = parseBrainPin(pinName); + if (pin == GPIO_INVALID) { + scheduleMsg(&logger, "invalid pin name [%s]", pinName); + return; + } + scheduleMsg(&logger, "Pin %s: [%s]", pinName, getPinFunction(pin)); +} + #endif /* EFI_PROD_CODE */ static void setTimingMap(const char * rpmStr, const char *loadStr, const char *valueStr) { @@ -921,6 +931,7 @@ void initSettings(engine_configuration_s *engineConfiguration) { addConsoleActionFF("set_fan", setFanSetting); #if EFI_PROD_CODE + addConsoleActionS("showpin", showPinFunction); addConsoleActionSS("set_injection_pin", setInjectionPin); addConsoleActionSS("set_ignition_pin", setIgnitionPin); addConsoleActionSS("set_trigger_input_pin", setTriggerInputPin); diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index ae87c10c11..dc9dcfe064 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -156,6 +156,19 @@ iomode_t getInputMode(pin_input_mode_e mode) { } } +static int getIndex(ioportid_t port, ioportmask_t pin) { + int portIndex = getPortIndex(port); + return portIndex * 16 + pin; +} + +const char * getPinFunction(brain_input_pin_e brainPin) { + ioportid_t port = getHwPort(brainPin); + ioportmask_t pin = getHwPin(brainPin); + + int index = getIndex(port, pin); + return PIN_USED[index]; +} + /** * This method would set an error condition if pin is already used */ @@ -172,8 +185,7 @@ void mySetPadMode(const char *msg, ioportid_t port, ioportmask_t pin, iomode_t m appendPrintf(&logger, " on %s%d%s", portname(port), pin, DELIMETER); printLine(&logger); - int portIndex = getPortIndex(port); - int index = portIndex * 16 + pin; + int index = getIndex(port, pin); if (PIN_USED[index] != NULL) { /** @@ -193,8 +205,7 @@ void unmarkPin(brain_pin_e brainPin) { ioportid_t port = getHwPort(brainPin); ioportmask_t pin = getHwPin(brainPin); - int portIndex = getPortIndex(port); - int index = portIndex * 16 + pin; + int index = getIndex(port, pin); if (PIN_USED[index] != NULL) { PIN_USED[index] = NULL; @@ -208,8 +219,7 @@ void unmarkPin(brain_pin_e brainPin) { void registedFundamentralIoPin(char *msg, ioportid_t port, ioportmask_t pin, iomode_t mode) { efiAssertVoid(initialized, "repo not initialized"); - int portIndex = getPortIndex(port); - int index = portIndex * 16 + pin; + int index = getIndex(port, pin); if (PIN_USED[index] != NULL) { print("!!!!!!!!!!!!! Already used [%s] %d\r\n", msg, pin); diff --git a/firmware/hw_layer/pin_repository.h b/firmware/hw_layer/pin_repository.h index 6917f78ffa..17920cfe79 100644 --- a/firmware/hw_layer/pin_repository.h +++ b/firmware/hw_layer/pin_repository.h @@ -30,6 +30,7 @@ void initPinRepository(void); const char *hwPortname(brain_pin_e brainPin); brain_pin_e parseBrainPin(const char *str); void mySetPadMode(const char *msg, ioportid_t port, ioportmask_t pin, iomode_t mode); +const char * getPinFunction(brain_input_pin_e brainPin); void mySetPadMode2(const char *msg, brain_pin_e pin, iomode_t mode); const char *portname(GPIO_TypeDef* GPIOx); iomode_t getInputMode(pin_input_mode_e mode);