diff --git a/firmware/ChibiOS-Contrib b/firmware/ChibiOS-Contrib index fbd6f482af..e7cdad3d1a 160000 --- a/firmware/ChibiOS-Contrib +++ b/firmware/ChibiOS-Contrib @@ -1 +1 @@ -Subproject commit fbd6f482af0c3764f55749e29722372b2b2e3b36 +Subproject commit e7cdad3d1a041caea83729fd2c709fd963fb40b0 diff --git a/firmware/config/boards/hellen/cypress/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/hellen/cypress/config/controllers/algo/engine_configuration_generated_structures.h index 547dbef2a7..86de677bf5 100644 --- a/firmware/config/boards/hellen/cypress/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/hellen/cypress/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Thu Feb 25 02:57:29 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Sun Feb 28 23:58:13 UTC 2021 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3864,4 +3864,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Thu Feb 25 02:57:29 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Sun Feb 28 23:58:13 UTC 2021 diff --git a/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h index 741922cd61..09360b4662 100644 --- a/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h @@ -1242,7 +1242,7 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD hellen_cypress -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 1039053165 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 @@ -1577,7 +1577,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2021.02.25.hellen_cypress.1039053165" +#define TS_SIGNATURE "rusEFI 2021.02.28.hellen_cypress.1039053165" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/config/boards/hellen/cypress/efifeatures.h b/firmware/config/boards/hellen/cypress/efifeatures.h index 7f16012d2a..b7cf79a88a 100644 --- a/firmware/config/boards/hellen/cypress/efifeatures.h +++ b/firmware/config/boards/hellen/cypress/efifeatures.h @@ -163,6 +163,7 @@ #endif #define EFI_INTERNAL_ADC TRUE +#define EFI_USE_FAST_ADC TRUE #define EFI_NARROW_EGO_AVERAGING FALSE diff --git a/firmware/config/boards/hellen/hellen72/board_configuration.cpp b/firmware/config/boards/hellen/hellen72/board_configuration.cpp index 0ff062fa33..f6c33f9fc1 100644 --- a/firmware/config/boards/hellen/hellen72/board_configuration.cpp +++ b/firmware/config/boards/hellen/hellen72/board_configuration.cpp @@ -169,9 +169,6 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->injectionMode = IM_SIMULTANEOUS;//IM_BATCH;// IM_SEQUENTIAL; } -void setAdcChannelOverrides(void) { -} - /** * @brief Board-specific SD card configuration code overrides. Needed by bootloader code. * @todo Add your board-specific code, if any. diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 9e879365f8..323c1e57ee 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Thu Feb 25 02:57:25 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Feb 28 23:58:11 UTC 2021 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3859,4 +3859,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Thu Feb 25 02:57:25 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Feb 28 23:58:11 UTC 2021 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 61ef365fee..18150bb1a1 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1226,7 +1226,7 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 3259727249 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 @@ -1561,7 +1561,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2021.02.25.kin.3259727249" +#define TS_SIGNATURE "rusEFI 2021.02.28.kin.3259727249" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/config/boards/kinetis/efifeatures.h b/firmware/config/boards/kinetis/efifeatures.h index 958f117c0f..f1844dc99c 100644 --- a/firmware/config/boards/kinetis/efifeatures.h +++ b/firmware/config/boards/kinetis/efifeatures.h @@ -144,6 +144,8 @@ #define EFI_INTERNAL_ADC TRUE #endif +#define EFI_USE_FAST_ADC TRUE + #define EFI_NARROW_EGO_AVERAGING FALSE #ifndef EFI_CAN_SUPPORT diff --git a/firmware/config/boards/me7_pnp/board_configuration.cpp b/firmware/config/boards/me7_pnp/board_configuration.cpp index 4b9b738417..4bfe834c47 100644 --- a/firmware/config/boards/me7_pnp/board_configuration.cpp +++ b/firmware/config/boards/me7_pnp/board_configuration.cpp @@ -77,7 +77,3 @@ void setBoardConfigurationOverrides(void) { void setSdCardConfigurationOverrides(void) { } - -void setAdcChannelOverrides(void) { -} - diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 77b74f4910..0b5c242298 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -248,9 +248,6 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->injectionMode = IM_SIMULTANEOUS;//IM_BATCH;// IM_SEQUENTIAL; } -void setAdcChannelOverrides(void) { -} - /** * @brief Board-specific SD card configuration code overrides. Needed by bootloader code. * @todo Add your board-specific code, if any. diff --git a/firmware/config/boards/nucleo_f767/board_configuration.cpp b/firmware/config/boards/nucleo_f767/board_configuration.cpp index 73984a4b8f..f9a539bd8c 100644 --- a/firmware/config/boards/nucleo_f767/board_configuration.cpp +++ b/firmware/config/boards/nucleo_f767/board_configuration.cpp @@ -78,6 +78,3 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->is_enabled_spi_2 = false; engineConfiguration->is_enabled_spi_3 = false; } - -void setAdcChannelOverrides(void) { -} diff --git a/firmware/config/boards/nucleo_h743/board_configuration.cpp b/firmware/config/boards/nucleo_h743/board_configuration.cpp index 297c4c24a7..ef74afc02f 100644 --- a/firmware/config/boards/nucleo_h743/board_configuration.cpp +++ b/firmware/config/boards/nucleo_h743/board_configuration.cpp @@ -27,19 +27,3 @@ void setSerialConfigurationOverrides(void) { */ void setSdCardConfigurationOverrides(void) { } - -/** - * @brief Board-specific ADC channel configuration code overrides. - * @todo Add your board-specific code, if any. - */ -void setAdcChannelOverrides(void) { -} - -// TODO: fix analog inputs so we don't need these stubs -float getVoltage(const char*, adc_channel_e) { - return 0; -} - -float getVoltageDivided(const char*, adc_channel_e) { - return 0; -} diff --git a/firmware/config/boards/prometheus/board_extra.c b/firmware/config/boards/prometheus/board_extra.c index b1c5e4c492..029f816520 100644 --- a/firmware/config/boards/prometheus/board_extra.c +++ b/firmware/config/boards/prometheus/board_extra.c @@ -1,14 +1,6 @@ #include "hal.h" #include "stm32_gpio.h" -/** - * @brief Board-specific ADC channel configuration code overrides. - * @todo Add your board-specific code, if any. - */ -void setAdcChannelOverrides(void) { -} - - #define PROMETHEUS_LED 13 // BLIIINK!!!!!!!!!! diff --git a/firmware/config/boards/prometheus/efifeatures.h b/firmware/config/boards/prometheus/efifeatures.h index 5b6024734a..86b3d1a0b1 100644 --- a/firmware/config/boards/prometheus/efifeatures.h +++ b/firmware/config/boards/prometheus/efifeatures.h @@ -32,9 +32,6 @@ #undef EFI_USB_SERIAL #define EFI_USB_SERIAL FALSE -#undef MMC_CARD_SPI -#define MMC_CARD_SPI SPID1 - #define ADC_CHANNEL_VREF ADC_CHANNEL_IN14 #undef PRIMARY_UART_DMA_MODE diff --git a/firmware/config/boards/proteus/adc_hack.cpp b/firmware/config/boards/proteus/adc_hack.cpp index 35162ad18c..2098ef38de 100644 --- a/firmware/config/boards/proteus/adc_hack.cpp +++ b/firmware/config/boards/proteus/adc_hack.cpp @@ -14,6 +14,8 @@ #include "efilib.h" +#if USE_ADC3_VBATT_HACK + static ADCConversionGroup adcConvGroup = { FALSE, 1, nullptr, nullptr, 0, ADC_CR2_SWSTART, @@ -51,3 +53,5 @@ void proteusAdcHack() vbattSampleProteus = sum / efi::size(samples); } + +#endif /* USE_ADC3_VBATT_HACK */ diff --git a/firmware/config/boards/proteus/board.mk b/firmware/config/boards/proteus/board.mk index 0aba58bf19..22af4d908d 100644 --- a/firmware/config/boards/proteus/board.mk +++ b/firmware/config/boards/proteus/board.mk @@ -1,11 +1,11 @@ # List of all the board related files. BOARDCPPSRC = $(PROJECT_DIR)/config/boards/proteus/board_configuration.cpp \ $(PROJECT_DIR)/config/boards/proteus/adc_hack.cpp + BOARDINC = $(PROJECT_DIR)/config/boards/proteus # Target processor details -ifeq ($(PROJECT_CPU),ARCH_STM32F4) -else +ifeq ($(PROJECT_CPU),ARCH_STM32F7) PROTEUS_LEGACY = TRUE endif @@ -17,8 +17,13 @@ DDEFS += -DEFI_ICU_INPUTS=FALSE -DHAL_TRIGGER_USE_PAL=TRUE DDEFS += -DEFI_LOGIC_ANALYZER=FALSE # todo: refactor HAL_VSS_USE_PAL DDEFS += -DHAL_VSS_USE_PAL=TRUE -DDEFS += -DSTM32_ADC_USE_ADC3=TRUE -DDEFS += -DEFI_SOFTWARE_KNOCK=TRUE + +# This stuff doesn't work on H7 yet +ifneq ($(PROJECT_CPU),ARCH_STM32H7) + DDEFS += -DSTM32_ADC_USE_ADC3=TRUE + DDEFS += -DEFI_SOFTWARE_KNOCK=TRUE +endif + DDEFS += -DEFI_CONSOLE_TX_BRAIN_PIN=GPIO_UNASSIGNED -DEFI_CONSOLE_RX_BRAIN_PIN=GPIO_UNASSIGNED # We are running on Proteus hardware! diff --git a/firmware/config/boards/skeleton/board_configuration.cpp b/firmware/config/boards/skeleton/board_configuration.cpp index 50ff2cb7c0..c3af186f0b 100644 --- a/firmware/config/boards/skeleton/board_configuration.cpp +++ b/firmware/config/boards/skeleton/board_configuration.cpp @@ -226,9 +226,6 @@ void setBoardConfigurationOverrides(void) { engineConfiguration->injectionMode = IM_SIMULTANEOUS; } -void setAdcChannelOverrides(void) { -} - /* * Local variables: * c-basic-indent: 4 diff --git a/firmware/config/boards/st_stm32f4/board_extra.c b/firmware/config/boards/st_stm32f4/board_extra.c index 33b440b302..7ba32f2dcb 100644 --- a/firmware/config/boards/st_stm32f4/board_extra.c +++ b/firmware/config/boards/st_stm32f4/board_extra.c @@ -31,10 +31,3 @@ void setSerialConfigurationOverrides(void) { */ void setSdCardConfigurationOverrides(void) { } - -/** - * @brief Board-specific ADC channel configuration code overrides. - * @todo Add your board-specific code, if any. - */ -void setAdcChannelOverrides(void) { -} diff --git a/firmware/config/boards/subaru_eg33/board.c b/firmware/config/boards/subaru_eg33/board.c index 4a648bdd94..8996f783a8 100644 --- a/firmware/config/boards/subaru_eg33/board.c +++ b/firmware/config/boards/subaru_eg33/board.c @@ -180,13 +180,6 @@ bool mmc_lld_is_write_protected(MMCDriver *mmcp) } #endif -/** - * @brief Board-specific ADC channel configuration code overrides. - * @todo Add your board-specific code, if any. - */ -void setAdcChannelOverrides(void) { -} - #define STATUS_LED_PIN 8 #define STATUS_LED_PORT GPIOG diff --git a/firmware/config/boards/subaru_eg33/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/subaru_eg33/config/controllers/algo/engine_configuration_generated_structures.h index 932fc5d8e6..09882c1f2b 100644 --- a/firmware/config/boards/subaru_eg33/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/subaru_eg33/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:30 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:58:15 UTC 2021 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3864,4 +3864,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:30 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:58:15 UTC 2021 diff --git a/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h index 4bdc2db2e6..eb52a77b69 100644 --- a/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h @@ -1242,7 +1242,7 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD subaru_eg33_f7 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 3175160971 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 @@ -1577,7 +1577,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port false -#define TS_SIGNATURE "rusEFI 2021.02.25.subaru_eg33_f7.3175160971" +#define TS_SIGNATURE "rusEFI 2021.02.28.subaru_eg33_f7.3175160971" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/config/boards/subaru_eg33/efifeatures.h b/firmware/config/boards/subaru_eg33/efifeatures.h index 54caadde50..3d89b09b46 100644 --- a/firmware/config/boards/subaru_eg33/efifeatures.h +++ b/firmware/config/boards/subaru_eg33/efifeatures.h @@ -33,6 +33,10 @@ /* do not use serial device for console */ #undef TS_SERIAL_DEVICE +/* Knock detection */ +#undef EFI_HIP_9011 +#define EFI_HIP_9011 TRUE + #undef BOARD_TLE6240_COUNT #define BOARD_TLE6240_COUNT 1 @@ -84,8 +88,7 @@ #undef EFI_FUEL_PUMP #define EFI_FUEL_PUMP TRUE -#undef MMC_CARD_SPI -#define MMC_CARD_SPI SPID1 +#define EFI_SDC_DEVICE SDCD2 #define ADC_CHANNEL_VREF ADC_CHANNEL_IN14 diff --git a/firmware/config/stm32f4ems/efifeatures.h b/firmware/config/stm32f4ems/efifeatures.h index 570439b2e5..fa26a70407 100644 --- a/firmware/config/stm32f4ems/efifeatures.h +++ b/firmware/config/stm32f4ems/efifeatures.h @@ -193,6 +193,8 @@ #define EFI_INTERNAL_ADC TRUE #endif +#define EFI_USE_FAST_ADC TRUE + #define EFI_NARROW_EGO_AVERAGING TRUE #ifndef EFI_CAN_SUPPORT diff --git a/firmware/config/stm32h7ems/efifeatures.h b/firmware/config/stm32h7ems/efifeatures.h index 58fd2c64f9..264d69813a 100644 --- a/firmware/config/stm32h7ems/efifeatures.h +++ b/firmware/config/stm32h7ems/efifeatures.h @@ -2,8 +2,8 @@ #pragma once -#undef EFI_INTERNAL_FLASH -#define EFI_INTERNAL_FLASH FALSE +#undef EFI_USE_FAST_ADC +#define EFI_USE_FAST_ADC FALSE #undef EFI_MC33816 #define EFI_MC33816 FALSE diff --git a/firmware/console/binary/bluetooth.cpp b/firmware/console/binary/bluetooth.cpp index cd1b7344e1..94ac7807d3 100644 --- a/firmware/console/binary/bluetooth.cpp +++ b/firmware/console/binary/bluetooth.cpp @@ -18,6 +18,7 @@ #include "tunerstudio_io.h" #include "bluetooth.h" #include "engine_configuration.h" +#include "thread_priority.h" #if EFI_BLUETOOTH_SETUP @@ -289,7 +290,7 @@ void bluetoothStart(ts_channel_s *btChan, bluetooth_module_e moduleType, const c commands[numCommands++] = cmdPin; // create a thread to execute these commands later - btThread = chThdCreateStatic(btThreadStack, sizeof(btThreadStack), NORMALPRIO, (tfunc_t)btThreadEntryPoint, NULL); + btThread = chThdCreateStatic(btThreadStack, sizeof(btThreadStack), PRIO_CONSOLE, (tfunc_t)btThreadEntryPoint, NULL); btProcessIsStarted = true; } diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index 96c3dfa59f..96bf14bd8a 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -87,6 +87,7 @@ #include "status_loop.h" #include "mmc_card.h" #include "perf_trace.h" +#include "thread_priority.h" #include "signature.h" @@ -907,7 +908,7 @@ void startTunerStudioConnectivity(void) { addConsoleAction("bluetooth_cancel", bluetoothCancel); #endif /* EFI_BLUETOOTH_SETUP */ - chThdCreateStatic(tunerstudioThreadStack, sizeof(tunerstudioThreadStack), NORMALPRIO, (tfunc_t)tsThreadEntryPoint, NULL); + chThdCreateStatic(tunerstudioThreadStack, sizeof(tunerstudioThreadStack), PRIO_CONSOLE, (tfunc_t)tsThreadEntryPoint, NULL); } #endif diff --git a/firmware/console/console_io.cpp b/firmware/console/console_io.cpp index 54af95c5a0..8b577e9fa7 100644 --- a/firmware/console/console_io.cpp +++ b/firmware/console/console_io.cpp @@ -39,6 +39,7 @@ #include "os_util.h" #include "tunerstudio.h" #include "connector_uart_dma.h" +#include "thread_priority.h" #if EFI_SIMULATOR #include "rusEfiFunctionalTest.h" @@ -265,6 +266,6 @@ void startConsole(Logging *sharedLogger, CommandHandler console_line_callback_p) #endif /* EFI_CONSOLE_SERIAL_DEVICE || EFI_CONSOLE_UART_DEVICE */ #if !defined(EFI_CONSOLE_NO_THREAD) - chThdCreateStatic(consoleThreadStack, sizeof(consoleThreadStack), NORMALPRIO, (tfunc_t)consoleThreadEntryPoint, NULL); + chThdCreateStatic(consoleThreadStack, sizeof(consoleThreadStack), PRIO_CONSOLE, (tfunc_t)consoleThreadEntryPoint, NULL); #endif /* EFI_CONSOLE_NO_THREAD */ } diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 65fb713a87..596fb8f3fd 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -83,6 +83,7 @@ #include "dc_motor.h" #include "dc_motors.h" #include "pid_auto_tune.h" +#include "thread_priority.h" #if defined(HAS_OS_ACCESS) #error "Unexpected OS ACCESS HERE" @@ -651,7 +652,7 @@ struct EtbImpl final : public EtbController { static EtbImpl etbControllers[ETB_COUNT]; struct EtbThread final : public PeriodicController<512> { - EtbThread() : PeriodicController("ETB", NORMALPRIO + 3, ETB_LOOP_FREQUENCY) {} + EtbThread() : PeriodicController("ETB", PRIO_ETB, ETB_LOOP_FREQUENCY) {} void PeriodicTask(efitick_t) override { // Simply update all controllers diff --git a/firmware/controllers/can/can_tx.cpp b/firmware/controllers/can/can_tx.cpp index bd89ead289..0ca47e6491 100644 --- a/firmware/controllers/can/can_tx.cpp +++ b/firmware/controllers/can/can_tx.cpp @@ -16,13 +16,14 @@ #include "can_dash.h" #include "obd2.h" #include "can_sensor.h" +#include "thread_priority.h" EXTERN_ENGINE; extern CanSensorBase* cansensors_head; CanWrite::CanWrite() - : PeriodicController("CAN TX", NORMALPRIO, 50) + : PeriodicController("CAN TX", PRIO_CAN_TX, 50) { } diff --git a/firmware/controllers/can/wideband_firmware b/firmware/controllers/can/wideband_firmware index cf106b6555..ab8c24564f 160000 --- a/firmware/controllers/can/wideband_firmware +++ b/firmware/controllers/can/wideband_firmware @@ -1 +1 @@ -Subproject commit cf106b65555d3dce3ca16424fdc18606f01355d9 +Subproject commit ab8c24564f40162b08599831b03eec3568a9c953 diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index e94800f9d8..684472410b 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20210225 +#define VCS_DATE 20210228 diff --git a/firmware/controllers/engine_cycle/rpm_calculator.cpp b/firmware/controllers/engine_cycle/rpm_calculator.cpp index 2f2d23771e..f7a581eb34 100644 --- a/firmware/controllers/engine_cycle/rpm_calculator.cpp +++ b/firmware/controllers/engine_cycle/rpm_calculator.cpp @@ -94,9 +94,6 @@ RpmCalculator::RpmCalculator() : #endif /* EFI_PROD_CODE */ // todo: reuse assignRpmValue() method which needs PASS_ENGINE_PARAMETER_SUFFIX // which we cannot provide inside this parameter-less constructor. need a solution for this minor mess - - // we need this initial to have not_running at first invocation - lastRpmEventTimeNt = (efitick_t) DEEP_IN_THE_PAST_SECONDS * NT_PER_SECOND; } /** @@ -118,11 +115,15 @@ bool RpmCalculator::checkIfSpinning(efitick_t nowNt) const { * note that the result of this subtraction could be negative, that would happen if * we have a trigger event between the time we've invoked 'getTimeNow' and here */ - bool noRpmEventsForTooLong = nowNt - lastRpmEventTimeNt >= NT_PER_SECOND * NO_RPM_EVENTS_TIMEOUT_SECS; // Anything below 60 rpm is not running + + // Anything below 60 rpm is not running + bool noRpmEventsForTooLong = lastTdcTimer.getElapsedSeconds(nowNt) > NO_RPM_EVENTS_TIMEOUT_SECS; + /** * Also check if there were no trigger events */ - bool noTriggerEventsForTooLong = nowNt - engine->triggerCentral.triggerState.previousShaftEventTimeNt >= NT_PER_SECOND; + bool noTriggerEventsForTooLong = engine->triggerCentral.getTimeSinceTriggerEvent(nowNt) >= 1; + if (noRpmEventsForTooLong || noTriggerEventsForTooLong) { return false; } @@ -252,8 +253,9 @@ void rpmShaftPositionCallback(trigger_event_e ckpSignalType, if (index == 0) { bool hadRpmRecently = rpmState->checkIfSpinning(nowNt); + float periodSeconds = engine->rpmCalculator.lastTdcTimer.getElapsedSecondsAndReset(nowNt); + if (hadRpmRecently) { - int32_t diffNt = (int32_t)(nowNt - rpmState->lastRpmEventTimeNt); /** * Four stroke cycle is two crankshaft revolutions * @@ -261,22 +263,21 @@ void rpmShaftPositionCallback(trigger_event_e ckpSignalType, * and each revolution of crankshaft consists of two engine cycles revolutions * */ - if (diffNt == 0) { + if (periodSeconds == 0) { rpmState->setRpmValue(NOISY_RPM); rpmState->rpmRate = 0; } else { int mult = (int)getEngineCycle(engine->getOperationMode(PASS_ENGINE_PARAMETER_SIGNATURE)) / 360; - float rpm = 60.0 * NT_PER_SECOND * mult / diffNt; + float rpm = 60 * mult / periodSeconds; auto rpmDelta = rpm - rpmState->previousRpmValue; - rpmState->rpmRate = rpmDelta / (mult * 1e-6 * NT2US(diffNt)); + rpmState->rpmRate = rpmDelta / (mult * periodSeconds); rpmState->setRpmValue(rpm > UNREALISTIC_RPM ? NOISY_RPM : rpm); - } } + rpmState->onNewEngineCycle(); - rpmState->lastRpmEventTimeNt = nowNt; } @@ -363,16 +364,13 @@ void tdcMarkCallback( * @return Current crankshaft angle, 0 to 720 for four-stroke */ float getCrankshaftAngleNt(efitick_t timeNt DECLARE_ENGINE_PARAMETER_SUFFIX) { - efitick_t timeSinceZeroAngleNt = timeNt - - engine->rpmCalculator.lastRpmEventTimeNt; + float timeSinceZeroAngle = engine->rpmCalculator.lastTdcTimer.getElapsedSeconds(timeNt); - /** - * even if we use 'getOneDegreeTimeUs' macros here, it looks like the - * compiler is not smart enough to figure out that "A / ( B / C)" could be optimized into - * "A * C / B" in order to replace a slower division with a faster multiplication. - */ int rpm = GET_RPM(); - return rpm == 0 ? NAN : timeSinceZeroAngleNt / getOneDegreeTimeNt(rpm); + + float oneDegreeSeconds = (60.0f / 360) / rpm; + + return rpm == 0 ? NAN : timeSinceZeroAngle / oneDegreeSeconds; } void initRpmCalculator(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { diff --git a/firmware/controllers/engine_cycle/rpm_calculator.h b/firmware/controllers/engine_cycle/rpm_calculator.h index 3efa4715a5..80c394b57a 100644 --- a/firmware/controllers/engine_cycle/rpm_calculator.h +++ b/firmware/controllers/engine_cycle/rpm_calculator.h @@ -11,6 +11,7 @@ #include "globalaccess.h" #include "scheduler.h" #include "stored_value_sensor.h" +#include "timer.h" // we use this value in case of noise on trigger input lines #define NOISY_RPM -1 @@ -113,7 +114,8 @@ public: * NaN while engine is not spinning */ volatile floatus_t oneDegreeUs = NAN; - volatile efitick_t lastRpmEventTimeNt = 0; + + Timer lastTdcTimer; // RPM rate of change, in RPM per second float rpmRate = 0; diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 388901a74c..89f2399d25 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3864,4 +3864,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 39fd58956f..5635281ab9 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 3161571003..74d47b7ebc 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index 8ab337c69b..b073d1f885 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index f25ba2a5f7..b53d0cfe54 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index cfc8cc473a..5224752ed5 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1239,7 +1239,7 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 2140302013 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 @@ -1574,7 +1574,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2021.02.25.all.2140302013" +#define TS_SIGNATURE "rusEFI 2021.02.28.all.2140302013" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index a44f7b8f73..7afcedf94f 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 2140302013 -#define TS_SIGNATURE "rusEFI 2021.02.25.all.2140302013" +#define TS_SIGNATURE "rusEFI 2021.02.28.all.2140302013" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 5c47918fae..c5b9c38af8 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 4226303790 -#define TS_SIGNATURE "rusEFI 2021.02.25.frankenso_na6.4226303790" +#define TS_SIGNATURE "rusEFI 2021.02.28.frankenso_na6.4226303790" diff --git a/firmware/controllers/generated/signature_hellen72.h b/firmware/controllers/generated/signature_hellen72.h index 9ce8bbbe34..054a665f41 100644 --- a/firmware/controllers/generated/signature_hellen72.h +++ b/firmware/controllers/generated/signature_hellen72.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD hellen72 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 96926268 -#define TS_SIGNATURE "rusEFI 2021.02.25.hellen72.96926268" +#define TS_SIGNATURE "rusEFI 2021.02.28.hellen72.96926268" diff --git a/firmware/controllers/generated/signature_hellen_cypress.h b/firmware/controllers/generated/signature_hellen_cypress.h index b1b3168beb..0713cae7b6 100644 --- a/firmware/controllers/generated/signature_hellen_cypress.h +++ b/firmware/controllers/generated/signature_hellen_cypress.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD hellen_cypress -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 1039053165 -#define TS_SIGNATURE "rusEFI 2021.02.25.hellen_cypress.1039053165" +#define TS_SIGNATURE "rusEFI 2021.02.28.hellen_cypress.1039053165" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index f7ef199b23..554a9b2e3f 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 3259727249 -#define TS_SIGNATURE "rusEFI 2021.02.25.kin.3259727249" +#define TS_SIGNATURE "rusEFI 2021.02.28.kin.3259727249" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index ea2108b9d1..2806d64d03 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 1364465751 -#define TS_SIGNATURE "rusEFI 2021.02.25.mre_f4.1364465751" +#define TS_SIGNATURE "rusEFI 2021.02.28.mre_f4.1364465751" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 57863435f1..1415f9a646 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 1364465751 -#define TS_SIGNATURE "rusEFI 2021.02.25.mre_f7.1364465751" +#define TS_SIGNATURE "rusEFI 2021.02.28.mre_f7.1364465751" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 83d76f1812..749e5d712c 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 1829005451 -#define TS_SIGNATURE "rusEFI 2021.02.25.prometheus_405.1829005451" +#define TS_SIGNATURE "rusEFI 2021.02.28.prometheus_405.1829005451" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 594d8c64d6..6dbba041ad 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 1829005451 -#define TS_SIGNATURE "rusEFI 2021.02.25.prometheus_469.1829005451" +#define TS_SIGNATURE "rusEFI 2021.02.28.prometheus_469.1829005451" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 82d96338d6..51f9bfda13 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 413377170 -#define TS_SIGNATURE "rusEFI 2021.02.25.proteus_f4.413377170" +#define TS_SIGNATURE "rusEFI 2021.02.28.proteus_f4.413377170" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 652eb48172..b22cb12167 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 413377170 -#define TS_SIGNATURE "rusEFI 2021.02.25.proteus_f7.413377170" +#define TS_SIGNATURE "rusEFI 2021.02.28.proteus_f7.413377170" diff --git a/firmware/controllers/generated/signature_subaru_eg33_f7.h b/firmware/controllers/generated/signature_subaru_eg33_f7.h index 1f04036fd5..d61b3d4f95 100644 --- a/firmware/controllers/generated/signature_subaru_eg33_f7.h +++ b/firmware/controllers/generated/signature_subaru_eg33_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD subaru_eg33_f7 -#define SIGNATURE_DATE 2021.02.25 +#define SIGNATURE_DATE 2021.02.28 #define SIGNATURE_HASH 3175160971 -#define TS_SIGNATURE "rusEFI 2021.02.25.subaru_eg33_f7.3175160971" +#define TS_SIGNATURE "rusEFI 2021.02.28.subaru_eg33_f7.3175160971" diff --git a/firmware/controllers/math/engine_math.h b/firmware/controllers/math/engine_math.h index 625986bddd..262d293b9b 100644 --- a/firmware/controllers/math/engine_math.h +++ b/firmware/controllers/math/engine_math.h @@ -34,11 +34,6 @@ void setFlatInjectorLag(float value DECLARE_CONFIG_PARAMETER_SUFFIX); */ #define getOneDegreeTimeUs(rpm) (1000000.0f * 60 / 360 / (rpm)) -/** - * @return float, time needed to rotate crankshaft by one degree, in native clicks. - */ -#define getOneDegreeTimeNt(rpm) (US2NT(1000000) * 60.0f / 360 / (rpm)) - floatms_t getCrankshaftRevolutionTimeMs(int rpm); floatms_t getEngineCycleDuration(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX); diff --git a/firmware/controllers/sensors/software_knock.cpp b/firmware/controllers/sensors/software_knock.cpp index 034e7ea186..abec77223d 100644 --- a/firmware/controllers/sensors/software_knock.cpp +++ b/firmware/controllers/sensors/software_knock.cpp @@ -5,6 +5,7 @@ #include "perf_trace.h" #include "thread_controller.h" #include "software_knock.h" +#include "thread_priority.h" #if EFI_SOFTWARE_KNOCK @@ -162,7 +163,7 @@ void startKnockSampling(uint8_t cylinderIndex) { class KnockThread : public ThreadController<256> { public: - KnockThread() : ThreadController("knock", NORMALPRIO - 10) {} + KnockThread() : ThreadController("knock", PRIO_KNOCK_PROCESS) {} void ThreadTask() override; }; diff --git a/firmware/controllers/serial/serial_rx.cpp b/firmware/controllers/serial/serial_rx.cpp index 5c75fae85d..48e6fd6e89 100644 --- a/firmware/controllers/serial/serial_rx.cpp +++ b/firmware/controllers/serial/serial_rx.cpp @@ -17,6 +17,7 @@ #include "allsensors.h" #include "vehicle_speed.h" +#include "thread_priority.h" EXTERN_ENGINE; @@ -29,7 +30,7 @@ uint8_t sb = 0; bool clear_ser_buffer = false; SerialRead::SerialRead() - : ThreadController("AUX Serial RX", NORMALPRIO) { + : ThreadController("AUX Serial RX", PRIO_AUX_SERIAL) { } void SerialRead::ThreadTask() { diff --git a/firmware/controllers/thread_priority.h b/firmware/controllers/thread_priority.h new file mode 100644 index 0000000000..7be9c6706f --- /dev/null +++ b/firmware/controllers/thread_priority.h @@ -0,0 +1,36 @@ +/** + * @file thread_priority.h + * @brief This file sets the thread priority for the threads running on rusEFI + * + * @date February 27, 2021 + * @author Matthew Kennedy, (c) 2021 + */ + +#pragma once + +// ADC and ETB get highest priority - not much else actually runs the engine +#define PRIO_ADC (NORMALPRIO + 10) +#define PRIO_ETB (NORMALPRIO + 9) + +// GPIO chips should be fast and go right back to sleep, plus can be timing sensitive +#define PRIO_GPIOCHIP (NORMALPRIO + 8) + +// TX higher priority than RX because the ECU is generally the one transmitting the highest priority messages +#define PRIO_CAN_TX (NORMALPRIO + 7) +#define PRIO_CAN_RX (NORMALPRIO + 6) + +// Less critical harware +#define PRIO_SERVO (NORMALPRIO + 5) +#define PRIO_STEPPER (NORMALPRIO + 5) +#define PRIO_CJ125 (NORMALPRIO + 5) + +// Console thread +#define PRIO_CONSOLE (NORMALPRIO + 1) + +// Less important things +#define PRIO_MMC (NORMALPRIO - 1) + +// These can get starved without too much adverse effect +#define PRIO_AUX_SERIAL NORMALPRIO +#define PRIO_KNOCK_PROCESS (NORMALPRIO - 10) +#define PRIO_HIP9011 (NORMALPRIO - 10) diff --git a/firmware/hw_layer/adc/adc_inputs.cpp b/firmware/hw_layer/adc/adc_inputs.cpp index 60e79c120c..8e3ef05635 100644 --- a/firmware/hw_layer/adc/adc_inputs.cpp +++ b/firmware/hw_layer/adc/adc_inputs.cpp @@ -36,6 +36,7 @@ #include "engine_controller.h" #include "maf.h" #include "perf_trace.h" +#include "thread_priority.h" static NO_CACHE adcsample_t slowAdcSampleBuf[ADC_BUF_DEPTH_SLOW * ADC_MAX_CHANNELS_COUNT]; static NO_CACHE adcsample_t fastAdcSampleBuf[ADC_BUF_DEPTH_FAST * ADC_MAX_CHANNELS_COUNT]; @@ -166,6 +167,7 @@ static ADCConversionGroup adcgrpcfgSlow = { AdcDevice slowAdc(&adcgrpcfgSlow, slowAdcSampleBuf, ARRAY_SIZE(slowAdcSampleBuf)); +#if EFI_USE_FAST_ADC void adc_callback_fast(ADCDriver *adcp); static ADCConversionGroup adcgrpcfgFast = { @@ -214,7 +216,6 @@ static ADCConversionGroup adcgrpcfgFast = { AdcDevice fastAdc(&adcgrpcfgFast, fastAdcSampleBuf, ARRAY_SIZE(fastAdcSampleBuf)); -#if HAL_USE_GPT static void fast_adc_callback(GPTDriver*) { #if EFI_INTERNAL_ADC /* @@ -240,7 +241,7 @@ static void fast_adc_callback(GPTDriver*) { fastAdc.conversionCount++; #endif /* EFI_INTERNAL_ADC */ } -#endif /* HAL_USE_GPT */ +#endif // EFI_USE_FAST_ADC static float mcuTemperature; @@ -259,7 +260,7 @@ int getInternalAdcValue(const char *msg, adc_channel_e hwChannel) { #endif /* EFI_ENABLE_MOCK_ADC */ - +#if EFI_USE_FAST_ADC if (adcHwChannelEnabled[hwChannel] == ADC_FAST) { int internalIndex = fastAdc.internalAdcIndexByHardwareIndex[hwChannel]; // todo if ADC_BUF_DEPTH_FAST EQ 1 @@ -267,6 +268,8 @@ int getInternalAdcValue(const char *msg, adc_channel_e hwChannel) { int value = getAvgAdcValue(internalIndex, fastAdc.samples, ADC_BUF_DEPTH_FAST, fastAdc.size()); return value; } +#endif // EFI_USE_FAST_ADC + if (adcHwChannelEnabled[hwChannel] != ADC_SLOW) { // todo: make this not happen during hardware continuous integration warning(CUSTOM_OBD_WRONG_ADC_MODE, "ADC is off [%s] index=%d", msg, hwChannel); @@ -275,21 +278,25 @@ int getInternalAdcValue(const char *msg, adc_channel_e hwChannel) { return slowAdc.getAdcValueByHwChannel(hwChannel); } -#if HAL_USE_GPT +#if EFI_USE_FAST_ADC static GPTConfig fast_adc_config = { GPT_FREQ_FAST, fast_adc_callback, 0, 0 }; -#endif /* HAL_USE_GPT */ +#endif /* EFI_USE_FAST_ADC */ adc_channel_mode_e getAdcMode(adc_channel_e hwChannel) { if (slowAdc.isHwUsed(hwChannel)) { return ADC_SLOW; } + +#if EFI_USE_FAST_ADC if (fastAdc.isHwUsed(hwChannel)) { return ADC_FAST; } +#endif // EFI_USE_FAST_ADC + return ADC_OFF; } @@ -368,6 +375,7 @@ adc_channel_e AdcDevice::getAdcHardwareIndexByInternalIndex(int index) const { } static void printFullAdcReport(Logging *logger) { +#if EFI_USE_FAST_ADC scheduleMsg(logger, "fast %d slow %d", fastAdc.conversionCount, slowAdc.conversionCount); for (int index = 0; index < fastAdc.size(); index++) { @@ -389,6 +397,7 @@ static void printFullAdcReport(Logging *logger) { scheduleLogging(logger); } } +#endif // EFI_USE_FAST_ADC for (int index = 0; index < slowAdc.size(); index++) { appendMsgPrefix(logger); @@ -436,7 +445,7 @@ int getSlowAdcCounter() { class SlowAdcController : public PeriodicController<256> { public: SlowAdcController() - : PeriodicController("ADC", NORMALPRIO + 5, SLOW_ADC_RATE) + : PeriodicController("ADC", PRIO_ADC, SLOW_ADC_RATE) { } @@ -492,8 +501,15 @@ void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode adcHwChannelEnabled[setting] = mode; - AdcDevice& dev = (mode == ADC_SLOW) ? slowAdc : fastAdc; - dev.enableChannelAndPin(name, setting); + AdcDevice* dev = &slowAdc; + +#if EFI_USE_FAST_ADC + if (mode == ADC_FAST) { + dev = &fastAdc; + } +#endif + + dev->enableChannelAndPin(name, setting); } void removeChannel(const char *name, adc_channel_e setting) { @@ -504,6 +520,9 @@ void removeChannel(const char *name, adc_channel_e setting) { adcHwChannelEnabled[setting] = ADC_OFF; } +// Weak link a stub so that every board doesn't have to implement this function +__attribute__((weak)) void setAdcChannelOverrides() { } + static void configureInputs(void) { memset(adcHwChannelEnabled, 0, sizeof(adcHwChannelEnabled)); @@ -581,14 +600,12 @@ void initAdcInputs() { // Start the slow ADC thread slowAdcController.Start(); +#if EFI_USE_FAST_ADC fastAdc.init(); - /* - * Initializes the PWM driver. - */ -#if HAL_USE_GPT + gptStart(EFI_INTERNAL_FAST_ADC_GPT, &fast_adc_config); gptStartContinuous(EFI_INTERNAL_FAST_ADC_GPT, GPT_PERIOD_FAST); -#endif /* HAL_USE_GPT */ +#endif // EFI_USE_FAST_ADC addConsoleActionI("adc", (VoidInt) printAdcValue); #else @@ -602,4 +619,15 @@ void printFullAdcReportIfNeeded(Logging *logger) { printFullAdcReport(logger); } -#endif /* HAL_USE_ADC */ +#else /* not HAL_USE_ADC */ + +__attribute__((weak)) float getVoltageDivided(const char*, adc_channel_e DECLARE_ENGINE_PARAMETER_SUFFIX) { + return 0; +} + +// voltage in MCU universe, from zero to VDD +__attribute__((weak)) float getVoltage(const char*, adc_channel_e DECLARE_ENGINE_PARAMETER_SUFFIX) { + return 0; +} + +#endif diff --git a/firmware/hw_layer/drivers/can/can_hw.cpp b/firmware/hw_layer/drivers/can/can_hw.cpp index 056ca85605..ca3b154050 100644 --- a/firmware/hw_layer/drivers/can/can_hw.cpp +++ b/firmware/hw_layer/drivers/can/can_hw.cpp @@ -24,6 +24,7 @@ #include "string.h" #include "mpu_util.h" #include "engine.h" +#include "thread_priority.h" EXTERN_ENGINE; @@ -83,7 +84,7 @@ static const CANConfig *canConfig = &canConfig500; class CanRead final : public ThreadController { public: CanRead() - : ThreadController("CAN RX", NORMALPRIO) + : ThreadController("CAN RX", PRIO_CAN_RX) { } diff --git a/firmware/hw_layer/drivers/gpio/drv8860.c b/firmware/hw_layer/drivers/gpio/drv8860.c index 48e452f1a6..d4bfb03c2e 100644 --- a/firmware/hw_layer/drivers/gpio/drv8860.c +++ b/firmware/hw_layer/drivers/gpio/drv8860.c @@ -17,6 +17,7 @@ #include "gpio/drv8860.h" #include "pin_repository.h" #include "os_util.h" +#include "thread_priority.h" #if (BOARD_DRV8860_COUNT > 0) @@ -225,7 +226,7 @@ int drv8860_init(void * data) { if (!drv_task_ready) { chThdCreateStatic(drv8860_thread_1_wa, sizeof(drv8860_thread_1_wa), - NORMALPRIO + 1, drv8860_driver_thread, NULL); + PRIO_GPIOCHIP, drv8860_driver_thread, NULL); drv_task_ready = true; } diff --git a/firmware/hw_layer/drivers/gpio/mc33810.c b/firmware/hw_layer/drivers/gpio/mc33810.c index d47902c68c..80c28b6260 100644 --- a/firmware/hw_layer/drivers/gpio/mc33810.c +++ b/firmware/hw_layer/drivers/gpio/mc33810.c @@ -15,6 +15,7 @@ #include "gpio/mc33810.h" #include "pin_repository.h" #include "os_util.h" +#include "thread_priority.h" #if (BOARD_MC33810_COUNT > 0) @@ -498,7 +499,7 @@ int mc33810_init(void * data) if (!drv_task_ready) { chThdCreateStatic(mc33810_thread_1_wa, sizeof(mc33810_thread_1_wa), - NORMALPRIO + 1, mc33810_driver_thread, NULL); + PRIO_GPIOCHIP, mc33810_driver_thread, NULL); drv_task_ready = true; } diff --git a/firmware/hw_layer/drivers/gpio/mc33972.c b/firmware/hw_layer/drivers/gpio/mc33972.c index 58f2859906..2d3fe342dd 100644 --- a/firmware/hw_layer/drivers/gpio/mc33972.c +++ b/firmware/hw_layer/drivers/gpio/mc33972.c @@ -18,6 +18,7 @@ #include "gpio/gpio_ext.h" #include "gpio/mc33972.h" #include "pin_repository.h" +#include "thread_priority.h" #if (BOARD_MC33972_COUNT > 0) @@ -304,7 +305,7 @@ static int mc33972_init(void * data) if (!drv_task_ready) { chThdCreateStatic(mc33972_thread_1_wa, sizeof(mc33972_thread_1_wa), - NORMALPRIO + 1, mc33972_driver_thread, NULL); + PRIO_GPIOCHIP, mc33972_driver_thread, NULL); drv_task_ready = true; } diff --git a/firmware/hw_layer/drivers/gpio/tle6240.c b/firmware/hw_layer/drivers/gpio/tle6240.c index e662cdf302..d6a653c0f8 100644 --- a/firmware/hw_layer/drivers/gpio/tle6240.c +++ b/firmware/hw_layer/drivers/gpio/tle6240.c @@ -25,6 +25,7 @@ #include "gpio/tle6240.h" #include "pin_repository.h" #include "os_util.h" +#include "thread_priority.h" #if (BOARD_TLE6240_COUNT > 0) @@ -450,7 +451,7 @@ static int tle6240_init(void * data) if (!drv_task_ready) { chThdCreateStatic(tle6240_thread_1_wa, sizeof(tle6240_thread_1_wa), - NORMALPRIO + 1, tle6240_driver_thread, NULL); + PRIO_GPIOCHIP, tle6240_driver_thread, NULL); drv_task_ready = true; } diff --git a/firmware/hw_layer/drivers/gpio/tle8888.c b/firmware/hw_layer/drivers/gpio/tle8888.c index aa9ae3a538..5cea1bf04c 100644 --- a/firmware/hw_layer/drivers/gpio/tle8888.c +++ b/firmware/hw_layer/drivers/gpio/tle8888.c @@ -41,6 +41,7 @@ #include "pin_repository.h" #include "os_util.h" #include "voltage.h" +#include "thread_priority.h" EXTERN_ENGINE_CONFIGURATION; @@ -1199,7 +1200,7 @@ static int tle8888_init(void * data) /* start thread */ chip->thread = chThdCreateStatic(chip->thread_wa, sizeof(chip->thread_wa), - NORMALPRIO + 1, tle8888_driver_thread, chip); + PRIO_GPIOCHIP, tle8888_driver_thread, chip); return 0; } diff --git a/firmware/hw_layer/flash_int.h b/firmware/hw_layer/flash_int.h index 8b658c00aa..4b41ef3588 100644 --- a/firmware/hw_layer/flash_int.h +++ b/firmware/hw_layer/flash_int.h @@ -35,7 +35,7 @@ extern "C" { * 11 to program 64 bits per step */ // Warning, flashdata_t must be unsigned!!! -#if defined(STM32F4XX) || defined(STM32F7XX) +#if defined(STM32F4XX) || defined(STM32F7XX) || defined(STM32H7XX) #define FLASH_CR_PSIZE_MASK FLASH_CR_PSIZE_0 | FLASH_CR_PSIZE_1 #if ((STM32_VDD >= 270) && (STM32_VDD <= 360)) #define FLASH_CR_PSIZE_VALUE FLASH_CR_PSIZE_1 diff --git a/firmware/hw_layer/mmc_card.cpp b/firmware/hw_layer/mmc_card.cpp index c6a982511b..5000731870 100644 --- a/firmware/hw_layer/mmc_card.cpp +++ b/firmware/hw_layer/mmc_card.cpp @@ -26,6 +26,7 @@ #include "status_loop.h" #include "buffered_writer.h" #include "null_device.h" +#include "thread_priority.h" #include "rtc_helper.h" @@ -55,7 +56,6 @@ static int totalSyncCounter = 0; * on't re-read SD card spi device after boot - it could change mid transaction (TS thread could preempt), * which will cause disaster (usually multiple-unlock of the same mutex in UNLOCK_SD_SPI) */ - spi_device_e mmcSpiDevice = SPI_NONE; #define LOG_INDEX_FILENAME "index.txt" @@ -78,6 +78,7 @@ spi_device_e mmcSpiDevice = SPI_NONE; static THD_WORKING_AREA(mmcThreadStack, 3 * UTILITY_THREAD_STACK_SIZE); // MMC monitor thread +#if HAL_USE_MMC_SPI /** * MMC driver instance. */ @@ -86,10 +87,15 @@ MMCDriver MMCD1; /* MMC/SD over SPI driver configuration.*/ static MMCConfig mmccfg = { NULL, &mmc_ls_spicfg, &mmc_hs_spicfg }; +#define LOCK_SD_SPI lockSpi(mmcSpiDevice) +#define UNLOCK_SD_SPI unlockSpi(mmcSpiDevice) + +#endif /* HAL_USE_MMC_SPI */ + /** * fatfs MMC/SPI */ -static FATFS MMC_FS; +static NO_CACHE FATFS MMC_FS; static LoggingWithStorage logger("mmcCard"); @@ -138,7 +144,6 @@ static void sdStatistics(void) { } static void incLogFileName(void) { - LOCK_SD_SPI; memset(&FDCurrFile, 0, sizeof(FIL)); // clear the memory FRESULT err = f_open(&FDCurrFile, LOG_INDEX_FILENAME, FA_READ); // This file has the index for next log file name @@ -170,7 +175,6 @@ static void incLogFileName(void) { f_write(&FDCurrFile, (void*)data, strlen(data), &result); f_close(&FDCurrFile); scheduleMsg(&logger, "Done %d", logFileIndex); - UNLOCK_SD_SPI; } static void prepareLogFileName(void) { @@ -200,13 +204,11 @@ static void prepareLogFileName(void) { * so that we can later append to that file */ static void createLogFile(void) { - LOCK_SD_SPI; memset(&FDLogFile, 0, sizeof(FIL)); // clear the memory prepareLogFileName(); FRESULT err = f_open(&FDLogFile, logName, FA_OPEN_ALWAYS | FA_WRITE); // Create new file if (err != FR_OK && err != FR_EXIST) { - UNLOCK_SD_SPI; sdStatus = SD_STATE_OPEN_FAILED; warning(CUSTOM_ERR_SD_MOUNT_FAILED, "SD: mount failed"); printError("FS mount failed", err); // else - show error @@ -215,7 +217,6 @@ static void createLogFile(void) { err = f_lseek(&FDLogFile, f_size(&FDLogFile)); // Move to end of the file to append data if (err) { - UNLOCK_SD_SPI; sdStatus = SD_STATE_SEEK_FAILED; warning(CUSTOM_ERR_SD_SEEK_FAILED, "SD: seek failed"); printError("Seek error", err); @@ -223,7 +224,6 @@ static void createLogFile(void) { } f_sync(&FDLogFile); setSdCardReady(true); // everything Ok - UNLOCK_SD_SPI; } static void removeFile(const char *pathx) { @@ -231,10 +231,8 @@ static void removeFile(const char *pathx) { scheduleMsg(&logger, "Error: No File system is mounted"); return; } - LOCK_SD_SPI; - f_unlink(pathx); - UNLOCK_SD_SPI; + f_unlink(pathx); } int @@ -262,14 +260,12 @@ static void listDirectory(const char *path) { scheduleMsg(&logger, "Error: No File system is mounted"); return; } - LOCK_SD_SPI; DIR dir; FRESULT res = f_opendir(&dir, path); if (res != FR_OK) { scheduleMsg(&logger, "Error opening directory %s", path); - UNLOCK_SD_SPI; return; } @@ -297,7 +293,6 @@ static void listDirectory(const char *path) { // (fno.fdate >> 5) & 15, fno.fdate & 31, (fno.ftime >> 11), (fno.ftime >> 5) & 63, fno.fsize, // fno.fname); } - UNLOCK_SD_SPI; } /* @@ -310,8 +305,16 @@ static void mmcUnMount(void) { } f_close(&FDLogFile); // close file f_sync(&FDLogFile); // sync ALL + +#if HAL_USE_MMC_SPI mmcDisconnect(&MMCD1); // Brings the driver in a state safe for card removal. mmcStop(&MMCD1); // Disables the MMC peripheral. + UNLOCK_SD_SPI; +#endif +#ifdef EFI_SDC_DEVICE + sdcDisconnect(&EFI_SDC_DEVICE); + sdcStop(&EFI_SDC_DEVICE); +#endif f_mount(NULL, 0, 0); // FATFS: Unregister work area prior to discard it memset(&FDLogFile, 0, sizeof(FIL)); // clear FDLogFile setSdCardReady(false); // status = false @@ -343,6 +346,7 @@ void onUsbConnectedNotifyMmcI() { #endif /* HAL_USE_USB_MSD */ +#if HAL_USE_MMC_SPI /* * Attempts to initialize the MMC card. * Returns a BaseBlockDevice* corresponding to the SD card if successful, otherwise nullptr. @@ -376,9 +380,32 @@ static BaseBlockDevice* initializeMmcBlockDevice() { return nullptr; } - UNLOCK_SD_SPI; - return (BaseBlockDevice*)&MMCD1; + return reinterpret_cast(&MMCD1); } +#endif /* HAL_USE_MMC_SPI */ + +// Some ECUs are wired for SDIO/SDMMC instead of SPI +#ifdef EFI_SDC_DEVICE +static const SDCConfig sdcConfig = { + SDC_MODE_4BIT +}; + +static BaseBlockDevice* initializeMmcBlockDevice() { + if (!CONFIG(isSdCardEnabled)) { + return nullptr; + } + + sdcStart(&EFI_SDC_DEVICE, &sdcConfig); + sdStatus = SD_STATE_CONNECTING; + if (sdcConnect(&EFI_SDC_DEVICE) != HAL_SUCCESS) { + sdStatus = SD_STATE_NOT_CONNECTED; + warning(CUSTOM_OBD_MMC_ERROR, "Can't connect or mount MMC/SD"); + return nullptr; + } + + return reinterpret_cast(&EFI_SDC_DEVICE); +} +#endif /* EFI_SDC_DEVICE */ // Initialize and mount the SD card. // Returns true if the filesystem was successfully mounted for writing. @@ -435,7 +462,6 @@ struct SdLogBufferWriter final : public BufferedWriter<512> { totalLoggedBytes += count; - LOCK_SD_SPI; FRESULT err = f_write(&FDLogFile, buffer, count, &bytesWritten); if (bytesWritten != count) { @@ -443,7 +469,6 @@ struct SdLogBufferWriter final : public BufferedWriter<512> { // Close file and unmount volume mmcUnMount(); - UNLOCK_SD_SPI; failed = true; return 0; } else { @@ -460,7 +485,6 @@ struct SdLogBufferWriter final : public BufferedWriter<512> { } } - UNLOCK_SD_SPI; return bytesWritten; } }; @@ -514,7 +538,7 @@ void initMmcCard(void) { chBSemObjectInit(&usbConnectedSemaphore, true); #endif - chThdCreateStatic(mmcThreadStack, sizeof(mmcThreadStack), LOWPRIO, (tfunc_t)(void*) MMCmonThread, NULL); + chThdCreateStatic(mmcThreadStack, sizeof(mmcThreadStack), PRIO_MMC, (tfunc_t)(void*) MMCmonThread, NULL); addConsoleAction("sdinfo", sdStatistics); addConsoleActionS("ls", listDirectory); diff --git a/firmware/hw_layer/mmc_card.h b/firmware/hw_layer/mmc_card.h index 533a5df960..cd66ba2b15 100644 --- a/firmware/hw_layer/mmc_card.h +++ b/firmware/hw_layer/mmc_card.h @@ -23,10 +23,6 @@ void readLogFileContent(char *buffer, short fileId, short offset, short length); void handleTsR(TsChannelBase* tsChannel, char *input); void handleTsW(TsChannelBase* tsChannel, char *input); -extern spi_device_e mmcSpiDevice; -#define LOCK_SD_SPI lockSpi(mmcSpiDevice) -#define UNLOCK_SD_SPI unlockSpi(mmcSpiDevice) - extern "C" #endif void onUsbConnectedNotifyMmcI(void); diff --git a/firmware/hw_layer/mmc_card_access.cpp b/firmware/hw_layer/mmc_card_access.cpp index da8fbd59a0..e6ade6d539 100644 --- a/firmware/hw_layer/mmc_card_access.cpp +++ b/firmware/hw_layer/mmc_card_access.cpp @@ -164,12 +164,10 @@ void handleTsR(TsChannelBase* tsChannel, char *input) { #endif // EFI_SIMULATOR #if EFI_FILE_LOGGING - LOCK_SD_SPI; DIR dir; FRESULT res = f_opendir(&dir, ROOT_DIR); if (res != FR_OK) { scheduleMsg(&sharedLogger, "Error opening directory"); - UNLOCK_SD_SPI; } else { int index = 0; while (true) { @@ -203,7 +201,6 @@ void handleTsR(TsChannelBase* tsChannel, char *input) { } } - UNLOCK_SD_SPI; } #endif // EFI_FILE_LOGGING @@ -227,10 +224,8 @@ void handleTsR(TsChannelBase* tsChannel, char *input) { #endif // EFI_SIMULATOR #if EFI_FILE_LOGGING - LOCK_SD_SPI; got = 0; f_read(&uploading, (void*) &buffer[2], TRANSFER_SIZE, (UINT*) &got); - UNLOCK_SD_SPI; #endif // EFI_FILE_LOGGING tsChannel->sendResponse(TS_CRC, buffer, 2 + got); @@ -281,7 +276,6 @@ void handleTsW(TsChannelBase* tsChannel, char *input) { #endif // EFI_SIMULATOR #if EFI_FILE_LOGGING - LOCK_SD_SPI; DIR dir; FRESULT res = f_opendir(&dir, ROOT_DIR); if (res != FR_OK) { @@ -304,7 +298,6 @@ void handleTsW(TsChannelBase* tsChannel, char *input) { } } } - UNLOCK_SD_SPI; #endif // EFI_FILE_LOGGING sendOkResponse(tsChannel, TS_CRC); @@ -340,14 +333,11 @@ void handleTsW(TsChannelBase* tsChannel, char *input) { #endif // EFI_SIMULATOR #if EFI_FILE_LOGGING - LOCK_SD_SPI; - DIR dir; FRESULT res = f_opendir(&dir, ROOT_DIR); if (res != FR_OK) { scheduleMsg(&sharedLogger, "Error opening directory"); - UNLOCK_SD_SPI; } else { memset(&uploading, 0, sizeof(FIL)); // clear the memory while (true) { @@ -366,7 +356,6 @@ void handleTsW(TsChannelBase* tsChannel, char *input) { } } } - UNLOCK_SD_SPI; } #endif // EFI_FILE_LOGGING diff --git a/firmware/hw_layer/ports/rusefi_halconf.h b/firmware/hw_layer/ports/rusefi_halconf.h index f3213e5a95..ba416348b4 100644 --- a/firmware/hw_layer/ports/rusefi_halconf.h +++ b/firmware/hw_layer/ports/rusefi_halconf.h @@ -13,8 +13,20 @@ #define HAL_USE_USB EFI_USB_SERIAL #define HAL_USE_SERIAL_USB EFI_USB_SERIAL -// If EFI_FILE_LOGGING, enable MMC SPI driver -#define HAL_USE_MMC_SPI EFI_FILE_LOGGING +// If EFI_FILE_LOGGING and SDC, enable SDIO/SDMMC driver +#if defined(EFI_SDC_DEVICE) && EFI_FILE_LOGGING + #define HAL_USE_SDC TRUE + #define FATFS_HAL_DEVICE EFI_SDC_DEVICE +#else + #define HAL_USE_SDC FALSE +#endif + +// If EFI_FILE_LOGGING but not SDC, use SPI instead +#if !defined(EFI_SDC_DEVICE) && EFI_FILE_LOGGING + #define HAL_USE_MMC_SPI TRUE +#else + #define HAL_USE_MMC_SPI FALSE +#endif // If USB and File logging, enable USB Mass Storage & community #define HAL_USE_USB_MSD (EFI_FILE_LOGGING && EFI_USB_SERIAL) diff --git a/firmware/hw_layer/ports/stm32/flash_int.c b/firmware/hw_layer/ports/stm32/flash_int.c index 76954d4d74..0a4de81967 100644 --- a/firmware/hw_layer/ports/stm32/flash_int.c +++ b/firmware/hw_layer/ports/stm32/flash_int.c @@ -15,6 +15,30 @@ #include "flash_int.h" #include +#ifdef STM32H7XX + // Use bank 2 on H7 + #define FLASH_CR FLASH->CR2 + #define FLASH_SR FLASH->SR2 + #define FLASH_KEYR FLASH->KEYR2 + + // I have no idea why ST changed the register name from STRT -> START + #define FLASH_CR_STRT FLASH_CR_START + + #undef FLASH_BASE + // This is the start of the second bank, since H7 sector numbers are bank relative + #define FLASH_BASE 0x08100000 + + // QW bit supercedes the older BSY bit + #define intFlashWaitWhileBusy() { while (FLASH_SR & FLASH_SR_QW) {} } +#else + #define FLASH_CR FLASH->CR + #define FLASH_SR FLASH->SR + #define FLASH_KEYR FLASH->KEYR + + // Wait for the flash operation to finish + #define intFlashWaitWhileBusy() { while (FLASH->SR & FLASH_SR_BSY) {} } +#endif + flashaddr_t intFlashSectorBegin(flashsector_t sector) { flashaddr_t address = FLASH_BASE; while (sector > 0) { @@ -35,11 +59,6 @@ flashsector_t intFlashSectorAt(flashaddr_t address) { return sector; } -/** - * @brief Wait for the flash operation to finish. - */ -#define intFlashWaitWhileBusy() { while (FLASH->SR & FLASH_SR_BSY) {} } - /** * @brief Unlock the flash memory for write access. * @return HAL_SUCCESS Unlock was successful. @@ -47,15 +66,15 @@ flashsector_t intFlashSectorAt(flashaddr_t address) { */ static bool intFlashUnlock(void) { /* Check if unlock is really needed */ - if (!(FLASH->CR & FLASH_CR_LOCK)) + if (!(FLASH_CR & FLASH_CR_LOCK)) return HAL_SUCCESS; /* Write magic unlock sequence */ - FLASH->KEYR = 0x45670123; - FLASH->KEYR = 0xCDEF89AB; + FLASH_KEYR = 0x45670123; + FLASH_KEYR = 0xCDEF89AB; /* Check if unlock was successful */ - if (FLASH->CR & FLASH_CR_LOCK) + if (FLASH_CR & FLASH_CR_LOCK) return HAL_FAILED; return HAL_SUCCESS; } @@ -63,7 +82,7 @@ static bool intFlashUnlock(void) { /** * @brief Lock the flash memory for write access. */ -#define intFlashLock() { FLASH->CR |= FLASH_CR_LOCK; } +#define intFlashLock() { FLASH_CR |= FLASH_CR_LOCK; } int intFlashSectorErase(flashsector_t sector) { /* Unlock flash for write access */ @@ -74,8 +93,8 @@ int intFlashSectorErase(flashsector_t sector) { intFlashWaitWhileBusy(); /* Setup parallelism before any program/erase */ - FLASH->CR &= ~FLASH_CR_PSIZE_MASK; - FLASH->CR |= FLASH_CR_PSIZE_VALUE; + FLASH_CR &= ~FLASH_CR_PSIZE_MASK; + FLASH_CR |= FLASH_CR_PSIZE_VALUE; /* Start deletion of sector. * SNB(4:1) is defined as: @@ -87,31 +106,35 @@ int intFlashSectorErase(flashsector_t sector) { * ... * 10111 sector 23 (the end of 2nd bank, 2Mb border) * others not allowed */ -#ifndef FLASH_CR_SNB_4 - FLASH->CR &= ~(FLASH_CR_SNB_0 | FLASH_CR_SNB_1 | FLASH_CR_SNB_2 | FLASH_CR_SNB_3); +#ifndef FLASH_CR_SNB_3 + FLASH_CR &= ~(FLASH_CR_SNB_0 | FLASH_CR_SNB_1 | FLASH_CR_SNB_2); +#elif !defined(FLASH_CR_SNB_4) + FLASH_CR &= ~(FLASH_CR_SNB_0 | FLASH_CR_SNB_1 | FLASH_CR_SNB_2 | FLASH_CR_SNB_3); #else - FLASH->CR &= ~(FLASH_CR_SNB_0 | FLASH_CR_SNB_1 | FLASH_CR_SNB_2 | FLASH_CR_SNB_3 | FLASH_CR_SNB_4); + FLASH_CR &= ~(FLASH_CR_SNB_0 | FLASH_CR_SNB_1 | FLASH_CR_SNB_2 | FLASH_CR_SNB_3 | FLASH_CR_SNB_4); #endif if (sector & 0x1) - FLASH->CR |= FLASH_CR_SNB_0; + FLASH_CR |= FLASH_CR_SNB_0; if (sector & 0x2) - FLASH->CR |= FLASH_CR_SNB_1; + FLASH_CR |= FLASH_CR_SNB_1; if (sector & 0x4) - FLASH->CR |= FLASH_CR_SNB_2; + FLASH_CR |= FLASH_CR_SNB_2; +#ifdef FLASH_CR_SNB_4 if (sector & 0x8) - FLASH->CR |= FLASH_CR_SNB_3; + FLASH_CR |= FLASH_CR_SNB_3; +#endif #ifdef FLASH_CR_SNB_4 if (sector & 0x10) - FLASH->CR |= FLASH_CR_SNB_4; + FLASH_CR |= FLASH_CR_SNB_4; #endif - FLASH->CR |= FLASH_CR_SER; - FLASH->CR |= FLASH_CR_STRT; + FLASH_CR |= FLASH_CR_SER; + FLASH_CR |= FLASH_CR_STRT; /* Wait until it's finished. */ intFlashWaitWhileBusy(); /* Sector erase flag does not clear automatically. */ - FLASH->CR &= ~FLASH_CR_SER; + FLASH_CR &= ~FLASH_CR_SER; /* Lock flash again */ intFlashLock() @@ -187,6 +210,61 @@ int intFlashRead(flashaddr_t address, char* buffer, size_t size) { return FLASH_RETURN_SUCCESS; } +#ifdef STM32H7XX +int intFlashWrite(flashaddr_t address, const char* buffer, size_t size) { + /* Unlock flash for write access */ + if (intFlashUnlock() == HAL_FAILED) + return FLASH_RETURN_NO_PERMISSION; + + /* Wait for any busy flags */ + intFlashWaitWhileBusy(); + + /* Setup parallelism before program */ + FLASH_CR &= ~FLASH_CR_PSIZE_MASK; + FLASH_CR |= FLASH_CR_PSIZE_VALUE; + + // Round up to the next number of full 32 byte words + size_t flashWordCount = (size - 1) / 32 + 1; + + // Read units of flashdata_t from the buffer, writing to flash + const flashdata_t* pRead = (const flashdata_t*)buffer; + flashdata_t* pWrite = (flashdata_t*)address; + + for (size_t word = 0; word < flashWordCount; word++) { + /* Enter flash programming mode */ + FLASH_CR |= FLASH_CR_PG; + + // Flush pipelines + __ISB(); + __DSB(); + + // Write 32 bytes + for (size_t i = 0; i < 8; i++) { + *pWrite++ = *pRead++; + } + + // Flush pipelines + __ISB(); + __DSB(); + + /* Wait for completion */ + intFlashWaitWhileBusy(); + + /* Exit flash programming mode */ + FLASH_CR &= ~FLASH_CR_PG; + + // Flush pipelines + __ISB(); + __DSB(); + } + + /* Lock flash again */ + intFlashLock(); + + return FLASH_RETURN_SUCCESS; +} + +#else // not STM32H7XX static void intFlashWriteData(flashaddr_t address, const flashdata_t data) { /* Enter flash programming mode */ FLASH->CR |= FLASH_CR_PG; @@ -276,5 +354,6 @@ int intFlashWrite(flashaddr_t address, const char* buffer, size_t size) { return FLASH_RETURN_SUCCESS; } +#endif #endif /* EFI_INTERNAL_FLASH */ diff --git a/firmware/hw_layer/ports/stm32/mcuconf_common_f4_f7.h b/firmware/hw_layer/ports/stm32/mcuconf_common_f4_f7.h index 76608e11d5..848cf58171 100644 --- a/firmware/hw_layer/ports/stm32/mcuconf_common_f4_f7.h +++ b/firmware/hw_layer/ports/stm32/mcuconf_common_f4_f7.h @@ -314,7 +314,6 @@ #define STM32_USB_OTG2_IRQ_PRIORITY 14 #define STM32_USB_OTG1_RX_FIFO_SIZE 512 #define STM32_USB_OTG2_RX_FIFO_SIZE 1024 -#define STM32_USB_OTG_THREAD_PRIO LOWPRIO #define STM32_USB_OTG_THREAD_STACK_SIZE 1024 #define STM32_USB_OTGFIFO_FILL_BASEPRI 0 diff --git a/firmware/hw_layer/ports/stm32/stm32_adc_v2.cpp b/firmware/hw_layer/ports/stm32/stm32_adc_v2.cpp index 3f188dd3fa..6285be4cce 100644 --- a/firmware/hw_layer/ports/stm32/stm32_adc_v2.cpp +++ b/firmware/hw_layer/ports/stm32/stm32_adc_v2.cpp @@ -17,8 +17,10 @@ void portInitAdc() { // Init slow ADC adcStart(&ADCD1, NULL); +#if EFI_USE_FAST_ADC // Init fast ADC (MAP sensor) adcStart(&ADCD2, NULL); +#endif // Enable internal temperature reference adcSTM32EnableTSVREFE(); // Internal temperature sensor diff --git a/firmware/hw_layer/ports/stm32/stm32f7/cfg/chconf.h b/firmware/hw_layer/ports/stm32/stm32f7/cfg/chconf.h index b554f671f5..c5193f841b 100644 --- a/firmware/hw_layer/ports/stm32/stm32f7/cfg/chconf.h +++ b/firmware/hw_layer/ports/stm32/stm32f7/cfg/chconf.h @@ -750,8 +750,6 @@ /* Port-specific settings (override port settings defaulted in chcore.h). */ /*===========================================================================*/ -#define CORTEX_VTOR_INIT 0x00200000U - /** * @brief Sleep at idle. * @details This option enables call to __WFI() from idle thread to save power. diff --git a/firmware/hw_layer/ports/stm32/stm32f7/cfg/mcuconf.h b/firmware/hw_layer/ports/stm32/stm32f7/cfg/mcuconf.h index 18e7cf2a70..36ac024ddd 100644 --- a/firmware/hw_layer/ports/stm32/stm32f7/cfg/mcuconf.h +++ b/firmware/hw_layer/ports/stm32/stm32f7/cfg/mcuconf.h @@ -145,13 +145,17 @@ * SDC driver system settings. */ #define STM32_SDC_USE_SDMMC1 FALSE +#define STM32_SDC_USE_SDMMC2 TRUE #define STM32_SDC_SDMMC_UNALIGNED_SUPPORT TRUE #define STM32_SDC_SDMMC_WRITE_TIMEOUT 1000 #define STM32_SDC_SDMMC_READ_TIMEOUT 1000 #define STM32_SDC_SDMMC_CLOCK_DELAY 10 #define STM32_SDC_SDMMC1_DMA_STREAM STM32_DMA_STREAM_ID(2, 3) +#define STM32_SDC_SDMMC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 0) #define STM32_SDC_SDMMC1_DMA_PRIORITY 3 +#define STM32_SDC_SDMMC2_DMA_PRIORITY 3 #define STM32_SDC_SDMMC1_IRQ_PRIORITY 9 +#define STM32_SDC_SDMMC2_IRQ_PRIORITY 9 #include "mcuconf_common_f4_f7.h" diff --git a/firmware/hw_layer/ports/stm32/stm32h7/board.h b/firmware/hw_layer/ports/stm32/stm32h7/board.h index 97af35b48b..27f5d9a31d 100644 --- a/firmware/hw_layer/ports/stm32/stm32h7/board.h +++ b/firmware/hw_layer/ports/stm32/stm32h7/board.h @@ -76,6 +76,12 @@ #define STM32_HSE_BYPASS #endif /* EFI_USE_OSC */ +/* + * Board voltages. + * Required for performance limits calculation. + */ +#define STM32_VDD 330U + /* * MCU type as defined in the ST header. */ diff --git a/firmware/hw_layer/ports/stm32/stm32h7/cfg/chconf.h b/firmware/hw_layer/ports/stm32/stm32h7/cfg/chconf.h index c88834fb66..04848128ab 100644 --- a/firmware/hw_layer/ports/stm32/stm32h7/cfg/chconf.h +++ b/firmware/hw_layer/ports/stm32/stm32h7/cfg/chconf.h @@ -31,6 +31,8 @@ #define _CHIBIOS_RT_CONF_ #define _CHIBIOS_RT_CONF_VER_6_1_ +#include "chconf_common.h" + /*===========================================================================*/ /** * @name System timers settings @@ -38,8 +40,6 @@ */ /*===========================================================================*/ -#include "chconf_common.h" - /** * @brief System time counter resolution. * @note Allowed values are 16, 32 or 64 bits. @@ -54,7 +54,7 @@ * setting also defines the system tick time unit. */ #if !defined(CH_CFG_ST_FREQUENCY) -#define CH_CFG_ST_FREQUENCY 10000 +#define CH_CFG_ST_FREQUENCY 1000 #endif /** @@ -308,7 +308,7 @@ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. */ #if !defined(CH_CFG_USE_DYNAMIC) -#define CH_CFG_USE_DYNAMIC TRUE +#define CH_CFG_USE_DYNAMIC FALSE #endif /** @} */ @@ -329,7 +329,7 @@ * @note Requires @p CH_CFG_USE_SEMAPHORES. */ #if !defined(CH_CFG_USE_MAILBOXES) -#define CH_CFG_USE_MAILBOXES TRUE +#define CH_CFG_USE_MAILBOXES FALSE #endif /** @@ -340,7 +340,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_MEMCORE) -#define CH_CFG_USE_MEMCORE TRUE +#define CH_CFG_USE_MEMCORE FALSE #endif /** @@ -369,7 +369,7 @@ * @note Mutexes are recommended. */ #if !defined(CH_CFG_USE_HEAP) -#define CH_CFG_USE_HEAP TRUE +#define CH_CFG_USE_HEAP FALSE #endif /** @@ -380,7 +380,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_MEMPOOLS) -#define CH_CFG_USE_MEMPOOLS TRUE +#define CH_CFG_USE_MEMPOOLS FALSE #endif /** @@ -391,7 +391,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_OBJ_FIFOS) -#define CH_CFG_USE_OBJ_FIFOS TRUE +#define CH_CFG_USE_OBJ_FIFOS FALSE #endif /** @@ -402,7 +402,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_PIPES) -#define CH_CFG_USE_PIPES TRUE +#define CH_CFG_USE_PIPES FALSE #endif /** @@ -413,7 +413,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_OBJ_CACHES) -#define CH_CFG_USE_OBJ_CACHES TRUE +#define CH_CFG_USE_OBJ_CACHES FALSE #endif /** @@ -424,7 +424,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_DELEGATES) -#define CH_CFG_USE_DELEGATES TRUE +#define CH_CFG_USE_DELEGATES FALSE #endif /** @@ -435,7 +435,7 @@ * @note The default is @p TRUE. */ #if !defined(CH_CFG_USE_JOBS) -#define CH_CFG_USE_JOBS TRUE +#define CH_CFG_USE_JOBS FALSE #endif /** @} */ @@ -455,7 +455,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_CFG_USE_FACTORY) -#define CH_CFG_USE_FACTORY TRUE +#define CH_CFG_USE_FACTORY FALSE #endif /** @@ -471,42 +471,42 @@ * @brief Enables the registry of generic objects. */ #if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) -#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE +#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE #endif /** * @brief Enables factory for generic buffers. */ #if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) -#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE +#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE #endif /** * @brief Enables factory for semaphores. */ #if !defined(CH_CFG_FACTORY_SEMAPHORES) -#define CH_CFG_FACTORY_SEMAPHORES TRUE +#define CH_CFG_FACTORY_SEMAPHORES FALSE #endif /** * @brief Enables factory for mailboxes. */ #if !defined(CH_CFG_FACTORY_MAILBOXES) -#define CH_CFG_FACTORY_MAILBOXES TRUE +#define CH_CFG_FACTORY_MAILBOXES FALSE #endif /** * @brief Enables factory for objects FIFOs. */ #if !defined(CH_CFG_FACTORY_OBJ_FIFOS) -#define CH_CFG_FACTORY_OBJ_FIFOS TRUE +#define CH_CFG_FACTORY_OBJ_FIFOS FALSE #endif /** * @brief Enables factory for Pipes. */ #if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__) -#define CH_CFG_FACTORY_PIPES TRUE +#define CH_CFG_FACTORY_PIPES FALSE #endif /** @} */ @@ -568,7 +568,7 @@ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. */ #if !defined(CH_DBG_TRACE_MASK) -#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_NONE +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED #endif /** @@ -591,7 +591,7 @@ * @p panic_msg variable set to @p NULL. */ #if !defined(CH_DBG_ENABLE_STACK_CHECK) -#define CH_DBG_ENABLE_STACK_CHECK FALSE +#define CH_DBG_ENABLE_STACK_CHECK TRUE #endif /** @@ -602,8 +602,9 @@ * * @note The default is @p FALSE. */ +// see also CH_DBG_STACK_FILL_VALUE #if !defined(CH_DBG_FILL_THREADS) -#define CH_DBG_FILL_THREADS FALSE +#define CH_DBG_FILL_THREADS TRUE #endif /** @@ -616,7 +617,7 @@ * tickless mode. */ #if !defined(CH_DBG_THREADS_PROFILING) -#define CH_DBG_THREADS_PROFILING FALSE +#define CH_DBG_THREADS_PROFILING TRUE #endif /** @} */ @@ -696,6 +697,7 @@ */ #define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ /* System halt code here.*/ \ + chDbgPanic3(reason, __FILE__, __LINE__); \ } /** diff --git a/firmware/hw_layer/ports/stm32/stm32h7/mpu_util.cpp b/firmware/hw_layer/ports/stm32/stm32h7/mpu_util.cpp index 8b13789179..f880cbab0a 100644 --- a/firmware/hw_layer/ports/stm32/stm32h7/mpu_util.cpp +++ b/firmware/hw_layer/ports/stm32/stm32h7/mpu_util.cpp @@ -1 +1,22 @@ +/** + * @file mpu_util.cpp + * + * @date Feb 26, 2021 + * @author Matthew Kennedy, (c) 2021 + */ +#include "flash_int.h" + +size_t flashSectorSize(flashsector_t sector) { + // All sectors on H7 are 128k + return 128 * 1024; +} + +uintptr_t getFlashAddrFirstCopy() { + return 0x08100000; +} + +uintptr_t getFlashAddrSecondCopy() { + // Second copy is one sector past the first + return getFlashAddrFirstCopy() + 128 * 1024; +} diff --git a/firmware/hw_layer/sensors/cj125.cpp b/firmware/hw_layer/sensors/cj125.cpp index 0ee3956c18..9c0efdb2bd 100644 --- a/firmware/hw_layer/sensors/cj125.cpp +++ b/firmware/hw_layer/sensors/cj125.cpp @@ -18,6 +18,7 @@ #include "cj125.h" #include "pwm_generator_logic.h" #include "rpm_calculator.h" +#include "thread_priority.h" EXTERN_ENGINE; @@ -647,7 +648,7 @@ void initCJ125(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { addConsoleAction("cj125_restart", cjRestart); addConsoleAction("cj125_calibrate", cjStartCalibration); - chThdCreateStatic(cj125ThreadStack, sizeof(cj125ThreadStack), LOWPRIO, (tfunc_t)(void*) cjThread, NULL); + chThdCreateStatic(cj125ThreadStack, sizeof(cj125ThreadStack), PRIO_CJ125, (tfunc_t)(void*) cjThread, NULL); #endif /* ! EFI_UNIT_TEST */ } diff --git a/firmware/hw_layer/sensors/hip9011.cpp b/firmware/hw_layer/sensors/hip9011.cpp index 47cab762be..c575713ae3 100644 --- a/firmware/hw_layer/sensors/hip9011.cpp +++ b/firmware/hw_layer/sensors/hip9011.cpp @@ -43,6 +43,7 @@ #include "hip9011.h" #include "adc_inputs.h" #include "perf_trace.h" +#include "thread_priority.h" #include "engine_controller.h" @@ -55,11 +56,6 @@ static NamedOutputPin intHold(PROTOCOL_HIP_NAME); -extern uint32_t lastExecutionCount; - -uint32_t hipLastExecutionCount; - - class Hip9011Hardware : public Hip9011HardwareInterface { void sendSyncCommand(unsigned char command) override; void sendCommand(unsigned char command) override; @@ -190,7 +186,7 @@ void setHip9011FrankensoPinout(void) { // CONFIG(hip9011CsPin) = GPIOD_0; // rev 0.1 CONFIG(isHip9011Enabled) = true; - engineConfiguration->hip9011PrescalerAndSDO = _8MHZ_PRESCALER; // 8MHz chip + engineConfiguration->hip9011PrescalerAndSDO = HIP_8MHZ_PRESCALER; // 8MHz chip CONFIG(is_enabled_spi_2) = true; // todo: convert this to rusEfi, hardware-independent enum #if EFI_PROD_CODE @@ -260,9 +256,6 @@ void intHoldCallback(trigger_event_e ckpEventType, uint32_t index, efitick_t edg // todo: schedule this based on closest trigger event, same as ignition works scheduleByAngle(&startTimer[structIndex], edgeTimestamp, engineConfiguration->knockDetectionWindowStart, &startIntegration); -#if EFI_PROD_CODE - hipLastExecutionCount = lastExecutionCount; -#endif /* EFI_PROD_CODE */ scheduleByAngle(&endTimer[structIndex], edgeTimestamp, engineConfiguration->knockDetectionWindowEnd, &endIntegration); } @@ -315,29 +308,14 @@ void hipAdcCallback(adcsample_t adcValue) { } static void hipStartupCode(void) { -// D[4:1] = 0000 : 4 MHz -// D[4:1] = 0001 : 5 MHz -// D[4:1] = 0010 : 6 MHz -// D[4:1] = 0011 ; 8 MHz -// D[4:1] = 0100 ; 10 MHz -// D[4:1] = 0101 ; 12 MHz -// D[4:1] = 0110 : 16 MHz -// D[4:1] = 0111 : 20 MHz -// D[4:1] = 1000 : 24 MHz - - -// 0 for 4MHz -// 6 for 8 MHz instance.currentPrescaler = engineConfiguration->hip9011PrescalerAndSDO; - instance.hardware->sendSyncCommand(SET_PRESCALER_CMD + instance.currentPrescaler); - + instance.hardware->sendSyncCommand(SET_PRESCALER_CMD(instance.currentPrescaler)); // '0' for channel #1 - instance.hardware->sendSyncCommand(SET_CHANNEL_CMD + 0); + instance.hardware->sendSyncCommand(SET_CHANNEL_CMD(0)); // band index depends on cylinder bore - instance.hardware->sendSyncCommand(SET_BAND_PASS_CMD + instance.currentBandIndex); - + instance.hardware->sendSyncCommand(SET_BAND_PASS_CMD(instance.currentBandIndex)); if (instance.correctResponsesCount == 0) { warning(CUSTOM_OBD_KNOCK_PROCESSOR, "TPIC/HIP does not respond"); @@ -345,7 +323,7 @@ static void hipStartupCode(void) { if (CONFIG(useTpicAdvancedMode)) { // enable advanced mode for digital integrator output - instance.hardware->sendSyncCommand(SET_ADVANCED_MODE); + instance.hardware->sendSyncCommand(SET_ADVANCED_MODE_CMD); } /** @@ -431,7 +409,7 @@ void initHip9011(Logging *sharedLogger) { addConsoleActionI("set_hip_prescalerandsdo", setPrescalerAndSDO); addConsoleActionF("set_knock_threshold", setKnockThresh); addConsoleActionI("set_max_knock_sub_deg", setMaxKnockSubDeg); - chThdCreateStatic(hipThreadStack, sizeof(hipThreadStack), NORMALPRIO, (tfunc_t)(void*) hipThread, NULL); + chThdCreateStatic(hipThreadStack, sizeof(hipThreadStack), PRIO_HIP9011, (tfunc_t)(void*) hipThread, NULL); } #endif /* EFI_HIP_9011 */ diff --git a/firmware/hw_layer/sensors/hip9011.h b/firmware/hw_layer/sensors/hip9011.h index 83f73a65eb..3f6ccec594 100644 --- a/firmware/hw_layer/sensors/hip9011.h +++ b/firmware/hw_layer/sensors/hip9011.h @@ -8,9 +8,6 @@ #pragma once -// 0b01110001 -#define SET_ADVANCED_MODE 0x71 - #define HIP_THREAD_PERIOD 100 void initHip9011(Logging *sharedLogger); diff --git a/firmware/hw_layer/sensors/hip9011_logic.cpp b/firmware/hw_layer/sensors/hip9011_logic.cpp index 60f8f3a775..cce9ee1a9f 100644 --- a/firmware/hw_layer/sensors/hip9011_logic.cpp +++ b/firmware/hw_layer/sensors/hip9011_logic.cpp @@ -85,20 +85,19 @@ void HIP9011::handleValue(int rpm DEFINE_PARAM_SUFFIX(DEFINE_HIP_PARAMS)) { int gainIndex = getHip9011GainIndex(FORWARD_HIP_PARAMS); int bandIndex = getBandIndex(FORWARD_HIP_PARAMS); - if (currentGainIndex != gainIndex) { currentGainIndex = gainIndex; - setStateAndCommand(SET_GAIN_CMD + gainIndex); + setStateAndCommand(SET_GAIN_CMD(gainIndex)); } else if (currentIntergratorIndex != integratorIndex) { currentIntergratorIndex = integratorIndex; - setStateAndCommand(SET_INTEGRATOR_CMD + integratorIndex); + setStateAndCommand(SET_INTEGRATOR_CMD(integratorIndex)); } else if (currentBandIndex != bandIndex) { currentBandIndex = bandIndex; - setStateAndCommand(SET_BAND_PASS_CMD + bandIndex); + setStateAndCommand(SET_BAND_PASS_CMD(bandIndex)); } else if (currentPrescaler != prescalerIndex) { currentPrescaler = prescalerIndex; - setStateAndCommand(SET_PRESCALER_CMD + prescalerIndex); + setStateAndCommand(SET_PRESCALER_CMD(prescalerIndex)); } else { state = READY_TO_INTEGRATE; diff --git a/firmware/hw_layer/sensors/hip9011_logic.h b/firmware/hw_layer/sensors/hip9011_logic.h index add5094bd7..70d825d438 100644 --- a/firmware/hw_layer/sensors/hip9011_logic.h +++ b/firmware/hw_layer/sensors/hip9011_logic.h @@ -99,20 +99,35 @@ float getHIP9011Band(DEFINE_HIP_PARAMS); int getBandIndex(DEFINE_HIP_PARAMS); int getHip9011GainIndex(DEFINE_HIP_PARAMS); -// 0b01000000 -#define SET_PRESCALER_CMD 0x40 +// 0b010x.xxxx +#define SET_PRESCALER_CMD(v) (0x40 | ((v) & 0x1f)) +// 0b1110.000x +#define SET_CHANNEL_CMD(v) (0xE0 | ((v) & 0x01)) +// 0b00xx.xxxx +#define SET_BAND_PASS_CMD(v) (0x00 | ((v) & 0x3f)) +// 0b10xx.xxxx +#define SET_GAIN_CMD(v) (0x80 | ((v) & 0x3f)) +// 0b110x.xxxx +#define SET_INTEGRATOR_CMD(v) (0xC0 | ((v) & 0x1f)) +// 0b0111.0001 +#define SET_ADVANCED_MODE_CMD (0x71) -// 0b11100000 -#define SET_CHANNEL_CMD 0xE0 - -// 0b11000000 -#define SET_INTEGRATOR_CMD 0xC0 - -// 0b00000000 -#define SET_BAND_PASS_CMD 0x0 - -// 0b10000000 -#define SET_GAIN_CMD 0x80 - -#define _8MHZ_PRESCALER 6 +// D[4:1] = 0000 : 4 MHz +#define HIP_4MHZ_PRESCALER (0x0 << 1) +// D[4:1] = 0001 : 5 MHz +#define HIP_5MHZ_PRESCALER (0x1 << 1) +// D[4:1] = 0010 : 6 MHz +#define HIP_6MHZ_PRESCALER (0x2 << 1) +// D[4:1] = 0011 ; 8 MHz +#define HIP_8MHZ_PRESCALER (0x3 << 1) +// D[4:1] = 0100 ; 10 MHz +#define HIP_10MHZ_PRESCALER (0x4 << 1) +// D[4:1] = 0101 ; 12 MHz +#define HIP_12MHZ_PRESCALER (0x5 << 1) +// D[4:1] = 0110 : 16 MHz +#define HIP_16MHZ_PRESCALER (0x6 << 1) +// D[4:1] = 0111 : 20 MHz +#define HIP_20MHZ_PRESCALER (0x7 << 1) +// D[4:1] = 1000 : 24 MHz +#define HIP_24MHZ_PRESCALER (0x8 << 1) diff --git a/firmware/hw_layer/servo.cpp b/firmware/hw_layer/servo.cpp index d90b3f2994..ebed57740e 100644 --- a/firmware/hw_layer/servo.cpp +++ b/firmware/hw_layer/servo.cpp @@ -17,6 +17,7 @@ #if EFI_SERVO || EFI_SIMULATOR #include "servo.h" #include "pin_repository.h" +#include "thread_priority.h" EXTERN_ENGINE; @@ -63,7 +64,7 @@ void initServo(void) { pins[i].initPin("servo", p); } - chThdCreateStatic(servoThreadStack, sizeof(servoThreadStack), NORMALPRIO, (tfunc_t)(void*) seThread, NULL); + chThdCreateStatic(servoThreadStack, sizeof(servoThreadStack), PRIO_SERVO, (tfunc_t)(void*) seThread, NULL); } #endif /* EFI_SERVO */ diff --git a/firmware/hw_layer/stepper.cpp b/firmware/hw_layer/stepper.cpp index 02de44a68f..292b5b623b 100644 --- a/firmware/hw_layer/stepper.cpp +++ b/firmware/hw_layer/stepper.cpp @@ -16,6 +16,7 @@ #include "engine_controller.h" #include "adc_inputs.h" #include "sensor.h" +#include "thread_priority.h" EXTERN_ENGINE; @@ -149,7 +150,7 @@ void StepperMotor::ThreadTask() { } } -StepperMotor::StepperMotor() : ThreadController("stepper", NORMALPRIO) {} +StepperMotor::StepperMotor() : ThreadController("stepper", PRIO_STEPPER) {} int StepperMotor::getTargetPosition() const { return m_targetPosition; diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 0c5f37661e..64db122217 100644 Binary files a/firmware/tunerstudio/generated/cache.zip and b/firmware/tunerstudio/generated/cache.zip differ diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index db69412699..0d170cbf14 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.all.2140302013" + signature = "rusEFI 2021.02.28.all.2140302013" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.all.2140302013" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.all.2140302013" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index d6d6d9239e..71fd92ed03 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.frankenso_na6.4226303790" + signature = "rusEFI 2021.02.28.frankenso_na6.4226303790" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.frankenso_na6.4226303790" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.frankenso_na6.4226303790" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:11 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:54 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen72.ini b/firmware/tunerstudio/generated/rusefi_hellen72.ini index 35e6a34f13..8e28fe8f2d 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen72.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen72.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.hellen72.96926268" + signature = "rusEFI 2021.02.28.hellen72.96926268" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.hellen72.96926268" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.hellen72.96926268" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:04 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:47 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini b/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini index 5d2de1c5f8..a3a41f72da 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.hellen_cypress.1039053165" + signature = "rusEFI 2021.02.28.hellen_cypress.1039053165" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.hellen_cypress.1039053165" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.hellen_cypress.1039053165" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Thu Feb 25 02:57:29 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Sun Feb 28 23:58:13 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 8d71ddf2a7..c6123d8870 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.kin.3259727249" + signature = "rusEFI 2021.02.28.kin.3259727249" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.kin.3259727249" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.kin.3259727249" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Thu Feb 25 02:57:25 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Feb 28 23:58:11 UTC 2021 pageSize = 19972 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 2288fdd338..e6f91aae03 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.mre_f4.1364465751" + signature = "rusEFI 2021.02.28.mre_f4.1364465751" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.mre_f4.1364465751" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.mre_f4.1364465751" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:09 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:52 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index dd0d4fa1aa..298d82c775 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.mre_f7.1364465751" + signature = "rusEFI 2021.02.28.mre_f7.1364465751" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.mre_f7.1364465751" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.mre_f7.1364465751" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:07 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:49 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index f729ef6ae0..9dc6373e86 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.prometheus_405.1829005451" + signature = "rusEFI 2021.02.28.prometheus_405.1829005451" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.prometheus_405.1829005451" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.prometheus_405.1829005451" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:15 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:59 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 38533e305e..d607adbb71 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.prometheus_469.1829005451" + signature = "rusEFI 2021.02.28.prometheus_469.1829005451" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.prometheus_469.1829005451" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.prometheus_469.1829005451" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:13 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:56 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index c9d1648af7..d4c631463c 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.proteus_f4.413377170" + signature = "rusEFI 2021.02.28.proteus_f4.413377170" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.proteus_f4.413377170" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.proteus_f4.413377170" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:19 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:58:07 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index a6193fbbcd..91aade35e8 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.proteus_f7.413377170" + signature = "rusEFI 2021.02.28.proteus_f7.413377170" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.proteus_f7.413377170" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.proteus_f7.413377170" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:17 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:58:03 UTC 2021 pageSize = 20000 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini b/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini index 2a3d759f56..0d3acddbcb 100644 --- a/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2021.02.25.subaru_eg33_f7.3175160971" + signature = "rusEFI 2021.02.28.subaru_eg33_f7.3175160971" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2021.02.25.subaru_eg33_f7.3175160971" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2021.02.28.subaru_eg33_f7.3175160971" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -77,7 +77,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:30 UTC 2021 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:58:15 UTC 2021 pageSize = 20000 page = 1 diff --git a/java_console/autotest/src/com/rusefi/proteus/ProteusAnalogTest.java b/java_console/autotest/src/com/rusefi/proteus/ProteusAnalogTest.java index e2bdbba729..f2ac8a457f 100644 --- a/java_console/autotest/src/com/rusefi/proteus/ProteusAnalogTest.java +++ b/java_console/autotest/src/com/rusefi/proteus/ProteusAnalogTest.java @@ -58,4 +58,16 @@ public class ProteusAnalogTest extends RusefiTestBase { // 100% duty -> failed TPS (voltage too high) setIdlePositionAndAssertTps(98, 0); } + + void assertSensorValue(Sensor sensor, double expected) { + double actual = SensorCentral.getInstance().getValue(sensor); + assertEquals(expected, actual, 0.5); + } + + @Test + public void testUnconnectedInputs() { + // CLT/IAT inputs should float at ~5 volts + assertSensorValue(Sensor.rawClt, 5.0); + assertSensorValue(Sensor.rawIat, 5.0); + } } diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index 449c1e9eb6..6241eb6f62 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Feb 25 02:57:02 UTC 2021 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Feb 28 23:57:45 UTC 2021 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1478,7 +1478,7 @@ public class Fields { public static final char TS_SD_R_COMMAND = 'r'; public static final char TS_SD_W_COMMAND = 'w'; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2021.02.25.all.2140302013"; + public static final String TS_SIGNATURE = "rusEFI 2021.02.28.all.2140302013"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int TT_TT_1_16 = 50; public static final int TT_TT_2JZ_1_12 = 29; diff --git a/java_console/models/src/main/java/com/rusefi/core/Sensor.java b/java_console/models/src/main/java/com/rusefi/core/Sensor.java index 7acde965cd..e588c24557 100644 --- a/java_console/models/src/main/java/com/rusefi/core/Sensor.java +++ b/java_console/models/src/main/java/com/rusefi/core/Sensor.java @@ -118,6 +118,10 @@ public enum Sensor { tuneCrc16("tune crc16", SensorCategory.STATUS, FieldType.UINT16, 244, 0, 5), + // Raw sensors + rawClt("raw CLT", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 238, 1.0 / PACK_MULT_VOLTAGE, 0, 5, "volts"), + rawIat("raw IAT", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 240, 1.0 / PACK_MULT_VOLTAGE, 0, 5, "volts"), + // Synthetic (console only) channels ETB_CONTROL_QUALITY("ETB metric", SensorCategory.SNIFFING, "", 100), ; diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 964a17090b..8e206672f8 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - + diff --git a/misc/pinout-gen/pinout.html b/misc/pinout-gen/pinout.html index b41ddb017f..50bf978b29 100644 --- a/misc/pinout-gen/pinout.html +++ b/misc/pinout-gen/pinout.html @@ -37,40 +37,32 @@ - - - - - + + + + +
Pin NumberFirmware IDTypeTypical FunctionPigtail ColorPin NumberFirmware IDTypeTypical FunctionPigtail Color
- -
-
-
-
-

Full Pinout Table

- - - - - - - - - - - - -
Pin NumberFirmware IDTypeTypical FunctionPigtail Color
-
-
-
-
+
+ + + + + + + + + + + + +
Pin NumberFirmware IDTypeTypical FunctionPigtail Color
+
diff --git a/misc/pinout-gen/script.js b/misc/pinout-gen/script.js index 774f39bc64..736749faa9 100644 --- a/misc/pinout-gen/script.js +++ b/misc/pinout-gen/script.js @@ -12,6 +12,7 @@ function addRow(table, pin, pdiv) { var fdata = clone.querySelector(".function-data"); var cdata = clone.querySelector(".color-data"); pdata.textContent = pin.pin; + pdata.dataset.type = pin.type; idata.textContent = pin.id; tdata.textContent = pin.type fdata.textContent = pin.function; @@ -46,22 +47,6 @@ function clickPin(table, pin, pdiv) { pdiv.classList.add("selected"); } -function adjustMarkers(cdiv) { - var cdiv = document.querySelectorAll(".connector-div"); - for (var c = 0; c < cdiv.length; c++) { - cdiv[c].style.width = cdiv[c].querySelector(".connector-img").clientWidth + "px"; - var pins = cdiv[c].querySelectorAll(".pin-marker"); - for (var i = 0; i < pins.length; i++) { - var height = cdiv[c].clientHeight * 0.05; - pins[i].style.height = height + "px"; - pins[i].style.width = height + "px"; - pins[i].style.marginTop = "-" + (height * 0.5) + "px"; - pins[i].style.marginLeft = "-" + (height * 0.5) + "px"; - pins[i].style.fontSize = (height * 0.5) + "px"; - } - } -} - window.addEventListener('load', function() { for (var c = 0; c < connectorYaml.length; c++) { var connector = YAML.parse(connectorYaml[c]); @@ -71,8 +56,6 @@ window.addEventListener('load', function() { var sdiv = document.body.lastChild.previousSibling; var img = sdiv.querySelector(".connector-img"); img.addEventListener('load', function(connector, sdiv, img) { - var ccont = sdiv.querySelector(".connector-container"); - ccont.style.height = (document.documentElement.clientHeight / 2) + 'px'; var cdiv = sdiv.querySelector(".connector-div"); var ptemplate = document.getElementById("pin-template"); var imgHeight = img.naturalHeight; @@ -84,13 +67,22 @@ window.addEventListener('load', function() { if (!pin.pin) { continue; } - var pinfo; + var pinfo = {}; for (var ii = 0; ii < connector.info.pins.length; ii++) { if (connector.info.pins[ii].pin == pin.pin) { pinfo = connector.info.pins[ii]; break; } } + if (!pinfo.x) continue; + var closest = 1000000; + for (var ii = 0; ii < connector.info.pins.length; ii++) { + var tinfo = connector.info.pins[ii]; + var distance = Math.pow((tinfo.x - pinfo.x), 2) + Math.pow((tinfo.y - pinfo.y), 2); + if (tinfo.pin != pin.pin && (!closest || distance < closest)) { + closest = distance; + } + } var pclone = ptemplate.content.cloneNode(true); var pdiv = pclone.querySelector("div"); pdiv.textContent = pinfo.pin; @@ -100,15 +92,26 @@ window.addEventListener('load', function() { pdiv.addEventListener("click", function(table, pin, pdiv) { clickPin(table, pin, pdiv); }.bind(null, table, pin, pdiv)); + closest = Math.sqrt(closest); + var divheight = cdiv.clientHeight; + var divwidth = cdiv.clientWidth; + var mult = cdiv.querySelector("img").naturalHeight / divheight; + var newheight = (closest / mult) + var pxheight = divheight * 0.08; + if (newheight < pxheight) { + pxheight = newheight - 6; + } + var height = (pxheight / divheight) * 100; + var width = (pxheight / divwidth) * 100; + pdiv.style.height = height + "%"; + pdiv.style.width = width + "%"; + pdiv.style.marginTop = "-" + (width / 2) + "%"; + pdiv.style.marginLeft = "-" + (width / 2) + "%"; + pdiv.style.fontSize = (height / 7.5) + "vw"; cdiv.appendChild(pdiv); addRow(fullTable, connector.pins[i], pdiv); } - adjustMarkers(); }.bind(null, connector, sdiv, img)); img.src = connector.info.image.file; } }); - -window.addEventListener('resize', function() { - adjustMarkers(); -}); diff --git a/misc/pinout-gen/style.css b/misc/pinout-gen/style.css index f1b1bd68e7..2f85cadc70 100644 --- a/misc/pinout-gen/style.css +++ b/misc/pinout-gen/style.css @@ -3,7 +3,7 @@ z-index: 1; border-radius: 50%; background-color: white; - border: 3px black solid; + border: 0.21vw black solid; cursor: pointer; color: black; text-align: center; @@ -118,17 +118,19 @@ width: 100%; overflow-x: scroll; position: relative; + height: max(3in, 50vh); } .connector-div { height: 100%; position: relative; z-index: 0; + width: max-content; } .connector-img { height: 100%; - z-index: 0; + min-width: 100%; } table { @@ -154,8 +156,14 @@ table tbody tr { cursor: pointer; } +@media screen { + td.pin-data { + border-color: black; + } +} + table td, table th { - border: 1px solid black; + border: 1px solid black; padding: 8px; } @@ -181,12 +189,16 @@ table th { color: white; } + td.pin-data { + border: 1px solid #ddd; + } + table td, table th { border: 1px solid #ddd; } table th { - color: white + color: white; } table tr:nth-child(even){ @@ -199,3 +211,59 @@ table th { } } +@media print { + .container { + height: 99vh; + display: flex; + flex-direction: column; + } + .info-table, .id-data, .id-header, .type-data, .type-header, .color-data, .color-header, thead { + display: none; + } + .connector-container { + flex: 0 1 auto; + height: unset; + min-height: 2in; + } + .connector-div { + max-width: 100%; + height: unset; + } + .connector-img { + max-width: 100% !important; + max-height: 3in; + } + h2 { + font-size: 14px; + } + th { + font-size: 12px; + } + td { + font-size: 10px; + } + td:not(.pin-data) { + border: none !important; + } + td.pin-data { + border-width: 3px; + border-radius: 10px; + width: 10px; + margin: 0px; + padding: 0px; + } + html, tr { + background-color: white !important; + color: black !important; + } + table { + width: auto; + border-collapse: separate; + } + .table-wrapper { + column-count: 4; + } + table, tbody, tr { + display: block; + } +} diff --git a/unit_tests/tests/test_hip9011.cpp b/unit_tests/tests/test_hip9011.cpp index 8029425368..eb5ec55cd6 100644 --- a/unit_tests/tests/test_hip9011.cpp +++ b/unit_tests/tests/test_hip9011.cpp @@ -61,23 +61,23 @@ TEST(hip9011, configurationCommands) { HIP9011 instance(&mock); // want to invoke method with same parameters a few times -#define PARAMETERS 600, /* knockBandCustom*/0, /*cylinderBore*/76, /*hip9011Gain*/1, _8MHZ_PRESCALER, 0.0, 50.0 +#define PARAMETERS 600, /* knockBandCustom*/0, /*cylinderBore*/76, /*hip9011Gain*/1, HIP_8MHZ_PRESCALER, 0.0, 50.0 // Not making assumptions on the message send ... EXPECT_CALL(mock, sendSyncCommand(_)).Times(0); - EXPECT_CALL(mock, sendCommand(SET_GAIN_CMD + 0xE)).Times(1); + EXPECT_CALL(mock, sendCommand(SET_GAIN_CMD(0xE))).Times(1); instance.handleValue(PARAMETERS); EXPECT_CALL(mock, sendSyncCommand(_)).Times(0); - EXPECT_CALL(mock, sendCommand(SET_INTEGRATOR_CMD + 0x1C)).Times(1); + EXPECT_CALL(mock, sendCommand(SET_INTEGRATOR_CMD(0x1C))).Times(1); instance.handleValue(PARAMETERS); EXPECT_CALL(mock, sendSyncCommand(_)).Times(0); - EXPECT_CALL(mock, sendCommand(SET_BAND_PASS_CMD + 0x2A)).Times(1); + EXPECT_CALL(mock, sendCommand(SET_BAND_PASS_CMD(0x2A))).Times(1); instance.handleValue(PARAMETERS); EXPECT_CALL(mock, sendSyncCommand(_)).Times(0); - EXPECT_CALL(mock, sendCommand(SET_PRESCALER_CMD + 6)).Times(1); + EXPECT_CALL(mock, sendCommand(SET_PRESCALER_CMD(6))).Times(1); instance.handleValue(PARAMETERS); // initialization is over, no commands should be sent