diff --git a/include/runProc.h b/include/runProc.h index c2eb001..4179216 100755 --- a/include/runProc.h +++ b/include/runProc.h @@ -15,6 +15,7 @@ #include #include "datIf.h" #include +#include #include "sendWRcmd.h" #include "controlBus.h" #include "storeINdata.h" @@ -35,6 +36,10 @@ class T_runProc : public QObject void restoreDeviceParameter(struct T_devices *deviceSettings); +#ifndef THIS_IS_CA_MASTER + std::atomic_bool m_coinAttached{false}; +#endif + private slots: void runProc_slotProcess(void); bool bl_performComplStart(void); diff --git a/src/runProc.cpp b/src/runProc.cpp index 1666de8..a7783d8 100644 --- a/src/runProc.cpp +++ b/src/runProc.cpp @@ -48,8 +48,15 @@ T_runProc::T_runProc() void T_runProc::runProc_slotProcess(void) { #ifndef THIS_IS_CA_MASTER - if (epi_getDI_CoinAttach()) { - emit runProc_coinAttached(); + bool const coinAttached = epi_getDI_CoinAttach(); + // exchange: (atomically) replaces the underlying value of m_coinAttached + // with the value of coinAttached, returns the value of m_coinAttached + // before the call + if (m_coinAttached.exchange(coinAttached) == false) { + if (coinAttached) { + // old value was false, and new value is true + emit runProc_coinAttached(); + } } cash_paymentProcessing(); doors_supervise();