diff --git a/firmware/controllers/algo/rusefi_hw_enums.h b/firmware/controllers/algo/rusefi_hw_enums.h index d50498f483..b5b1a165f2 100644 --- a/firmware/controllers/algo/rusefi_hw_enums.h +++ b/firmware/controllers/algo/rusefi_hw_enums.h @@ -234,7 +234,7 @@ typedef enum __attribute__ ((__packed__)) { TLE6240_PIN_16 = 214, } brain_pin_e; -/* Plase keep updating these defines */ +/* Please keep updating these defines */ #define BRAIN_PIN_ONCHIP_LAST GPIOI_15 #define BRAIN_PIN_ONCHIP_PINS (BRAIN_PIN_ONCHIP_LAST - GPIOA_0 + 1) #define BRAIN_PIN_LAST TLE8888_PIN_WAKE diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 9fe33d2234..1bf24bd10f 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -277,7 +277,7 @@ static void turnOnHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) { adcCallbackCounter = 0; #endif /* EFI_FASTER_UNIFORM_ADC */ -#if EFI_SHAFT_POSITION_INPUT +#if EFI_PROD_CODE && EFI_SHAFT_POSITION_INPUT turnOnTriggerInputPins(PASS_ENGINE_PARAMETER_SIGNATURE); #endif /* EFI_SHAFT_POSITION_INPUT */ } diff --git a/firmware/hw_layer/io_pins.cpp b/firmware/hw_layer/io_pins.cpp index 7b75b061b2..d77b5e64d2 100644 --- a/firmware/hw_layer/io_pins.cpp +++ b/firmware/hw_layer/io_pins.cpp @@ -11,19 +11,47 @@ #include "io_pins.h" #include "efi_gpio.h" #include "engine.h" - -EXTERN_ENGINE; +#include "pin_repository.h" #if EFI_PROD_CODE - #include "os_access.h" #include "drivers/gpio/gpio_ext.h" -#include "pin_repository.h" #include "status_loop.h" -#include "engine_configuration.h" #include "console_io.h" +#endif /* EFI_PROD_CODE */ +EXTERN_ENGINE; + + +void efiSetPadUnused(brain_pin_e brainPin) { +#if EFI_PROD_CODE + /* input with pull up, is it safe? */ + iomode_t mode = PAL_STM32_MODE_INPUT | PAL_STM32_PUPDR_PULLUP; + + if (brain_pin_is_onchip(brainPin)) { + ioportid_t port = getHwPort("unused", brainPin); + ioportmask_t pin = getHwPin("unused", brainPin); + + /* input with pull up, is it safe? + * todo: shall we reuse 'default state' constants with board.h? + * */ + palSetPadMode(port, pin, mode); + palWritePad(port, pin, 0); + } + #if (BOARD_EXT_GPIOCHIPS > 0) + else { + gpiochips_setPadMode(brainPin, mode); + } + #endif +#endif /* EFI_PROD_CODE */ + + brain_pin_markUnused(brainPin); +} + + + +#if EFI_PROD_CODE #if EFI_ENGINE_CONTROL #include "main_trigger_callback.h" @@ -81,30 +109,6 @@ void efiSetPadMode(const char *msg, brain_pin_e brainPin, iomode_t mode) } } -void efiSetPadUnused(brain_pin_e brainPin) -{ - /* input with pull up, is it safe? */ - iomode_t mode = PAL_STM32_MODE_INPUT | PAL_STM32_PUPDR_PULLUP; - - if (brain_pin_is_onchip(brainPin)) { - ioportid_t port = getHwPort("unused", brainPin); - ioportmask_t pin = getHwPin("unused", brainPin); - - /* input with pull up, is it safe? - * todo: shall we reuse 'default state' constants with board.h? - * */ - palSetPadMode(port, pin, mode); - palWritePad(port, pin, 0); - } - #if (BOARD_EXT_GPIOCHIPS > 0) - else { - gpiochips_setPadMode(brainPin, mode); - } - #endif - - brain_pin_markUnused(brainPin); -} - iomode_t getInputMode(pin_input_mode_e mode) { switch (mode) { case PI_PULLUP: diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index 15723b3463..c48a253558 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -9,7 +9,26 @@ * @author Andrey Belomutskiy, (c) 2012-2020 */ -#include "global.h" +#include "pin_repository.h" + +static PinRepository pinRepository; + +// todo: move this into PinRepository class +static const char *PIN_USED[BRAIN_PIN_TOTAL_PINS]; + +unsigned int getBrainPinTotalNum(void) { + return BRAIN_PIN_TOTAL_PINS; +} + +void initBrainUsedPins(void) { + memset(PIN_USED, 0, sizeof(PIN_USED)); +} + +const char* & getBrainUsedPin(unsigned int idx) { + /*if (idx >= getBrainPinTotalNum()) + return NULL;*/ + return PIN_USED[idx]; +} /* Common for firmware and unit tests */ bool isBrainPinValid(brain_pin_e brainPin) @@ -24,19 +43,6 @@ bool isBrainPinValid(brain_pin_e brainPin) return true; } -#if EFI_PROD_CODE -#include "os_access.h" -#include "pin_repository.h" -#include "eficonsole.h" -#include "memstreams.h" -#include "drivers/gpio/gpio_ext.h" -#include "smart_gpio.h" -#include "hardware.h" - -EXTERN_CONFIG; - -static PinRepository pinRepository; - static int brainPin_to_index(brain_pin_e brainPin) { unsigned int i; @@ -52,6 +58,45 @@ static int brainPin_to_index(brain_pin_e brainPin) return i; } +/** + * See also brain_pin_markUsed() + */ + +void brain_pin_markUnused(brain_pin_e brainPin) { +#if EFI_PROD_CODE + int index = brainPin_to_index(brainPin); + if (index < 0) + return; + + if (getBrainUsedPin(index) != nullptr) + pinRepository.totalPinsUsed--; + getBrainUsedPin(index) = nullptr; +#endif /* EFI_PROD_CODE */ +} + +#if EFI_PROD_CODE +#include "memstreams.h" +static MemoryStream portNameStream; +static char portNameBuffer[20]; +#endif /* EFI_PROD_CODE */ + +PinRepository::PinRepository() { +#if EFI_PROD_CODE + msObjectInit(&portNameStream, (uint8_t*) portNameBuffer, sizeof(portNameBuffer), 0); +#endif /* EFI_PROD_CODE */ + + initBrainUsedPins(); +} + +#if EFI_PROD_CODE +#include "os_access.h" +#include "eficonsole.h" +#include "drivers/gpio/gpio_ext.h" +#include "smart_gpio.h" +#include "hardware.h" + +EXTERN_CONFIG; + static brain_pin_e index_to_brainPin(unsigned int i) { if (i < getBrainPinTotalNum()) @@ -60,15 +105,6 @@ static brain_pin_e index_to_brainPin(unsigned int i) return GPIO_INVALID; } -static MemoryStream portNameStream; -static char portNameBuffer[20]; - -PinRepository::PinRepository() { - msObjectInit(&portNameStream, (uint8_t*) portNameBuffer, sizeof(portNameBuffer), 0); - - initBrainUsedPins(); -} - static void reportPins(void) { for (unsigned int i = 0; i < getBrainPinOnchipNum(); i++) { const char *pin_user = getBrainUsedPin(i); @@ -230,20 +266,6 @@ bool brain_pin_markUsed(brain_pin_e brainPin, const char *msg) { return false; } -/** - * See also brain_pin_markUsed() - */ - -void brain_pin_markUnused(brain_pin_e brainPin) { - int index = brainPin_to_index(brainPin); - if (index < 0) - return; - - if (getBrainUsedPin(index) != NULL) - pinRepository.totalPinsUsed--; - getBrainUsedPin(index) = nullptr; -} - /** * Marks on-chip gpio port-pin as used. Works only for on-chip gpios * To be replaced with brain_pin_markUsed later diff --git a/firmware/hw_layer/ports/cypress/cypress_pins.cpp b/firmware/hw_layer/ports/cypress/cypress_pins.cpp index b503d60d38..b2e81058e1 100644 --- a/firmware/hw_layer/ports/cypress/cypress_pins.cpp +++ b/firmware/hw_layer/ports/cypress/cypress_pins.cpp @@ -33,9 +33,6 @@ static brain_pin_e portMap[16] = { GPIOA_0, GPIOB_0, GPIOC_0, GPIOD_0, GPIOE_0, GPIOF_0, GPIO_INVALID, GPIOG_0, GPIO_INVALID, GPIO_INVALID, GPIOH_0, GPIOI_0, GPIOJ_0, GPIO_INVALID, GPIO_INVALID, GPIOK_0 }; -// todo: move this into PinRepository class -static const char *PIN_USED[BRAIN_PIN_TOTAL_PINS]; - #include "pin_repository.h" #include "io_pins.h" @@ -166,18 +163,4 @@ unsigned int getBrainPinOnchipNum(void) { return BRAIN_PIN_ONCHIP_PINS; } -unsigned int getBrainPinTotalNum(void) { - return BRAIN_PIN_TOTAL_PINS; -} - -void initBrainUsedPins(void) { - memset(PIN_USED, 0, sizeof(PIN_USED)); -} - -const char* & getBrainUsedPin(unsigned int idx) { - /*if (idx >= getBrainPinTotalNum()) - return NULL;*/ - return PIN_USED[idx]; -} - #endif /* EFI_GPIO_HARDWARE */ diff --git a/firmware/hw_layer/ports/kinetis/kinetis_pins.cpp b/firmware/hw_layer/ports/kinetis/kinetis_pins.cpp index ee2838d7b9..b1af826421 100644 --- a/firmware/hw_layer/ports/kinetis/kinetis_pins.cpp +++ b/firmware/hw_layer/ports/kinetis/kinetis_pins.cpp @@ -13,9 +13,6 @@ #if EFI_GPIO_HARDWARE -// todo: move this into PinRepository class -static const char *PIN_USED[BRAIN_PIN_TOTAL_PINS]; - // This is the radical departure from STM32 #define PORT_SIZE 18 @@ -128,18 +125,4 @@ unsigned int getBrainPinOnchipNum(void) { return BRAIN_PIN_ONCHIP_PINS; } -unsigned int getBrainPinTotalNum(void) { - return BRAIN_PIN_TOTAL_PINS; -} - -void initBrainUsedPins(void) { - memset(PIN_USED, 0, sizeof(PIN_USED)); -} - -const char* & getBrainUsedPin(unsigned int idx) { - /* if (idx >= getBrainPinTotalNum()) - return NULL; */ - return PIN_USED[idx]; -} - #endif /* EFI_GPIO_HARDWARE */ diff --git a/firmware/hw_layer/ports/stm32/stm32_pins.cpp b/firmware/hw_layer/ports/stm32/stm32_pins.cpp index 3300381ff3..d140a60a14 100644 --- a/firmware/hw_layer/ports/stm32/stm32_pins.cpp +++ b/firmware/hw_layer/ports/stm32/stm32_pins.cpp @@ -15,9 +15,6 @@ #if EFI_GPIO_HARDWARE -// todo: move this into PinRepository class -static const char *PIN_USED[BRAIN_PIN_TOTAL_PINS]; - #define PORT_SIZE 16 static ioportid_t ports[] = {GPIOA, @@ -217,18 +214,4 @@ unsigned int getBrainPinOnchipNum(void) { return BRAIN_PIN_ONCHIP_PINS; } -unsigned int getBrainPinTotalNum(void) { - return BRAIN_PIN_TOTAL_PINS; -} - -void initBrainUsedPins(void) { - memset(PIN_USED, 0, sizeof(PIN_USED)); -} - -const char* & getBrainUsedPin(unsigned int idx) { - /* if (idx >= getBrainPinTotalNum()) - return NULL; */ - return PIN_USED[idx]; -} - #endif /* EFI_GPIO_HARDWARE */