diff options
| author | Selene ToyKeeper | 2018-08-22 23:28:35 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2018-08-22 23:28:35 -0600 |
| commit | 0499082b50b00d942e00d2d272a0c74b4c5ca1cd (patch) | |
| tree | 95d10d2cdce1b62c2288bb28064bf519b0dfabf3 | |
| parent | Rearranged strobe group mode order, fixed party strobe. (diff) | |
| download | anduril-0499082b50b00d942e00d2d272a0c74b4c5ca1cd.tar.gz anduril-0499082b50b00d942e00d2d272a0c74b4c5ca1cd.tar.bz2 anduril-0499082b50b00d942e00d2d272a0c74b4c5ca1cd.zip | |
Reduced ROM size by making successive nice_delay_ms calls collapse any time the user completes an input sequence.
All nice delays then get aborted until the next trip through the main() loop.
Eliminates the need to wrap nice_delay_ms() calls and handle the exit condition.
Also eliminates the risk of getting the UI out of sync with button events.
Diffstat (limited to '')
| -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); */ |
