IntrOS
Loading...
Searching...
No Matches
Hierarchical state machine

hierarchical state machine More...

Macros

#define OS_HSM_STATE(state, parent)
 define and initialize an hsm state object
#define static_HSM_STATE(state, parent)
 static alias of OS_HSM_STATE()
#define HSM_STATE_INIT(parent)
 create and initialize hsm state object
#define HSM_STATE_CREATE(parent)
 create and initialize hsm state object
#define HSM_STATE_NEW   HSM_STATE_CREATE
 alias of HSM_STATE_CREATE()
#define OS_HSM_ACTION(action, owner, event, target, handler)
 define and initialize an hsm action object
#define static_HSM_ACTION(action, owner, event, target, handler)
 static alias of OS_HSM_ACTION()
#define HSM_ACTION_INIT(owner, event, target, handler)
 create and initialize an hsm action object
#define HSM_ACTION_CREATE(owner, event, target, handler)
 create and initialize an hsm action object
#define HSM_ACTION_NEW   HSM_ACTION_CREATE
 alias of HSM_ACTION_CREATE()
#define OS_HSM(hsm, limit)
 define and initialize complete hsm object
#define static_HSM(hsm, limit)
 static alias of OS_HSM()
#define HSM_INIT(limit)
 create and initialize complete hsm object
#define HSM_CREATE(limit)
 create and initialize complete hsm object
#define HSM_NEW   HSM_CREATE
 alias of HSM_CREATE()

Typedefs

typedef void hsm_handler_t(hsm_t *, unsigned)
 hierarchical state machine - event handler definition

Enumerations

enum  {
  hsmALL = 0 , hsmStop , hsmExit , hsmEntry ,
  hsmInit , hsmUser
}

Functions

void hsm_initState (hsm_state_t *state, hsm_state_t *parent)
 initialize hsm object
void hsm_initAction (hsm_action_t *action, hsm_state_t *owner, unsigned event, hsm_state_t *target, hsm_handler_t *handler)
 initialize hsm state action object
void hsm_init (hsm_t *hsm, void *data, size_t bufsize)
 initialize hsm object
void hsm_link (hsm_action_t *action)
 link hsm state action to the state action queue
void hsm_start (hsm_t *hsm, tsk_t *tsk, hsm_state_t *initState)
 start hsm event dispatcher
void hsm_startAsync (hsm_t *hsm, tsk_t *tsk, hsm_state_t *initState)
 Async alias of hsm_start().
void hsm_reset (hsm_t *hsm)
 reset the hsm object, stop the hsm event dispatcher and wake up all waiting tasks with 'E_STOPPED' event value
void hsm_kill (hsm_t *hsm)
 alias of hsm_reset()
int hsm_give (hsm_t *hsm, unsigned event)
 try to transfer event data to the hsm event queue, don't wait if the hsm event queue is full
int hsm_giveAsync (hsm_t *hsm, unsigned event)
 Async alias of hsm_give().
int hsm_sendFor (hsm_t *hsm, unsigned event, cnt_t delay)
 try to transfer event value to the hsm event queue, wait for given duration of time while the hsm event queue is full
int hsm_sendUntil (hsm_t *hsm, unsigned event, cnt_t time)
 try to transfer event value to the hsm event queue, wait until given timepoint while the hsm event queue is full
int hsm_send (hsm_t *hsm, unsigned event)
 try to transfer event data to the hsm event queue, wait indefinitely while the hsm event queue is full
int hsm_sendAsync (hsm_t *hsm, unsigned event)
 Async alias of hsm_send().
void hsm_push (hsm_t *hsm, unsigned event)
 transfer event data to the hsm event queue, remove the oldest event data if the hsm event queue is full
hsm_state_t * hsm_getState (hsm_t *hsm)
 get current hsm state

Detailed Description

hierarchical state machine

Macro Definition Documentation

◆ OS_HSM_STATE

#define OS_HSM_STATE ( state,
parent )
Value:
hsm_state_t state[] = { _HSM_STATE_INIT( parent ) }

define and initialize an hsm state object

Parameters
statename of a pointer to hsm state object
parentpointer to parent state in the hsm tree (NULL for root)

◆ static_HSM_STATE

#define static_HSM_STATE ( state,
parent )
Value:
static hsm_state_t state[] = { _HSM_STATE_INIT( parent ) }

static alias of OS_HSM_STATE()

◆ HSM_STATE_INIT

#define HSM_STATE_INIT ( parent)
Value:
_HSM_STATE_INIT( parent )

create and initialize hsm state object

Parameters
parentpointer to parent state in the hsm tree (NULL for root)
Returns
hsm state object
Note
use only in 'C' code

◆ HSM_STATE_CREATE

#define HSM_STATE_CREATE ( parent)
Value:
{ HSM_STATE_INIT ( parent ) }
#define HSM_STATE_INIT(parent)
create and initialize hsm state object
Definition osstatemachine.h:177

create and initialize hsm state object

Parameters
parentpointer to parent state in the hsm tree (NULL for root)
Returns
hsm state object as array (id)
Note
use only in 'C' code

◆ OS_HSM_ACTION

#define OS_HSM_ACTION ( action,
owner,
event,
target,
handler )
Value:
hsm_action_t action[] = { _HSM_ACTION_INIT( owner, event, target, handler ) }

define and initialize an hsm action object

Parameters
actionname of a pointer to hsm action object
owneraction owner
eventevent value
targetpointer to transition target state (NULL, if no transition)
handlerevent handler

◆ static_HSM_ACTION

#define static_HSM_ACTION ( action,
owner,
event,
target,
handler )
Value:
static hsm_action_t action[] = { _HSM_ACTION_INIT( owner, event, target, handler ) }

static alias of OS_HSM_ACTION()

◆ HSM_ACTION_INIT

#define HSM_ACTION_INIT ( owner,
event,
target,
handler )
Value:
_HSM_ACTION_INIT( owner, event, target, handler )

create and initialize an hsm action object

Parameters
owneraction owner
eventevent value
targetpointer to transition target state (NULL, if no transition)
handlerevent handler
Returns
hsm action object
Note
use only in 'C' code

◆ HSM_ACTION_CREATE

#define HSM_ACTION_CREATE ( owner,
event,
target,
handler )
Value:
{ HSM_ACTION_INIT ( owner, event, target, handler ) }
#define HSM_ACTION_INIT(owner, event, target, handler)
create and initialize an hsm action object
Definition osstatemachine.h:251

create and initialize an hsm action object

Parameters
owneraction owner
eventevent value
targetpointer to transition target state (NULL, if no transition)
handlerevent handler
Returns
hsm action object as array
Note
use only in 'C' code

◆ OS_HSM

#define OS_HSM ( hsm,
limit )
Value:
static unsigned hsm##__buf[limit]; \
hsm_t hsm[] = { _HSM_INIT( limit, hsm##__buf ) }

define and initialize complete hsm object

Parameters
hsmname of a pointer to hsm object
limitsize of an hsm event queue (max number of stored events)

◆ static_HSM

#define static_HSM ( hsm,
limit )
Value:
static unsigned hsm##__buf[limit]; \
static hsm_t hsm[] = { _HSM_INIT( limit, hsm##__buf ) }

static alias of OS_HSM()

◆ HSM_INIT

#define HSM_INIT ( limit)
Value:
_HSM_INIT( limit, _EVQ_DATA( limit ) )

create and initialize complete hsm object

Parameters
limitsize of an hsm event queue (max number of stored events)
Returns
hsm object
Note
use only in 'C' code

◆ HSM_CREATE

#define HSM_CREATE ( limit)
Value:
{ HSM_INIT ( limit ) }
#define HSM_INIT(limit)
create and initialize complete hsm object
Definition osstatemachine.h:322

create and initialize complete hsm object

Parameters
limitsize of an hsm event queue (max number of stored events)
Returns
hsm object as array (id)
Note
use only in 'C' code

Function Documentation

◆ hsm_initState()

void hsm_initState ( hsm_state_t * state,
hsm_state_t * parent )

initialize hsm object

Parameters
statepointer to hsm state object
parentpointer to parent state in the hsm tree (NULL for root)

◆ hsm_initAction()

void hsm_initAction ( hsm_action_t * action,
hsm_state_t * owner,
unsigned event,
hsm_state_t * target,
hsm_handler_t * handler )

initialize hsm state action object

Parameters
actionpointer to hsm state action object
owneraction owner
eventevent value
targetpointer to transition target state (NULL, if no transition)
handlerevent handler

◆ hsm_init()

void hsm_init ( hsm_t * hsm,
void * data,
size_t bufsize )

initialize hsm object

Parameters
hsmpointer to hsm object
datahsm event queue data buffer
bufsizesize of the buffer

◆ hsm_link()

void hsm_link ( hsm_action_t * action)

link hsm state action to the state action queue

Parameters
actionpointer to hsm state action object

◆ hsm_start()

void hsm_start ( hsm_t * hsm,
tsk_t * tsk,
hsm_state_t * initState )

start hsm event dispatcher

Parameters
hsmpointer to hsm object
tskpointer to hsm dispatcher
initStatepointer to initial hsm state

◆ hsm_reset()

void hsm_reset ( hsm_t * hsm)

reset the hsm object, stop the hsm event dispatcher and wake up all waiting tasks with 'E_STOPPED' event value

Parameters
hsmpointer to hsm object
Note
use only in thread mode

◆ hsm_give()

int hsm_give ( hsm_t * hsm,
unsigned event )

try to transfer event data to the hsm event queue, don't wait if the hsm event queue is full

Parameters
hsmpointer to hsm object
eventevent value
Return values
E_SUCCESSevent data was successfully transferred to the hsm object
E_TIMEOUThsm event queue is full, try again
Note
use Async alias for communication with unmasked interrupt handlers

◆ hsm_sendFor()

int hsm_sendFor ( hsm_t * hsm,
unsigned event,
cnt_t delay )

try to transfer event value to the hsm event queue, wait for given duration of time while the hsm event queue is full

Parameters
hsmpointer to hsm object
eventevent value
delayduration of time (maximum number of ticks to wait while the hsm event queue is full)
  • IMMEDIATE: don't wait if the hsm event queue is full
  • INFINITE: wait indefinitely while the hsm event queue is full
Return values
E_SUCCESSevent value was successfully transferred to the hsm object
E_STOPPEDhsm object was reseted before the specified timeout expired
E_TIMEOUThsm event queue is full and was not issued data before the specified timeout expired

◆ hsm_sendUntil()

int hsm_sendUntil ( hsm_t * hsm,
unsigned event,
cnt_t time )

try to transfer event value to the hsm event queue, wait until given timepoint while the hsm event queue is full

Parameters
hsmpointer to hsm object
eventevent value
timetimepoint value
Return values
E_SUCCESSevent value was successfully transferred to the hsm object
E_STOPPEDhsm object was reseted before the specified timeout expired
E_TIMEOUThsm event queue is full and was not issued data before the specified timeout expired

◆ hsm_send()

int hsm_send ( hsm_t * hsm,
unsigned event )
inline

try to transfer event data to the hsm event queue, wait indefinitely while the hsm event queue is full

Parameters
hsmpointer to hsm object
eventevent value
Return values
E_SUCCESSevent data was successfully transferred to the hsm object
E_STOPPEDhsm object was reseted (unavailable for async version)
Note
use Async alias for communication with unmasked interrupt handlers

◆ hsm_push()

void hsm_push ( hsm_t * hsm,
unsigned event )

transfer event data to the hsm event queue, remove the oldest event data if the hsm event queue is full

Parameters
hsmpointer to hsm object
eventevent value

◆ hsm_getState()

hsm_state_t * hsm_getState ( hsm_t * hsm)

get current hsm state

Parameters
hsmpointer to hsm object
Returns
pointer to current hsm state