trigger: exti: callback parameter is now index

This commit is contained in:
rusefillc 2021-01-31 22:10:10 -05:00
parent a411e0d1af
commit d116101e1a
4 changed files with 17 additions and 23 deletions

View File

@ -2,7 +2,7 @@
* digital_input_exti.cpp * digital_input_exti.cpp
* *
* Created on: Dec 18, 2018 * Created on: Dec 18, 2018
* @author Andrey Belomutskiy, (c) 2012-2020 * @author Andrey Belomutskiy, (c) 2012-2021
*/ */
#include "global.h" #include "global.h"

View File

@ -2,7 +2,7 @@
* @file trigger_input.cpp * @file trigger_input.cpp
* *
* @date Nov 11, 2019 * @date Nov 11, 2019
* @author Andrey Belomutskiy, (c) 2012-2020 * @author Andrey Belomutskiy, (c) 2012-2021
*/ */
#include "global.h" #include "global.h"
@ -22,7 +22,6 @@ EXTERN_ENGINE;
void icuTriggerTurnOnInputPins(Logging *sharedLogger); void icuTriggerTurnOnInputPins(Logging *sharedLogger);
int icuTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft); int icuTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft);
void icuTriggerTurnOffInputPin(brain_pin_e brainPin); void icuTriggerTurnOffInputPin(brain_pin_e brainPin);
void icuTriggerSetPrimaryChannel(brain_pin_e brainPin);
#else #else
#define icuTriggerTurnOnInputPins(sharedLogger) ((void)0) #define icuTriggerTurnOnInputPins(sharedLogger) ((void)0)
int icuTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) { int icuTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) {
@ -33,14 +32,12 @@ EXTERN_ENGINE;
return -2; return -2;
} }
#define icuTriggerTurnOffInputPin(brainPin) ((void)0) #define icuTriggerTurnOffInputPin(brainPin) ((void)0)
#define icuTriggerSetPrimaryChannel(brainPin) ((void)0)
#endif #endif
#if (HAL_TRIGGER_USE_PAL == TRUE) #if (HAL_TRIGGER_USE_PAL == TRUE)
void extiTriggerTurnOnInputPins(Logging *sharedLogger); void extiTriggerTurnOnInputPins(Logging *sharedLogger);
int extiTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft); int extiTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft);
void extiTriggerTurnOffInputPin(brain_pin_e brainPin); void extiTriggerTurnOffInputPin(brain_pin_e brainPin);
void extiTriggerSetPrimaryChannel(brain_pin_e brainPin);
#else #else
#define extiTriggerTurnOnInputPins(sharedLogger) ((void)0) #define extiTriggerTurnOnInputPins(sharedLogger) ((void)0)
int extiTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) { int extiTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) {
@ -51,7 +48,6 @@ EXTERN_ENGINE;
return -2; return -2;
} }
#define extiTriggerTurnOffInputPin(brainPin) ((void)0) #define extiTriggerTurnOffInputPin(brainPin) ((void)0)
#define extiTriggerSetPrimaryChannel(brainPin) ((void)0)
#endif #endif
enum triggerType { enum triggerType {
@ -163,9 +159,6 @@ void startTriggerInputPins(void) {
turnOnTriggerInputPin("Cam", i, false); turnOnTriggerInputPin("Cam", i, false);
} }
} }
icuTriggerSetPrimaryChannel(CONFIG(triggerInputPins)[0]);
extiTriggerSetPrimaryChannel(CONFIG(triggerInputPins)[0]);
} }
void turnOnTriggerInputPins(Logging *sharedLogger) { void turnOnTriggerInputPins(Logging *sharedLogger) {

View File

@ -7,7 +7,7 @@
* see digital_input_icu.cp * see digital_input_icu.cp
* *
* @date Dec 30, 2012 * @date Dec 30, 2012
* @author Andrey Belomutskiy, (c) 2012-2020 * @author Andrey Belomutskiy, (c) 2012-2021
*/ */
#include "global.h" #include "global.h"
@ -24,7 +24,9 @@
static Logging *logger; static Logging *logger;
EXTERN_ENGINE; EXTERN_ENGINE;
static ioline_t primary_line;
static ioline_t shaftLines[TRIGGER_SUPPORTED_CHANNELS];
static ioline_t camLines[CAM_INPUTS_COUNT];
static void shaft_callback(void *arg) { static void shaft_callback(void *arg) {
// do the time sensitive things as early as possible! // do the time sensitive things as early as possible!
@ -32,13 +34,14 @@ static void shaft_callback(void *arg) {
if (!engine->hwTriggerInputEnabled) { if (!engine->hwTriggerInputEnabled) {
return; return;
} }
ioline_t pal_line = (ioline_t)arg; int index = (int)arg;
ioline_t pal_line = shaftLines[index];
bool rise = (palReadLine(pal_line) == PAL_HIGH); bool rise = (palReadLine(pal_line) == PAL_HIGH);
// todo: support for 3rd trigger input channel // todo: support for 3rd trigger input channel
// todo: start using real event time from HW event, not just software timer? // todo: start using real event time from HW event, not just software timer?
bool isPrimary = pal_line == primary_line; bool isPrimary = index == 0;
if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) { if (!isPrimary && !TRIGGER_WAVEFORM(needSecondTriggerInput)) {
return; return;
} }
@ -64,7 +67,8 @@ static void cam_callback(void *arg) {
return; return;
} }
ioline_t pal_line = (ioline_t)arg; int index = (int)arg;
ioline_t pal_line = camLines[index];
bool rise = (palReadLine(pal_line) == PAL_HIGH); bool rise = (palReadLine(pal_line) == PAL_HIGH);
@ -88,7 +92,12 @@ int extiTriggerTurnOnInputPin(const char *msg, int index, bool isTriggerShaft) {
* * do not set to both edges if we need only one * * do not set to both edges if we need only one
* * simplify callback in case of one edge */ * * simplify callback in case of one edge */
ioline_t pal_line = PAL_LINE(getHwPort("trg", brainPin), getHwPin("trg", brainPin)); ioline_t pal_line = PAL_LINE(getHwPort("trg", brainPin), getHwPin("trg", brainPin));
efiExtiEnablePin(msg, brainPin, PAL_EVENT_MODE_BOTH_EDGES, isTriggerShaft ? shaft_callback : cam_callback, (void *)pal_line); if (isTriggerShaft) {
shaftLines[index] = pal_line;
} else {
camLines[index] = pal_line;
}
efiExtiEnablePin(msg, brainPin, PAL_EVENT_MODE_BOTH_EDGES, isTriggerShaft ? shaft_callback : cam_callback, (void *)index);
return 0; return 0;
} }
@ -97,10 +106,6 @@ void extiTriggerTurnOffInputPin(brain_pin_e brainPin) {
efiExtiDisablePin(brainPin); efiExtiDisablePin(brainPin);
} }
void extiTriggerSetPrimaryChannel(brain_pin_e brainPin) {
primary_line = PAL_LINE(getHwPort("trg", brainPin), getHwPin("trg", brainPin));
}
void extiTriggerTurnOnInputPins(Logging *sharedLogger) { void extiTriggerTurnOnInputPins(Logging *sharedLogger) {
logger = sharedLogger; logger = sharedLogger;
} }

View File

@ -128,10 +128,6 @@ void icuTriggerTurnOffInputPin(brain_pin_e brainPin) {
stopDigitalCapture("trigger", brainPin); stopDigitalCapture("trigger", brainPin);
} }
void icuTriggerSetPrimaryChannel(brain_pin_e brainPin) {
(void)brainPin;
}
void icuTriggerTurnOnInputPins(Logging *sharedLogger) { void icuTriggerTurnOnInputPins(Logging *sharedLogger) {
logger = sharedLogger; logger = sharedLogger;
} }