aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/fsm-wdt.c
diff options
context:
space:
mode:
authorSelene ToyKeeper2017-12-12 15:22:42 -0700
committerSelene ToyKeeper2017-12-12 15:22:42 -0700
commit8c13fd82557dadbe81023c534cd19c31ec40bde4 (patch)
tree540cab9fb6a09153fb99f8e5500aa670cb0b3fcb /spaghetti-monster/fsm-wdt.c
parentGreatly improved button debouncing. Helps a lot on FW3A and my light saber. (diff)
downloadanduril-8c13fd82557dadbe81023c534cd19c31ec40bde4.tar.gz
anduril-8c13fd82557dadbe81023c534cd19c31ec40bde4.tar.bz2
anduril-8c13fd82557dadbe81023c534cd19c31ec40bde4.zip
Debouncing finally works (at least, it does on my two test hosts).
Diffstat (limited to 'spaghetti-monster/fsm-wdt.c')
-rw-r--r--spaghetti-monster/fsm-wdt.c38
1 files changed, 7 insertions, 31 deletions
diff --git a/spaghetti-monster/fsm-wdt.c b/spaghetti-monster/fsm-wdt.c
index bee2914..777bef0 100644
--- a/spaghetti-monster/fsm-wdt.c
+++ b/spaghetti-monster/fsm-wdt.c
@@ -45,47 +45,23 @@ inline void WDT_off()
// clock tick -- this runs every 16ms (62.5 fps)
ISR(WDT_vect) {
+ // detect and emit button change events
+ uint8_t was_pressed = button_last_state;
+ uint8_t pressed = button_is_pressed();
+ if (was_pressed != pressed) PCINT_inner(pressed);
+
//if (ticks_since_last_event < 0xff) ticks_since_last_event ++;
// increment, but loop from max back to half
ticks_since_last_event = (ticks_since_last_event + 1) \
| (ticks_since_last_event & 0x8000);
- // just in case the pin change interrupt missed something
- uint8_t le_num = last_event_num();
- uint8_t last_event = 0;
- if (le_num >= 1) last_event = current_event[le_num-1];
- uint8_t pressed = button_is_pressed();
- uint8_t was_pressed_before = (last_event == A_PRESS) || (last_event == A_HOLD);
- //if (pressed != button_last_state) {
- if (pressed != was_pressed_before) {
- PCINT_inner(pressed);
- /*
- uint8_t pushed;
- if (pressed) {
- pushed = push_event(A_PRESS);
- } else {
- pushed = push_event(A_RELEASE);
- }
-
- // check if sequence matches any defined sequences
- // if so, send event to current state callback
- if (pushed) {
- button_last_state = pressed;
- emit_current_event(0);
- }
- */
- }
- PCINT_since_WDT = 0;
-
// if time since last event exceeds timeout,
// append timeout to current event sequence, then
// send event to current state callback
// preload recent events
- //uint8_t le_num = last_event_num();
- le_num = last_event_num();
- //uint8_t last_event = 0;
- last_event = 0;
+ uint8_t le_num = last_event_num();
+ uint8_t last_event = 0;
uint8_t prev_event = 0;
if (le_num >= 1) last_event = current_event[le_num-1];
if (le_num >= 2) prev_event = current_event[le_num-2];