refactoring: time to unify digital pin API

This commit is contained in:
rusefi 2019-11-11 23:04:27 -05:00
parent 15a571fb3e
commit f082ac48b1
7 changed files with 41 additions and 40 deletions

View File

@ -268,8 +268,7 @@ void initMapDecoder(Logging *sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) {
if (engineConfiguration->hasFrequencyReportingMapSensor) {
#if HAL_USE_ICU
digital_input_s* digitalMapInput = addWaveAnalyzerDriver("map freq", CONFIGB(frequencyReportingMapInputPin));
startInputDriver("MAP", digitalMapInput, true);
digital_input_s* digitalMapInput = startDigitalCapture("MAP freq", CONFIGB(frequencyReportingMapInputPin), true);
digitalMapInput->widthListeners.registerCallback((VoidInt) digitalMapWidthCallback, NULL);
#else

View File

@ -104,18 +104,6 @@ static void waIcuPeriodCallback(WaveReader *reader) {
reader->onFallEvent();
}
static void setWaveModeSilent(int index, int mode) {
WaveReader *reader = &readers[index];
startInputDriver("wave", reader->hw, mode);
}
//static int getEventCounter(int index) {
// WaveReader *reader = &readers[index];
// ensureInitialized(reader);
// return reader->eventCounter;
//}
static void initWave(const char *name, int index) {
brain_pin_e brainPin = CONFIGB(logicAnalyzerPins)[index];
@ -129,7 +117,8 @@ static void initWave(const char *name, int index) {
WaveReader *reader = &readers[index];
reader->name = name;
reader->hw = addWaveAnalyzerDriver("wave input", brainPin);
reader->hw = startDigitalCapture("wave input", brainPin, mode);
if (reader->hw != NULL) {
reader->hw->widthListeners.registerCallback((VoidInt)(void*) waAnaWidthCallback, (void*) reader);
@ -137,7 +126,6 @@ static void initWave(const char *name, int index) {
}
print("wave%d input on %s\r\n", index, hwPortname(brainPin));
startInputDriver("wave", reader->hw, mode);
}
#endif
@ -259,7 +247,6 @@ void initWaveAnalyzer(Logging *sharedLogger) {
addConsoleAction("waveinfo", showWaveInfo);
addConsoleActionII("set_logic_input_mode", setWaveModeSilent);
#else
print("wave disabled\r\n");
#endif

View File

@ -0,0 +1,23 @@
/*
* @file digital_input.h
*
* @date Nov 11, 2019
* @author Andrey Belomutskiy, (c) 2012-2019
*/
#pragma once
#include "global.h"
#include "listener_array.h"
typedef struct {
#if HAL_USE_ICU
ICUDriver *driver;
#endif /* HAL_USE_ICU */
bool isActiveHigh = false;
volatile bool started = false;
brain_pin_e brainPin = GPIO_UNASSIGNED;
IntListenerArray<1> widthListeners;
IntListenerArray<1> periodListeners;
} digital_input_s;

View File

@ -2,17 +2,12 @@
* digital_input_exti.h
*
* Created on: Dec 18, 2018
* @author Andrey Belomutskiy, (c) 2012-2018
* @author Andrey Belomutskiy, (c) 2012-2019
*/
#ifndef HW_LAYER_DIGITAL_INPUT_EXTI_H_
#define HW_LAYER_DIGITAL_INPUT_EXTI_H_
#include "global.h"
#include "digital_input.h"
#if HAL_USE_PAL
int efiExtiEnablePin(const char *msg, brain_pin_e pin, uint32_t mode, palcallback_t cb, void *cb_data);
void efiExtiDisablePin(brain_pin_e brainPin);
#endif /* HAL_USE_PAL */
#endif /* HW_LAYER_DIGITAL_INPUT_EXTI_H_ */

View File

@ -288,4 +288,10 @@ void startInputDriver(const char *msg, /*nullable*/digital_input_s *hw, bool isA
hw->started = true;
}
digital_input_s* startDigitalCapture(const char *msg, brain_pin_e brainPin, bool isActiveHigh) {
digital_input_s* input = addWaveAnalyzerDriver(msg, brainPin);
startInputDriver(msg, input, isActiveHigh);
return input;
}
#endif /* EFI_ICU_INPUTS */

View File

@ -2,32 +2,24 @@
* @file digital_input_hw.h
*
* @date Jun 23, 2013
* @author Andrey Belomutskiy, (c) 2012-2017
* @author Andrey Belomutskiy, (c) 2012-2019
*/
#ifndef DIGITAL_INPUT_HW_H_
#define DIGITAL_INPUT_HW_H_
#pragma once
#include "global.h"
#include "digital_input.h"
#if HAL_USE_ICU
#include "listener_array.h"
typedef struct {
ICUDriver *driver;
bool isActiveHigh; // false for ICU_INPUT_ACTIVE_LOW, true for ICU_INPUT_ACTIVE_HIGH
volatile bool started;
brain_pin_e brainPin;
IntListenerArray<1> widthListeners;
IntListenerArray<1> periodListeners;
} digital_input_s;
digital_input_s* startDigitalCapture(const char *msg, brain_pin_e brainPin, bool isActiveHigh);
void turnOnCapturePin(const char *msg, brain_pin_e brainPin);
void turnOffCapturePin(brain_pin_e brainPin);
// deprecated API
digital_input_s *addWaveAnalyzerDriver(const char *msg, brain_pin_e brainPin);
void startInputDriver(const char *msg, /*nullable*/digital_input_s *hw, bool isActiveHigh);
void removeWaveAnalyzerDriver(const char *msg, brain_pin_e brainPin);
//Nullable
@ -37,4 +29,3 @@ icuchannel_t getInputCaptureChannel(brain_pin_e hwPin);
#endif /* HAL_USE_ICU */
#endif /* DIGITAL_INPUT_HW_H_ */

View File

@ -28,7 +28,7 @@ public:
void registerCallback(VoidInt handler, void *arg);
void registerCallback(Void listener);
void invokeJustArgCallbacks() const;
int currentListenersCount;
int currentListenersCount = 0;
VoidInt callbacks[MAX_INT_LISTENER_COUNT];
void * args[MAX_INT_LISTENER_COUNT];
};