diff options
| -rw-r--r-- | spaghetti-monster/fsm-events.c | 7 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-events.h | 2 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-pcint.c | 4 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-wdt.c | 4 |
4 files changed, 9 insertions, 8 deletions
diff --git a/spaghetti-monster/fsm-events.c b/spaghetti-monster/fsm-events.c index ad869a6..93c38c9 100644 --- a/spaghetti-monster/fsm-events.c +++ b/spaghetti-monster/fsm-events.c @@ -25,6 +25,7 @@ void empty_event_sequence() { current_event = EV_none; + ticks_since_last_event = 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: @@ -33,8 +34,9 @@ void empty_event_sequence() { interrupt_nice_delays(); } -uint8_t push_event(uint8_t ev_type) { - ticks_since_last_event = 0; // something happened +uint8_t push_event(uint8_t ev_type) { // only for use by PCINT_inner() + // don't do this here; do it in PCINT_inner() instead + //ticks_since_last_event = 0; // something happened // only click events are sent to this function current_event |= B_CLICK; @@ -208,7 +210,6 @@ void emit(Event event, uint16_t arg) { } void emit_current_event(uint16_t arg) { - ticks_since_last_event = arg; emit(current_event, arg); } diff --git a/spaghetti-monster/fsm-events.h b/spaghetti-monster/fsm-events.h index 871c6a1..f83d306 100644 --- a/spaghetti-monster/fsm-events.h +++ b/spaghetti-monster/fsm-events.h @@ -202,7 +202,7 @@ static volatile uint16_t ticks_since_last_event = 0; void empty_event_sequence(); -uint8_t push_event(uint8_t ev_type); +uint8_t push_event(uint8_t ev_type); // only for use by PCINT_inner() #define EMISSION_QUEUE_LEN 16 diff --git a/spaghetti-monster/fsm-pcint.c b/spaghetti-monster/fsm-pcint.c index eacc699..021a076 100644 --- a/spaghetti-monster/fsm-pcint.c +++ b/spaghetti-monster/fsm-pcint.c @@ -101,9 +101,9 @@ void PCINT_inner(uint8_t pressed) { emit_current_event(0); } else { // user released button // how long was the button held? - uint16_t ticks_since_last = ticks_since_last_event; push_event(B_RELEASE); - emit_current_event(ticks_since_last); + emit_current_event(ticks_since_last_event); } + ticks_since_last_event = 0; } #endif diff --git a/spaghetti-monster/fsm-wdt.c b/spaghetti-monster/fsm-wdt.c index 94266c1..9e8d9af 100644 --- a/spaghetti-monster/fsm-wdt.c +++ b/spaghetti-monster/fsm-wdt.c @@ -150,6 +150,7 @@ void WDT_inner() { // (first frame of a "hold" event) else { if (ticks_since_last >= HOLD_TIMEOUT) { + ticks_since_last_event = 0; current_event |= B_HOLD; emit_current_event(0); } @@ -160,9 +161,8 @@ void WDT_inner() { else if (current_event) { // "hold" event just ended // no timeout required when releasing a long-press - // TODO? move this logic to PCINT() and simplify things here? if (current_event & B_HOLD) { - //emit_current_event(0); // should have been emitted by PCINT_inner() + //emit_current_event(ticks_since_last); // should have been emitted by PCINT_inner() empty_event_sequence(); } // end and clear event after release timeout |
