aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster
diff options
context:
space:
mode:
Diffstat (limited to 'spaghetti-monster')
-rw-r--r--spaghetti-monster/fsm-pcint.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/spaghetti-monster/fsm-pcint.c b/spaghetti-monster/fsm-pcint.c
index d362633..eacc699 100644
--- a/spaghetti-monster/fsm-pcint.c
+++ b/spaghetti-monster/fsm-pcint.c
@@ -93,18 +93,17 @@ ISR(PCINT0_vect) {
// should only be called from PCINT and/or WDT
// (is a separate function to reduce code duplication)
void PCINT_inner(uint8_t pressed) {
- uint8_t pushed;
+ button_last_state = pressed;
- if (pressed) {
- pushed = push_event(B_PRESS);
- } else {
- pushed = push_event(B_RELEASE);
- }
-
- // send event to the current state callback
- if (pushed) {
- button_last_state = pressed;
+ // register the change, and send event to the current state callback
+ if (pressed) { // user pressed button
+ push_event(B_PRESS);
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);
}
}
#endif