aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/fsm-events.h
diff options
context:
space:
mode:
Diffstat (limited to 'spaghetti-monster/fsm-events.h')
-rw-r--r--spaghetti-monster/fsm-events.h77
1 files changed, 42 insertions, 35 deletions
diff --git a/spaghetti-monster/fsm-events.h b/spaghetti-monster/fsm-events.h
index f83d306..79a0aff 100644
--- a/spaghetti-monster/fsm-events.h
+++ b/spaghetti-monster/fsm-events.h
@@ -22,6 +22,23 @@
#include <avr/pgmspace.h>
+
+// timeout durations in ticks (each tick 1/62th s)
+#ifndef HOLD_TIMEOUT
+#define HOLD_TIMEOUT 24
+#endif
+#ifndef RELEASE_TIMEOUT
+#define RELEASE_TIMEOUT 18
+#endif
+
+// return codes for Event handlers
+// Indicates whether this handler consumed (handled) the Event, or
+// if the Event should be sent to the next handler in the stack.
+#define EVENT_HANDLED 0
+#define EVENT_NOT_HANDLED 1
+#define MISCHIEF_MANAGED EVENT_HANDLED
+#define MISCHIEF_NOT_MANAGED EVENT_NOT_HANDLED
+
// typedefs
typedef uint8_t Event;
typedef struct Emission {
@@ -29,22 +46,35 @@ typedef struct Emission {
uint16_t arg;
} Emission;
-#define EVENT_HANDLED 0
-#define EVENT_NOT_HANDLED 1
-#define MISCHIEF_MANAGED EVENT_HANDLED
-#define MISCHIEF_NOT_MANAGED EVENT_NOT_HANDLED
-
Event current_event;
// at 0.016 ms per tick, 255 ticks = 4.08 s
static volatile uint16_t ticks_since_last_event = 0;
-// timeout durations in ticks (each tick 1/62th s)
-#ifndef HOLD_TIMEOUT
-#define HOLD_TIMEOUT 24
-#endif
-#ifndef RELEASE_TIMEOUT
-#define RELEASE_TIMEOUT 18
-#endif
+// maximum number of events which can be waiting at one time
+// (would probably be okay to reduce this to 4, but it's higher to be safe)
+#define EMISSION_QUEUE_LEN 16
+// was "volatile" before, changed to regular var since IRQ rewrites seem
+// to have removed the need for it to be volatile
+// no comment about "volatile emissions"
+Emission emissions[EMISSION_QUEUE_LEN];
+
+void append_emission(Event event, uint16_t arg);
+void delete_first_emission();
+void process_emissions();
+uint8_t emit_now(Event event, uint16_t arg);
+void emit(Event event, uint16_t arg);
+void emit_current_event(uint16_t arg);
+void empty_event_sequence();
+uint8_t push_event(uint8_t ev_type); // only for use by PCINT_inner()
+
+
+// TODO: Maybe move these to their own file...
+// ... this probably isn't the right place for delays.
+inline void interrupt_nice_delays();
+uint8_t nice_delay_ms(uint16_t ms);
+//uint8_t nice_delay_s();
+void delay_4ms(uint8_t ms);
+
/* Event structure
* Bit 7: 1 for a button input event, 0 for all others.
@@ -201,27 +231,4 @@ static volatile uint16_t ticks_since_last_event = 0;
#define EV_click15_hold_release (B_CLICK|B_HOLD|B_RELEASE|B_TIMEOUT|15)
-void empty_event_sequence();
-uint8_t push_event(uint8_t ev_type); // only for use by PCINT_inner()
-
-
-#define EMISSION_QUEUE_LEN 16
-// was "volatile" before, changed to regular var since IRQ rewrites seem
-// to have removed the need for it to be volatile
-// no comment about "volatile emissions"
-Emission emissions[EMISSION_QUEUE_LEN];
-
-void append_emission(Event event, uint16_t arg);
-void delete_first_emission();
-void process_emissions();
-//#define emit_now emit
-uint8_t emit_now(Event event, uint16_t arg);
-void emit(Event event, uint16_t arg);
-void emit_current_event(uint16_t arg);
-
-uint8_t nice_delay_ms(uint16_t ms);
-//uint8_t nice_delay_s();
-inline void interrupt_nice_delays();
-void delay_4ms(uint8_t ms);
-
#endif