Zephyr API Documentation  3.6.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
State Machine Framework API

State Machine Framework API. More...

Data Structures

struct  smf_state
 General state that can be used in multiple state machines. More...
 
struct  smf_ctx
 Defines the current context of the state machine. More...
 

Macros

#define SMF_CREATE_STATE(_entry, _run, _exit)
 Macro to create a flat state.
 
#define SMF_CTX(o)   ((struct smf_ctx *)o)
 Macro to cast user defined object to state machine context.
 

Typedefs

typedef void(* state_execution) (void *obj)
 Function pointer that implements a portion of a state.
 

Functions

void smf_set_initial (struct smf_ctx *ctx, const struct smf_state *init_state)
 Initializes the state machine and sets its initial state.
 
void smf_set_state (struct smf_ctx *ctx, const struct smf_state *new_state)
 Changes a state machines state.
 
void smf_set_terminate (struct smf_ctx *ctx, int32_t val)
 Terminate a state machine.
 
void smf_set_handled (struct smf_ctx *ctx)
 Tell the SMF to stop propagating the event to ancestors.
 
int32_t smf_run_state (struct smf_ctx *ctx)
 Runs one iteration of a state machine (including any parent states)
 

Detailed Description

State Machine Framework API.

Macro Definition Documentation

◆ SMF_CREATE_STATE

#define SMF_CREATE_STATE (   _entry,
  _run,
  _exit 
)

#include <zephyr/smf.h>

Value:
{ \
.entry = _entry, \
.run = _run, \
.exit = _exit \
}

Macro to create a flat state.

Parameters
_entryState entry function
_runState run function
_exitState exit function

◆ SMF_CTX

#define SMF_CTX (   o)    ((struct smf_ctx *)o)

#include <zephyr/smf.h>

Macro to cast user defined object to state machine context.

Parameters
oA pointer to the user defined object

Typedef Documentation

◆ state_execution

typedef void(* state_execution) (void *obj)

#include <zephyr/smf.h>

Function pointer that implements a portion of a state.

Parameters
objpointer user defined object

Function Documentation

◆ smf_run_state()

int32_t smf_run_state ( struct smf_ctx ctx)

#include <zephyr/smf.h>

Runs one iteration of a state machine (including any parent states)

Parameters
ctxState machine context
Returns
A non-zero value should terminate the state machine. This non-zero value could represent a terminal state being reached or the detection of an error that should result in the termination of the state machine.

◆ smf_set_handled()

void smf_set_handled ( struct smf_ctx ctx)

#include <zephyr/smf.h>

Tell the SMF to stop propagating the event to ancestors.

This allows HSMs to implement 'programming by difference' where substates can handle events on their own or propagate up to a common handler.

Parameters
ctxState machine context

◆ smf_set_initial()

void smf_set_initial ( struct smf_ctx ctx,
const struct smf_state init_state 
)

#include <zephyr/smf.h>

Initializes the state machine and sets its initial state.

Parameters
ctxState machine context
init_stateInitial state the state machine starts in.

◆ smf_set_state()

void smf_set_state ( struct smf_ctx ctx,
const struct smf_state new_state 
)

#include <zephyr/smf.h>

Changes a state machines state.

This handles exiting the previous state and entering the target state. A common parent state will not exited nor be re-entered.

Parameters
ctxState machine context
new_stateState to transition to (NULL is valid and exits all states)

◆ smf_set_terminate()

void smf_set_terminate ( struct smf_ctx ctx,
int32_t  val 
)

#include <zephyr/smf.h>

Terminate a state machine.

Parameters
ctxState machine context
valNon-Zero termination value that's returned by the smf_run_state function.