diff options
| author | Selene ToyKeeper | 2023-11-02 17:16:25 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2023-11-02 17:16:25 -0600 |
| commit | 7cb4fe0944b839f28dfd96a88a772cd6a8b58019 (patch) | |
| tree | 8d3b203f1650edc28b1f67e1589e3bc870b33fa6 /fsm/states.h | |
| parent | added LICENSE (GPLv3) (diff) | |
| download | anduril-7cb4fe0944b839f28dfd96a88a772cd6a8b58019.tar.gz anduril-7cb4fe0944b839f28dfd96a88a772cd6a8b58019.tar.bz2 anduril-7cb4fe0944b839f28dfd96a88a772cd6a8b58019.zip | |
reorganized project files (part 1)
(just moved files, didn't change the contents yet,
and nothing will work without updating #includes and build scripts and stuff)
Diffstat (limited to 'fsm/states.h')
| -rw-r--r-- | fsm/states.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/fsm/states.h b/fsm/states.h new file mode 100644 index 0000000..156e6cf --- /dev/null +++ b/fsm/states.h @@ -0,0 +1,37 @@ +// fsm-states.h: State-handling functions for SpaghettiMonster. +// Copyright (C) 2017-2023 Selene ToyKeeper +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include "fsm-adc.h" + +// typedefs +typedef uint8_t State(Event event, uint16_t arg); +typedef State * StatePtr; + +// top of the stack +volatile StatePtr current_state; + +// stack for states, to allow shared utility states like "input a number" +// and such, which return to the previous state after finishing +#define STATE_STACK_SIZE 8 +StatePtr state_stack[STATE_STACK_SIZE]; +uint8_t state_stack_len = 0; + +void _set_state(StatePtr new_state, uint16_t arg, + Event exit_event, Event enter_event); +int8_t push_state(StatePtr new_state, uint16_t arg); +StatePtr pop_state(); +uint8_t set_state(StatePtr new_state, uint16_t arg); + +// if loop() needs to change state, use this instead of set_state() +// (because this avoids race conditions) +volatile StatePtr deferred_state; +volatile uint16_t deferred_state_arg; +void set_state_deferred(StatePtr new_state, uint16_t arg); + +#ifndef DONT_USE_DEFAULT_STATE +uint8_t default_state(Event event, uint16_t arg); +#endif + |
