aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/fsm-events.c
diff options
context:
space:
mode:
authorSelene ToyKeeper2020-09-14 03:08:04 -0600
committerSelene ToyKeeper2020-09-14 03:08:04 -0600
commit5e2bf61d9fe6ba21a307d828f6569043888890fa (patch)
tree0d3fc0970c592ebdfd0225a2f714a69f4901252d /spaghetti-monster/fsm-events.c
parentfixed bug: ticks_since_last_event wasn't getting reset on button hold release (diff)
downloadanduril-5e2bf61d9fe6ba21a307d828f6569043888890fa.tar.gz
anduril-5e2bf61d9fe6ba21a307d828f6569043888890fa.tar.bz2
anduril-5e2bf61d9fe6ba21a307d828f6569043888890fa.zip
reorganized code in fsm-events.* to put things in a more coherent order
(no functional changes, but it does change the order of some code in ROM, so the compiled md5sum is different now)
Diffstat (limited to 'spaghetti-monster/fsm-events.c')
-rw-r--r--spaghetti-monster/fsm-events.c103
1 files changed, 51 insertions, 52 deletions
diff --git a/spaghetti-monster/fsm-events.c b/spaghetti-monster/fsm-events.c
index 93c38c9..b4cb671 100644
--- a/spaghetti-monster/fsm-events.c
+++ b/spaghetti-monster/fsm-events.c
@@ -23,6 +23,57 @@
#include <util/delay_basic.h>
+void append_emission(Event event, uint16_t arg) {
+ uint8_t i;
+ // find last entry
+ for(i=0;
+ (i<EMISSION_QUEUE_LEN) && (emissions[i].event != EV_none);
+ i++) { }
+ // add new entry
+ if (i < EMISSION_QUEUE_LEN) {
+ emissions[i].event = event;
+ emissions[i].arg = arg;
+ } else {
+ // TODO: if queue full, what should we do?
+ }
+}
+
+void delete_first_emission() {
+ uint8_t i;
+ for(i=0; i<EMISSION_QUEUE_LEN-1; i++) {
+ emissions[i].event = emissions[i+1].event;
+ emissions[i].arg = emissions[i+1].arg;
+ }
+ emissions[i].event = EV_none;
+ emissions[i].arg = 0;
+}
+
+void process_emissions() {
+ while (emissions[0].event != EV_none) {
+ emit_now(emissions[0].event, emissions[0].arg);
+ delete_first_emission();
+ }
+}
+
+// Call stacked callbacks for the given event until one handles it.
+uint8_t emit_now(Event event, uint16_t arg) {
+ for(int8_t i=state_stack_len-1; i>=0; i--) {
+ uint8_t err = state_stack[i](event, arg);
+ if (! err) return 0;
+ }
+ return 1; // event not handled
+}
+
+void emit(Event event, uint16_t arg) {
+ // add this event to the queue for later,
+ // so we won't use too much time during an interrupt
+ append_emission(event, arg);
+}
+
+void emit_current_event(uint16_t arg) {
+ emit(current_event, arg);
+}
+
void empty_event_sequence() {
current_event = EV_none;
ticks_since_last_event = 0;
@@ -63,42 +114,9 @@ uint8_t push_event(uint8_t ev_type) { // only for use by PCINT_inner()
}
return 0; // unexpected event type
-
}
-void append_emission(Event event, uint16_t arg) {
- uint8_t i;
- // find last entry
- for(i=0;
- (i<EMISSION_QUEUE_LEN) && (emissions[i].event != EV_none);
- i++) { }
- // add new entry
- if (i < EMISSION_QUEUE_LEN) {
- emissions[i].event = event;
- emissions[i].arg = arg;
- } else {
- // TODO: if queue full, what should we do?
- }
-}
-
-void delete_first_emission() {
- uint8_t i;
- for(i=0; i<EMISSION_QUEUE_LEN-1; i++) {
- emissions[i].event = emissions[i+1].event;
- emissions[i].arg = emissions[i+1].arg;
- }
- emissions[i].event = EV_none;
- emissions[i].arg = 0;
-}
-
-void process_emissions() {
- while (emissions[0].event != EV_none) {
- emit_now(emissions[0].event, emissions[0].arg);
- delete_first_emission();
- }
-}
-
// explicitly interrupt these "nice" delays
volatile uint8_t nice_delay_interrupt = 0;
inline void interrupt_nice_delays() { nice_delay_interrupt = 1; }
@@ -194,23 +212,4 @@ uint8_t nice_delay_s() {
}
*/
-// Call stacked callbacks for the given event until one handles it.
-uint8_t emit_now(Event event, uint16_t arg) {
- for(int8_t i=state_stack_len-1; i>=0; i--) {
- uint8_t err = state_stack[i](event, arg);
- if (! err) return 0;
- }
- return 1; // event not handled
-}
-
-void emit(Event event, uint16_t arg) {
- // add this event to the queue for later,
- // so we won't use too much time during an interrupt
- append_emission(event, arg);
-}
-
-void emit_current_event(uint16_t arg) {
- emit(current_event, arg);
-}
-
#endif