]> Johnzone git - FakeRadio.git/commitdiff
use bool to flag actual change
authorJohn Janus <mail@johnzone.org>
Fri, 6 Oct 2017 21:40:02 +0000 (23:40 +0200)
committerJohn Janus <mail@johnzone.org>
Fri, 6 Oct 2017 21:40:02 +0000 (23:40 +0200)
simple_try.c

index 32f429889255de368181fef0638f75e0c5778916..026ee4afabe81aa6823a035f9e701499c9fc3a02 100644 (file)
@@ -27,7 +27,7 @@ static volatile bool chnl1 = true;
 static volatile bool intro = false;
 static volatile bool horn = false;
 static volatile bool delaying = false;
-//static volatile bool sthchanged = false;
+static volatile bool sthchanged = false;
 static pthread_cond_t* wakeup;
 static pthread_mutex_t* mut;
 static pthread_t playThread;
@@ -50,6 +50,7 @@ void pwrBtn(void) {
     if (pwrstate==digitalRead(PWRBTN)) {
         pwrOn = !pwrOn;
         if (pwrOn) intro = false;
+        sthchanged = true;
     }
     pthread_mutex_unlock(mut);
     pthread_cond_signal(wakeup);
@@ -62,6 +63,7 @@ void chnl1Btn(void) {
     delay(UNPRELL);
     if (chnl1state==digitalRead(CHNL1BTN)) {
         chnl1 = true;
+        sthchanged = true;
     }
     pthread_mutex_unlock(mut);
     pthread_cond_signal(wakeup);
@@ -74,6 +76,7 @@ void chnl2Btn(void) {
     delay(UNPRELL);
     if (chnl2state==digitalRead(CHNL2BTN)) {
         chnl1 = false;
+        sthchanged = true;
     }
     pthread_mutex_unlock(mut);
     pthread_cond_signal(wakeup);
@@ -87,6 +90,7 @@ void introBtn(void) {
     if (introstate==digitalRead(INTROBTN)) {
         intro = !intro;
         horn = false;
+        sthchanged = true;
     }
     pthread_mutex_unlock(mut);
     pthread_cond_signal(wakeup);
@@ -100,6 +104,7 @@ void hornBtn(void) {
     if (hornstate==digitalRead(HORNBTN)) {
         horn = !horn;
         intro = false;
+        sthchanged = true;
     }
     pthread_mutex_unlock(mut);
     pthread_cond_signal(wakeup);
@@ -146,6 +151,11 @@ int main(void) {
     while (running) {
         pthread_mutex_lock(mut);
         pthread_cond_wait(wakeup, mut);
+        if (!sthchanged) {
+            pthread_mutex_unlock(mut);
+            continue;
+        }
+        sthchanged = false;
         delaying = true;
         if (playThread) {
             pthread_cancel(playThread);