diff --git a/firmware/config/engines/dodge_neon.cpp b/firmware/config/engines/dodge_neon.cpp index fe5bd1ab62..21f65957a0 100644 --- a/firmware/config/engines/dodge_neon.cpp +++ b/firmware/config/engines/dodge_neon.cpp @@ -372,6 +372,11 @@ void setDodgeNeonNGCEngineConfiguration(engine_configuration_s *engineConfigurat boardConfiguration->tunerStudioSerialSpeed = 9600; engineConfiguration->algorithm = LM_SPEED_DENSITY; + engineConfiguration->isJoystickEnabled = true; + boardConfiguration->joystickCenterPin = GPIOD_10; + boardConfiguration->joystickCenterA = GPIOD_8; + boardConfiguration->joystickCenterC = GPIOD_9; + // engineConfiguration->isCanEnabled = true; boardConfiguration->canTxPin = GPIOB_6; boardConfiguration->canRxPin = GPIOB_12; diff --git a/firmware/controllers/algo/engine_configuration.h b/firmware/controllers/algo/engine_configuration.h index 5bd85b4a16..a43748b1ad 100644 --- a/firmware/controllers/algo/engine_configuration.h +++ b/firmware/controllers/algo/engine_configuration.h @@ -260,7 +260,12 @@ typedef struct { brain_pin_e spi3sckPin; float hip9011Gain; - int unusedbs[12]; + brain_pin_e joystickCenterPin; + brain_pin_e joystickCenterA; + brain_pin_e joystickCenterB; + brain_pin_e joystickCenterC; + brain_pin_e joystickCenterD; + int unusedbs[7]; le_formula_t le_formulas[LE_COMMAND_COUNT]; @@ -515,6 +520,7 @@ typedef struct { bool_t canReadEnabled : 1; // bit 7 bool_t canWriteEnabled : 1; // bit 8 bool_t hasVehicleSpeedSensor : 1; // bit 9 + bool_t isJoystickEnabled : 1; // bit 10 int unused6284; diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index 001dba22d7..a38a401c67 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -41,7 +41,8 @@ #include "engine_configuration.h" #include "ec2.h" -EXTERN_ENGINE; +EXTERN_ENGINE +; extern bool hasFirmwareErrorFlag; static StepperMotor iacMotor; @@ -53,14 +54,16 @@ int maxNesting = 0; #if HAL_USE_SPI || defined(__DOXYGEN__) static bool isSpiInitialized[5] = { false, false, false, false, false }; -static void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, +static void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, brain_pin_e mosi, int af) { + mySetPadMode("SPI clock", getHwPort(sck), getHwPin(sck), + PAL_MODE_ALTERNATE(af)); - mySetPadMode("SPI clock", getHwPort(sck), getHwPin(sck), PAL_MODE_ALTERNATE(af)); - - mySetPadMode("SPI master out", getHwPort(mosi), getHwPin(mosi), PAL_MODE_ALTERNATE(af)); - mySetPadMode("SPI master in ", getHwPort(miso), getHwPin(miso), PAL_MODE_ALTERNATE(af)); + mySetPadMode("SPI master out", getHwPort(mosi), getHwPin(mosi), + PAL_MODE_ALTERNATE(af)); + mySetPadMode("SPI master in ", getHwPort(miso), getHwPin(miso), + PAL_MODE_ALTERNATE(af)); } /** @@ -82,31 +85,28 @@ void turnOnSpi(spi_device_e device) { if (device == SPI_DEVICE_1) { #if STM32_SPI_USE_SPI1 // scheduleMsg(&logging, "Turning on SPI1 pins"); - initSpiModule(&SPID1, - boardConfiguration->spi1sckPin, + initSpiModule(&SPID1, boardConfiguration->spi1sckPin, boardConfiguration->spi1misoPin, - boardConfiguration->spi1mosiPin, - EFI_SPI1_AF); + boardConfiguration->spi1mosiPin, + EFI_SPI1_AF); #endif } if (device == SPI_DEVICE_2) { #if STM32_SPI_USE_SPI2 // scheduleMsg(&logging, "Turning on SPI2 pins"); - initSpiModule(&SPID2, - boardConfiguration->spi2sckPin, + initSpiModule(&SPID2, boardConfiguration->spi2sckPin, boardConfiguration->spi2misoPin, - boardConfiguration->spi2mosiPin, + boardConfiguration->spi2mosiPin, EFI_SPI2_AF); #endif } if (device == SPI_DEVICE_3) { #if STM32_SPI_USE_SPI3 // scheduleMsg(&logging, "Turning on SPI3 pins"); - initSpiModule(&SPID3, - boardConfiguration->spi3sckPin, + initSpiModule(&SPID3, boardConfiguration->spi3sckPin, boardConfiguration->spi3misoPin, - boardConfiguration->spi3mosiPin, - EFI_SPI3_AF); + boardConfiguration->spi3mosiPin, + EFI_SPI3_AF); #endif } } @@ -178,19 +178,21 @@ static void sendI2Cbyte(int addr, int data) { #endif - // this is all very lame code, just playing with EXTI for now. TODO: refactor it competely! static int joyTotal = 0; static int joyA = 0; static int joyB = 0; static int joyC = 0; -void initHardware(Logging *logger, Engine *engine) { +static Logging *sharedLogger; + +void initHardware(Logging *l, Engine *engine) { + sharedLogger = l; engine_configuration_s *engineConfiguration = engine->engineConfiguration; efiAssertVoid(engineConfiguration!=NULL, "engineConfiguration"); board_configuration_s *boardConfiguration = &engineConfiguration->bc; - printMsg(logger, "initHardware()"); + printMsg(sharedLogger, "initHardware()"); // todo: enable protection. it's disabled because it takes // 10 extra seconds to re-flash the chip //flashProtect(); @@ -224,7 +226,8 @@ void initHardware(Logging *logger, Engine *engine) { #if EFI_INTERNAL_FLASH - palSetPadMode(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN, PAL_MODE_INPUT_PULLUP); + palSetPadMode(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN, + PAL_MODE_INPUT_PULLUP); initFlash(engine); /** @@ -233,7 +236,8 @@ void initHardware(Logging *logger, Engine *engine) { */ if (SHOULD_INGORE_FLASH()) { engineConfiguration->engineType = FORD_ASPIRE_1996; - resetConfigurationExt(logger, engineConfiguration->engineType, engine); + resetConfigurationExt(sharedLogger, engineConfiguration->engineType, + engine); writeToFlash(); } else { readFromFlash(); @@ -247,7 +251,8 @@ void initHardware(Logging *logger, Engine *engine) { return; } - mySetPadMode2("board test", boardConfiguration->boardTestModeJumperPin, PAL_MODE_INPUT_PULLUP); + mySetPadMode2("board test", boardConfiguration->boardTestModeJumperPin, + PAL_MODE_INPUT_PULLUP); bool isBoardTestMode_b = GET_BOARD_TEST_MODE_VALUE(); #if HAL_USE_ADC || defined(__DOXYGEN__) @@ -264,10 +269,10 @@ void initHardware(Logging *logger, Engine *engine) { initOutputPins(); #if EFI_MAX_31855 - initMax31855(getSpiDevice(boardConfiguration->max31855spiDevice), boardConfiguration->max31855_cs); + initMax31855(getSpiDevice(boardConfiguration->max31855spiDevice), + boardConfiguration->max31855_cs); #endif /* EFI_MAX_31855 */ - // iacMotor.initialize(GPIOD_11, GPIOD_10); #if EFI_CAN_SUPPORT @@ -292,7 +297,6 @@ void initHardware(Logging *logger, Engine *engine) { initHip9011(); #endif /* EFI_HIP_9011 */ - #if EFI_FILE_LOGGING initMmcCard(); #endif /* EFI_FILE_LOGGING */ @@ -334,12 +338,11 @@ void initHardware(Logging *logger, Engine *engine) { // } // } - initVehicleSpeed(logger); + initVehicleSpeed(sharedLogger); - printMsg(logger, "initHardware() OK!"); + printMsg(sharedLogger, "initHardware() OK!"); } - #if HAL_USE_EXT || defined(__DOXYGEN__) // {EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOA, extcb1}, @@ -355,6 +358,11 @@ static void extCallback(EXTDriver *extp, expchannel_t channel) { } } +static void joystickInfo(void) { + scheduleMsg(sharedLogger, "total %d a %d b %d c %d", joyTotal, joyA, joyB, + joyC); +} + /** * EXTI is a funny thing: you can only use same pin on one port. For example, you can use * PA0 PB5 PE2 PD7 @@ -363,34 +371,53 @@ static void extCallback(EXTDriver *extp, expchannel_t channel) { * because pin '0' would be used on two different ports */ -static EXTConfig extcfg = { { { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, - NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { - EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { - EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { - EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { - EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { - EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL }, { - EXT_CH_MODE_DISABLED, NULL }, { EXT_CH_MODE_DISABLED, NULL } } }; +static EXTConfig extcfg = { { +/* CH#00 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#01 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#02 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#03 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#04 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#05 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#06 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#07 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#08 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#09 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#10 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#11 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#12 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#13 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#14 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#15 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#16 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#17 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#18 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#19 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#20 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#21 */{ EXT_CH_MODE_DISABLED, NULL }, +/* CH#22 */{ EXT_CH_MODE_DISABLED, NULL } } }; void initExt(void) { + if (!engineConfiguration->isJoystickEnabled) + return; -// if (1 == 1) { -// return; -// } - - extcfg.channels[8].mode = EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOD; // PD8 + extcfg.channels[8].mode = EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART + | EXT_MODE_GPIOC; // PC8 extcfg.channels[8].cb = extCallback; - extcfg.channels[9].mode = EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOD; // PD9 - extcfg.channels[9].cb = extCallback; - extcfg.channels[10].mode = EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOD; // PD10 + + extcfg.channels[10].mode = EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART + | EXT_MODE_GPIOD; // PD10 extcfg.channels[10].cb = extCallback; - extcfg.channels[11].mode = EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOD; // PD11 + + extcfg.channels[11].mode = EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART + | EXT_MODE_GPIOD; // PD11 extcfg.channels[11].cb = extCallback; - mySetPadMode("joy A", GPIOD, 8, PAL_MODE_INPUT_PULLUP); - mySetPadMode("joy A", GPIOD, 9, PAL_MODE_INPUT_PULLUP); - mySetPadMode("joy A", GPIOD, 10, PAL_MODE_INPUT_PULLUP); - mySetPadMode("joy A", GPIOD, 11, PAL_MODE_INPUT_PULLUP); + mySetPadMode("joy center", GPIOD, 10, PAL_MODE_INPUT_PULLUP); + mySetPadMode("joy B", GPIOC, 8, PAL_MODE_INPUT_PULLUP); + mySetPadMode("joy D", GPIOD, 11, PAL_MODE_INPUT_PULLUP); + + extStart(&EXTD1, &extcfg); + } #endif