diff --git a/firmware/controllers/sensors/map.cpp b/firmware/controllers/sensors/map.cpp index 571264774d..d32af37c33 100644 --- a/firmware/controllers/sensors/map.cpp +++ b/firmware/controllers/sensors/map.cpp @@ -14,7 +14,7 @@ #include "engine_controller.h" #if EFI_PROD_CODE -#include "digital_input_hw.h" +#include "digital_input_icu.h" #include "digital_input_exti.h" #include "pin_repository.h" #endif @@ -270,7 +270,7 @@ void initMapDecoder(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { #if HAL_USE_ICU digital_input_s* digitalMapInput = startDigitalCapture("MAP freq", CONFIGB(frequencyReportingMapInputPin), true); - digitalMapInput->widthListeners.registerCallback((VoidInt) digitalMapWidthCallback, NULL); + digitalMapInput->setWidthCallback((VoidInt) digitalMapWidthCallback, NULL); #else #if EFI_PROD_CODE efiExtiEnablePin( diff --git a/firmware/development/wave_analyzer.cpp b/firmware/development/wave_analyzer.cpp index 9a60491663..b088eca86a 100644 --- a/firmware/development/wave_analyzer.cpp +++ b/firmware/development/wave_analyzer.cpp @@ -8,7 +8,7 @@ * this is rusEfi build-in logic analyzer * * @date Jan 7, 2013 - * @author Andrey Belomutskiy, (c) 2012-2018 + * @author Andrey Belomutskiy, (c) 2012-2019 */ #include "global.h" @@ -35,7 +35,7 @@ EXTERN_ENGINE; #if EFI_ENGINE_SNIFFER extern WaveChart waveChart; -#endif +#endif /* EFI_ENGINE_SNIFFER */ extern bool hasFirmwareErrorFlag; /** @@ -54,8 +54,6 @@ static void ensureInitialized(WaveReader *reader) { efiAssertVoid(CUSTOM_ERR_6654, reader->hw != NULL && reader->hw->started, "wave analyzer NOT INITIALIZED"); } -#if EFI_WAVE_ANALYZER - static void waAnaWidthCallback(WaveReader *reader) { efitick_t nowUs = getTimeNowUs(); reader->riseEventCounter++; @@ -92,12 +90,9 @@ void WaveReader::onFallEvent() { totalOnTimeAccumulatorUs = 0; waveOffsetUs = nowUs - previousEngineCycleTimeUs; - } periodEventTimeUs = nowUs; - -// uint32_t period = engineCycleDurationUs; // local copy of volatile variable } static void waIcuPeriodCallback(WaveReader *reader) { @@ -120,14 +115,13 @@ static void initWave(const char *name, int index) { reader->hw = startDigitalCapture("wave input", brainPin, mode); if (reader->hw != NULL) { - reader->hw->widthListeners.registerCallback((VoidInt)(void*) waAnaWidthCallback, (void*) reader); + reader->hw->setWidthCallback((VoidInt)(void*) waAnaWidthCallback, (void*) reader); - reader->hw->periodListeners.registerCallback((VoidInt)(void*) waIcuPeriodCallback, (void*) reader); + reader->hw->setPeridoCallback((VoidInt)(void*) waIcuPeriodCallback, (void*) reader); } print("wave%d input on %s\r\n", index, hwPortname(brainPin)); } -#endif WaveReader::WaveReader() { hw = nullptr; @@ -143,14 +137,6 @@ static void waTriggerEventListener(trigger_event_e ckpSignalType, uint32_t index previousEngineCycleTimeUs = nowUs; } -/* -static uint32_t getWaveLowWidth(int index) { - WaveReader *reader = &readers[index]; - ensureInitialized(reader); - return reader->last_wave_low_widthUs; -} -*/ - static float getSignalOnTime(int index) { WaveReader *reader = &readers[index]; ensureInitialized(reader); @@ -172,12 +158,6 @@ static float getSignalPeriodMs(int index) { return reader->signalPeriodUs / 1000.0f; } -//static efitime_t getWidthEventTime(int index) { -// WaveReader *reader = &readers[index]; -// ensureInitialized(reader); -// return reader->widthEventTimeUs; -//} - static void reportWave(Logging *logging, int index) { if (readers[index].hw == NULL) { return; @@ -239,17 +219,16 @@ void initWaveAnalyzer(Logging *sharedLogger) { if (hasFirmwareError()) { return; } -#if EFI_WAVE_ANALYZER + initWave(PROTOCOL_WA_CHANNEL_1, 0); initWave(PROTOCOL_WA_CHANNEL_2, 1); + initWave(PROTOCOL_WA_CHANNEL_3, 2); + initWave(PROTOCOL_WA_CHANNEL_4, 3); addTriggerEventListener(waTriggerEventListener, "wave analyzer", engine); addConsoleAction("waveinfo", showWaveInfo); -#else - print("wave disabled\r\n"); -#endif } -#endif +#endif /* EFI_WAVE_ANALYZER */ diff --git a/firmware/development/wave_analyzer.h b/firmware/development/wave_analyzer.h index e90127ba8b..115d6e902a 100644 --- a/firmware/development/wave_analyzer.h +++ b/firmware/development/wave_analyzer.h @@ -14,7 +14,7 @@ #if EFI_WAVE_ANALYZER -#include "digital_input_hw.h" +#include "digital_input_icu.h" #include "engine_sniffer.h" class WaveReader { diff --git a/firmware/hw_layer/digital_input.cpp b/firmware/hw_layer/digital_input.cpp new file mode 100644 index 0000000000..bb855b89f0 --- /dev/null +++ b/firmware/hw_layer/digital_input.cpp @@ -0,0 +1,16 @@ +/* + * @file digital_input.cpp + * + * @date Nov 11, 2019 + * @author Andrey Belomutskiy, (c) 2012-2019 + */ + +#include "digital_input.h" + +void digital_input_s::setWidthCallback(VoidInt handler, void *arg) { + widthListeners.registerCallback(handler, arg); +} + +void digital_input_s::setPeridoCallback(VoidInt handler, void *arg) { + periodListeners.registerCallback(handler, arg); +} diff --git a/firmware/hw_layer/digital_input.h b/firmware/hw_layer/digital_input.h index 3c3add5fb4..5bada2b1f4 100644 --- a/firmware/hw_layer/digital_input.h +++ b/firmware/hw_layer/digital_input.h @@ -20,4 +20,8 @@ typedef struct { brain_pin_e brainPin = GPIO_UNASSIGNED; IntListenerArray<1> widthListeners; IntListenerArray<1> periodListeners; + + // Width/Period names are historically inherited from ICU implementation, todo: migrate to better names, high/low? rise/hall? + void setWidthCallback(VoidInt handler, void *arg); + void setPeridoCallback(VoidInt handler, void *arg); } digital_input_s; diff --git a/firmware/hw_layer/digital_input_hw.cpp b/firmware/hw_layer/digital_input_icu.cpp similarity index 99% rename from firmware/hw_layer/digital_input_hw.cpp rename to firmware/hw_layer/digital_input_icu.cpp index 9d2e9c6b63..36e536e5b5 100644 --- a/firmware/hw_layer/digital_input_hw.cpp +++ b/firmware/hw_layer/digital_input_icu.cpp @@ -1,5 +1,5 @@ /* - * @file digital_input_hw.cpp + * @file digital_input_icu.cpp * @brief Helper methods related to Input Capture Unit (ICU) * * There are some ChibiOS limitation or STM32 limitations or limitations of my brain @@ -24,7 +24,8 @@ * @author Andrey Belomutskiy, (c) 2012-2018 */ -#include "digital_input_hw.h" +#include "digital_input_icu.h" + #include "fl_stack.h" #if EFI_ICU_INPUTS diff --git a/firmware/hw_layer/digital_input_hw.h b/firmware/hw_layer/digital_input_icu.h similarity index 96% rename from firmware/hw_layer/digital_input_hw.h rename to firmware/hw_layer/digital_input_icu.h index 7fe253c79f..74cd4b17ba 100644 --- a/firmware/hw_layer/digital_input_hw.h +++ b/firmware/hw_layer/digital_input_icu.h @@ -1,5 +1,5 @@ /** - * @file digital_input_hw.h + * @file digital_input_icu.h * * @date Jun 23, 2013 * @author Andrey Belomutskiy, (c) 2012-2019 diff --git a/firmware/hw_layer/hw_layer.mk b/firmware/hw_layer/hw_layer.mk index 607d0bd679..8a6493e963 100644 --- a/firmware/hw_layer/hw_layer.mk +++ b/firmware/hw_layer/hw_layer.mk @@ -13,7 +13,8 @@ HW_LAYER_EMS = $(HW_LAYER_EGT) \ HW_LAYER_EMS_CPP = $(HW_LAYER_EGT_CPP) \ $(PROJECT_DIR)/hw_layer/pin_repository.cpp \ $(PROJECT_DIR)/hw_layer/microsecond_timer.cpp \ - $(PROJECT_DIR)/hw_layer/digital_input_hw.cpp \ + $(PROJECT_DIR)/hw_layer/digital_input.cpp \ + $(PROJECT_DIR)/hw_layer/digital_input_icu.cpp \ $(PROJECT_DIR)/hw_layer/digital_input_exti.cpp \ $(PROJECT_DIR)/hw_layer/hardware.cpp \ $(PROJECT_DIR)/hw_layer/smart_gpio.cpp \ diff --git a/firmware/hw_layer/sensors/joystick.cpp b/firmware/hw_layer/sensors/joystick.cpp index 5190a2b2ee..45bee159a8 100644 --- a/firmware/hw_layer/sensors/joystick.cpp +++ b/firmware/hw_layer/sensors/joystick.cpp @@ -7,7 +7,7 @@ * TODO: separate EXTI layer from joystick logic * You cannot use two pins with same index for EXTI (for instance PA5 and PE5) since these would * be using same EXTI line. See https://stm32f4-discovery.net/2014/08/stm32f4-external-interrupts-tutorial/ - * See also comments in digital_input_hw.cpp + * See also comments in digital_input_icu.cpp * * @date Jan 2, 2015 * @author Andrey Belomutskiy, (c) 2012-2018 diff --git a/firmware/hw_layer/trigger_input_comp.cpp b/firmware/hw_layer/trigger_input_comp.cpp index c032d9e3f6..307485ce5e 100644 --- a/firmware/hw_layer/trigger_input_comp.cpp +++ b/firmware/hw_layer/trigger_input_comp.cpp @@ -14,7 +14,7 @@ #include "hal_comp.h" #include "trigger_input.h" -#include "digital_input_hw.h" +#include "digital_input_icu.h" extern bool hasFirmwareErrorFlag; diff --git a/firmware/hw_layer/trigger_input_exti.cpp b/firmware/hw_layer/trigger_input_exti.cpp index 92e8032097..493a153725 100644 --- a/firmware/hw_layer/trigger_input_exti.cpp +++ b/firmware/hw_layer/trigger_input_exti.cpp @@ -4,7 +4,7 @@ * * todo: VVT implementation is a nasty copy-paste :( * - * see digital_input_hw.cp + * see digital_input_icu.cp * * @date Dec 30, 2012 * @author Andrey Belomutskiy, (c) 2012-2019 diff --git a/firmware/hw_layer/trigger_input_icu.cpp b/firmware/hw_layer/trigger_input_icu.cpp index 9992b87a8e..bfdf516bd5 100644 --- a/firmware/hw_layer/trigger_input_icu.cpp +++ b/firmware/hw_layer/trigger_input_icu.cpp @@ -2,11 +2,11 @@ * @file trigger_input_icu.cpp * @brief Position sensor hardware layer - ICU version * - * todo: code reuse with digital_input_hw.cpp was never finished + * todo: code reuse with digital_input_icu.cpp was never finished * todo: at the moment due to half-done code reuse we already depend on EFI_ICU_INPUTS but still have custom code * todo: VVT implementation is a nasty copy-paste :( * - * see digital_input_hw.cp + * see digital_input_icu.cpp * * @date Dec 30, 2012 * @author Andrey Belomutskiy, (c) 2012-2019 @@ -20,7 +20,7 @@ volatile int icuWidthPeriodCounter = 0; #if EFI_SHAFT_POSITION_INPUT && (HAL_USE_ICU == TRUE) && (HAL_USE_COMP == FALSE) #include "trigger_input.h" -#include "digital_input_hw.h" +#include "digital_input_icu.h" EXTERN_ENGINE; diff --git a/firmware/hw_layer/vehicle_speed.cpp b/firmware/hw_layer/vehicle_speed.cpp index 19cd661c62..ec966694a6 100644 --- a/firmware/hw_layer/vehicle_speed.cpp +++ b/firmware/hw_layer/vehicle_speed.cpp @@ -10,7 +10,7 @@ #if EFI_VEHICLE_SPEED #include "engine.h" -#include "digital_input_hw.h" +#include "digital_input_icu.h" #include "pin_repository.h" EXTERN_ENGINE