From 7afc5e23d668a08330889a0eb8749e1692ef83f4 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Thu, 9 Feb 2023 20:44:30 +0100 Subject: [PATCH] Make interrupts more safe --- AfRApay.MateCard/src/main.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/AfRApay.MateCard/src/main.cpp b/AfRApay.MateCard/src/main.cpp index c6fb791..110f706 100644 --- a/AfRApay.MateCard/src/main.cpp +++ b/AfRApay.MateCard/src/main.cpp @@ -56,11 +56,11 @@ const int scanTimeout = 15000; String scannedCardId = ""; String lastStatusText = ""; -bool interruptFired = false; +volatile bool interruptFired = false; unsigned long timer = 0; void IRAM_ATTR TransactInterruptHandler() { - if (interruptFired || state != STATE_IDLE) { + if (interruptFired || state != STATE_IDLE || digitalRead(PIN_INTERRUPT_TRANSACT)) { return; } interruptFired = true; @@ -68,7 +68,7 @@ void IRAM_ATTR TransactInterruptHandler() { } void IRAM_ATTR LinkInterruptHandler() { - if (interruptFired || state != STATE_IDLE) { + if (interruptFired || state != STATE_IDLE || digitalRead(PIN_INTERRUPT_LINK)) { return; } interruptFired = true; @@ -76,7 +76,7 @@ void IRAM_ATTR LinkInterruptHandler() { } void IRAM_ATTR BalanceInterruptHandler() { - if (interruptFired || state != STATE_IDLE) { + if (interruptFired || state != STATE_IDLE || digitalRead(PIN_INTERRUPT_BALANCE)) { return; } interruptFired = true; @@ -84,6 +84,8 @@ void IRAM_ATTR BalanceInterruptHandler() { } void IRAM_ATTR CancelInterruptHandler() { + if (digitalRead(PIN_INTERRUPT_LINK)) + return; state = STATE_IDLE; }