diff options
Diffstat (limited to 'spaghetti-monster')
| -rwxr-xr-x | spaghetti-monster/anduril/anduril.c | 14 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-events.c | 8 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-main.c | 2 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-misc.c | 10 |
4 files changed, 20 insertions, 14 deletions
diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c index 3637c3d..bf16da5 100755 --- a/spaghetti-monster/anduril/anduril.c +++ b/spaghetti-monster/anduril/anduril.c @@ -809,7 +809,7 @@ uint8_t strobe_state(EventPtr event, uint16_t arg) { #ifdef USE_CANDLE_MODE candle_mode_timer = 0; // in case any time was left over from earlier #endif - interrupt_nice_delays(); + //interrupt_nice_delays(); save_config(); return MISCHIEF_MANAGED; } @@ -1832,13 +1832,13 @@ void loop() { brightness += pseudo_rand() % brightness; // 2 to 159 now (w/ low bias) if (brightness > MAX_LEVEL) brightness = MAX_LEVEL; set_level(brightness); - if (! nice_delay_ms(rand_time)) return; + nice_delay_ms(rand_time); // decrease the brightness somewhat more gradually, like lightning uint8_t stepdown = brightness >> 3; if (stepdown < 1) stepdown = 1; while(brightness > 1) { - if (! nice_delay_ms(rand_time)) return; + nice_delay_ms(rand_time); brightness -= stepdown; if (brightness < 0) brightness = 0; set_level(brightness); @@ -1849,7 +1849,7 @@ void loop() { } */ if (! (pseudo_rand() & 3)) { - if (! nice_delay_ms(rand_time)) return; + nice_delay_ms(rand_time); set_level(brightness>>1); } } @@ -1877,9 +1877,9 @@ void loop() { if (burst > MAX_LEVEL) burst = MAX_LEVEL; for(uint8_t i=0; i<4; i++) { set_level(burst); - if (! nice_delay_ms(5)) return; + nice_delay_ms(5); set_level(bike_flasher_brightness); - if (! nice_delay_ms(65)) return; + nice_delay_ms(65); } nice_delay_ms(720); // no return check necessary on final delay } @@ -1903,7 +1903,7 @@ void loop() { else if (state == beacon_state) { set_level(memorized_level); - if (! nice_delay_ms(500)) return; + nice_delay_ms(500); set_level(0); nice_delay_ms(((beacon_seconds) * 1000) - 500); } diff --git a/spaghetti-monster/fsm-events.c b/spaghetti-monster/fsm-events.c index b8e9018..aa5c3d6 100644 --- a/spaghetti-monster/fsm-events.c +++ b/spaghetti-monster/fsm-events.c @@ -39,6 +39,12 @@ uint8_t compare_event_sequences(uint8_t *a, const uint8_t *b) { void empty_event_sequence() { for(uint8_t i=0; i<EV_MAX_LEN; i++) current_event[i] = 0; + // when the user completes an input sequence, interrupt any running timers + // to cancel any delays currently in progress + // This eliminates a whole bunch of extra code: + // before: if (! nice_delay_ms(ms)) {break;} + // after: nice_delay_ms(ms); + interrupt_nice_delays(); } uint8_t push_event(uint8_t ev_type) { @@ -156,7 +162,7 @@ uint8_t nice_delay_ms(uint16_t ms) { process_emissions(); if ((nice_delay_interrupt) || (old_state != current_state)) { - nice_delay_interrupt = 0; + //nice_delay_interrupt = 0; return 0; // state changed; abort } } diff --git a/spaghetti-monster/fsm-main.c b/spaghetti-monster/fsm-main.c index b0b44fb..6f74e9b 100644 --- a/spaghetti-monster/fsm-main.c +++ b/spaghetti-monster/fsm-main.c @@ -132,6 +132,8 @@ int main() { // give the recipe some time slices loop(); + // in case we fell through, turn delays back on + nice_delay_interrupt = 0; } } diff --git a/spaghetti-monster/fsm-misc.c b/spaghetti-monster/fsm-misc.c index acef28c..e60909e 100644 --- a/spaghetti-monster/fsm-misc.c +++ b/spaghetti-monster/fsm-misc.c @@ -49,11 +49,9 @@ uint8_t blink_digit(uint8_t num) { for (; num>0; num--) { set_level(BLINK_BRIGHTNESS); - if (! nice_delay_ms(ontime)) { return 0; } + nice_delay_ms(ontime); set_level(0); - //if (current_state != old_state) return 0; - if (! nice_delay_ms(400)) return 0; - //if (current_state != old_state) return 0; + nice_delay_ms(400); } return nice_delay_ms(600); } @@ -77,7 +75,7 @@ uint8_t blink_num(uint8_t num) { #if 0 // wait a moment in the dark before starting set_level(0); - if (! nice_delay_ms(200)) return 0; + nice_delay_ms(200); #endif #if 0 @@ -102,7 +100,7 @@ uint8_t blink_num(uint8_t num) { volts = voltage / 10; tenths = voltage % 10; if (! blink(volts)) return; - if (! nice_delay_ms(200)) return; + nice_delay_ms(200); if (! blink(tenths)) return; nice_delay_ms(200); */ |
