diff options
| author | Selene ToyKeeper | 2018-11-11 06:09:07 -0700 |
|---|---|---|
| committer | Selene ToyKeeper | 2018-11-11 06:09:07 -0700 |
| commit | 6b41b5df92128c8810cbe14fd56258d90c3bb2b2 (patch) | |
| tree | 5c2d5d80e54922e17edbcfd49317a84107b97bf5 /spaghetti-monster/fsm-events.c | |
| parent | Rewrote the event system to use a single byte for each event instead of an ar... (diff) | |
| download | anduril-6b41b5df92128c8810cbe14fd56258d90c3bb2b2.tar.gz anduril-6b41b5df92128c8810cbe14fd56258d90c3bb2b2.tar.bz2 anduril-6b41b5df92128c8810cbe14fd56258d90c3bb2b2.zip | |
Several fixes...
- Made momentary+lockout modes smaller and work better.
- Fixed buggy timing on hold events; made ticks_since_last_event reset when it should.
- Reduced ROM size by caching volatile ticks_since_last_event sometimes.
- Swapped what the top Event bit means, because it makes event handlers easier to write.
- Made the maximum click event keep triggering if user keeps pressing, instead of
dropping everything after the limit.
Diffstat (limited to '')
| -rw-r--r-- | spaghetti-monster/fsm-events.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/spaghetti-monster/fsm-events.c b/spaghetti-monster/fsm-events.c index 091d4cf..b36c9f4 100644 --- a/spaghetti-monster/fsm-events.c +++ b/spaghetti-monster/fsm-events.c @@ -21,7 +21,7 @@ #define FSM_EVENTS_C void empty_event_sequence() { - current_event = 0; + current_event = EV_none; // 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: @@ -34,7 +34,7 @@ uint8_t push_event(uint8_t ev_type) { ticks_since_last_event = 0; // something happened // only click events are sent to this function - //current_event |= B_CLICK; + current_event |= B_CLICK; // handle button presses if (ev_type == B_PRESS) { @@ -43,9 +43,9 @@ uint8_t push_event(uint8_t ev_type) { // increase click counter if ((current_event & B_COUNT) < (B_COUNT-1)) { current_event ++; - return 1; // event pushed } - return 0; // maximum number of clicks reached + return 1; // event pushed, even if max clicks already reached + // (will just repeat the max over and over) } // handle button releases else if (ev_type == B_RELEASE) { @@ -194,4 +194,9 @@ void emit(Event event, uint16_t arg) { append_emission(event, arg); } +void emit_current_event(uint16_t arg) { + ticks_since_last_event = arg; + emit(current_event, arg); +} + #endif |
