altos/vidtime: Check for value change in normal code, not irq
authorKeith Packard <keithp@keithp.com>
Thu, 17 May 2018 05:05:26 +0000 (22:05 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 17 May 2018 05:06:12 +0000 (22:06 -0700)
This makes sure each value change is reported to the user.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/vidtime/ao_vidtime.c

index e7f2c2191ae9508826a2824502e82da6fb479896..1b9b9e1c71e432a8c4b6b2a203e9a79b520d5425 100644 (file)
@@ -24,33 +24,25 @@ static uint8_t      vidtime_monitor;
 static void
 vidtime(void)
 {
+       uint8_t old = 0, got;
+
        ao_exti_enable(AO_SENSOR_PORT, AO_SENSOR_PIN);
        for (;;) {
                while (!vidtime_monitor)
                        ao_sleep(&vidtime_monitor);
-               ao_sleep(&sensor_value);
-               printf("%d\n", sensor_value);
+               while ((got = sensor_value) == old)
+                       ao_sleep(&sensor_value);
+               printf("%d\n", got);
                flush();
+               old = got;
        }
 }
 
 static void
 sensor_interrupt(void)
 {
-       uint8_t new = ao_gpio_get(AO_SENSOR_PORT, AO_SENSOR_PIN, foo);
-
-#if 0
-       if (new)
-               ao_exti_set_mode(AO_SENSOR_PORT, AO_SENSOR_PIN,
-                                AO_EXTI_MODE_FALLING);
-       else
-               ao_exti_set_mode(AO_SENSOR_PORT, AO_SENSOR_PIN,
-                                AO_EXTI_MODE_RISING);
-#endif
-       if (new != sensor_value) {
-               sensor_value = new;
-               ao_wakeup(&sensor_value);
-       }
+       sensor_value = ao_gpio_get(AO_SENSOR_PORT, AO_SENSOR_PIN, foo);
+       ao_wakeup(&sensor_value);
 }
 
 static struct ao_task  vidtime_task;