67#define RKH_SM_NAME(smName_) s_##smName_
68#define RKH_SM_CONST_NAME(smName_) rs_##smName_
82#define ELSE rkh_sm_else
153#define RKH_CREATE_COMP_REGION_STATE(name, en, ex, parent, defchild, \
155 kindOfHistory, hDftTrnGuard, \
156 hDftTrnAction, hDftTarget, hRamMem) \
158 MKFINAL_INCOMP(name); \
159 MKHIST_INCOMP(name, kindOfHistory, hDftTrnGuard, hDftTrnAction, \
160 hDftTarget, hRamMem); \
162 extern RKHROM RKH_TR_T name##_trtbl[]; \
163 RKHROM RKH_SCMP_T name = \
165 {MKBASE(RKH_COMPOSITE, name), MKST(en, ex, parent)}, \
166 MKCOMP(name, defchild, initialTrn, &name##Hist) \
192#define RKH_CREATE_COMP_STATE(name, en, ex, parent, defchild, history) \
194 extern RKHROM RKH_TR_T name##_trtbl[]; \
195 RKHROM RKH_SCMP_T name = \
197 {MKBASE(RKH_COMPOSITE, name), MKST(en, ex, parent)}, \
198 MKCOMP(name, defchild, NULL, history) \
213#define RKH_CREATE_FINAL_STATE(name, parent) \
215 static RKHROM RKH_TR_T name##_trtbl[] = \
216 RKH_TRREG(RKH_ANY, NULL, NULL, NULL); \
217 RKHROM RKH_FINAL_T name = \
219 {MKBASE(RKH_FINAL, name), MKST(NULL, NULL, parent)}, \
278#define RKH_CREATE_BASIC_STATE(name, en, ex, parent, prepro) \
280 extern RKHROM RKH_TR_T name##_trtbl[]; \
282 RKHROM RKH_SBSC_T name = \
284 {MKBASE(RKH_BASIC, name), MKST(en,ex,parent)}, \
285 MKBASIC(name,prepro) \
314#define RKH_CREATE_COND_STATE(name) \
316 extern RKHROM RKH_TR_T name##_trtbl[]; \
318 RKHROM RKH_SCOND_T name = \
320 MKBASE(RKH_CONDITIONAL, name), \
350#define RKH_CREATE_CHOICE_STATE(name) \
352 extern RKHROM RKH_TR_T name##_trtbl[]; \
354 RKHROM RKH_SCHOICE_T name = \
356 MKBASE(RKH_CHOICE, name), \
394#define RKH_CREATE_DEEP_HISTORY_STATE(name, parent, dftTrnGuard, \
395 dftTrnAction, dftTarget) \
397 static RKHROM RKH_ST_T *ram##name; \
398 MKHISTORY(name, parent, RKH_DHISTORY, dftTrnGuard, dftTrnAction, \
399 dftTarget, &ram##name)
437#define RKH_CREATE_SHALLOW_HISTORY_STATE(name, parent, dftTrnGuard, \
438 dftTrnAction, dftTarget) \
440 static RKHROM RKH_ST_T *ram##name; \
441 MKHISTORY(name, parent, RKH_SHISTORY, dftTrnGuard, dftTrnAction, \
442 dftTarget, &ram##name)
494#define RKH_CREATE_SUBMACHINE_STATE(name, en, ex, parent, sbm) \
496 extern RKHROM RKH_EXPCN_T name##_exptbl[]; \
497 extern RKHROM RKH_TR_T name##_trtbl[]; \
499 RKHROM RKH_SSBM_T name = \
501 {MKBASE(RKH_SUBMACHINE, name), MKST(en,ex,parent)}, \
530#define RKH_CREATE_EX_CNNPNT_TABLE(name) \
531 RKHROM RKH_EXPCN_T name##_exptbl[]= \
576#define RKH_EX_CNNPNT(name, expnt, act, ts) \
577 {(RKH_TRN_ACT_T)act, (RKHROM struct RKH_ST_T *)ts}
600#define RKH_END_EX_CNNPNT_TABLE };
624#define RKH_EN_CNNPNT(name, enpnt, subm) \
626 RKHROM RKH_SENP_T name = \
628 MKBASE(RKH_ENPOINT, name), \
655#define RKH_CREATE_REF_SUBMACHINE(name, defchild, iact) \
657 static RKHROM RKH_ST_T * rdyp_##name; \
659 RKHROM RKH_RSM_T name = \
661 MKBASE(RKH_REF_SUBMACHINE, name), \
662 MKMCH(defchild,iact,name) \
709#define RKH_CREATE_REF_EXPNT(name, ix, subm) \
711 RKHROM RKH_SEXP_T name = \
713 MKBASE(RKH_EXPOINT, name), \
746#define RKH_CREATE_REF_ENPNT(name, act, ts, subm) \
748 RKHROM RKH_ENPCN_T name = \
750 (RKH_TRN_ACT_T)act, (RKHROM struct RKH_ST_T *)ts \
778#define RKH_CREATE_TRANS_TABLE(name) \
780 RKHROM RKH_TR_T name##_trtbl[]= \
812#define RKH_TRREG(evt_, guard_, effect_, target_) \
813 MKTRN(evt_, guard_, effect_, target_)
836#define RKH_TRINT(e, g, a) {e, (RKH_GUARD_T)g, (RKH_TRN_ACT_T)a, NULL}
871#define RKH_TRCOMPLETION(guard_, effect_, target_) \
872 {RKH_COMPLETION_EVENT, \
873 (RKH_GUARD_T)guard_, (RKH_TRN_ACT_T)effect_, target_}
895#define RKH_END_TRANS_TABLE {RKH_ANY, NULL, NULL, NULL}};
921#define RKH_CREATE_BRANCH_TABLE(name) \
923 RKH_CREATE_TRANS_TABLE(name)
957#define RKH_BRANCH(guard_, effect_, target_) \
958 MKTRN(0, guard_, effect_, target_)
973#define RKH_CREATE_HISTORY_STORAGE(compStateName) \
974 static RKHROM RKH_ST_T *ramHist_##compStateName
987#define RKH_GET_HISTORY_STORAGE(compStateName) \
988 &ramHist_##compStateName
994#define RKH_EBTBL {RKH_ANY, NULL, NULL, NULL}
1014#define RKH_END_BRANCH_TABLE RKH_EBTBL};
1020#define RKH_ROOT RKH_NULL
1049#define RKH_SM_DCLR(me_) \
1050 RKH_DCLR_PTR_TYPE(RKH_SM_T, me_)
1074#define RKH_SM_DCLR_TYPE(type_, me_) \
1075 RKH_DCLR_PTR_TYPE(type_, me_)
1086#define RKH_DCLR_COMP_STATE extern RKHROM RKH_SCMP_T
1087#define RKH_DCLR_BASIC_STATE extern RKHROM RKH_SBSC_T
1088#define RKH_DCLR_FINAL_STATE extern RKHROM RKH_FINAL_T
1089#define RKH_DCLR_COND_STATE extern RKHROM RKH_SCOND_T
1090#define RKH_DCLR_CHOICE_STATE extern RKHROM RKH_SCHOICE_T
1091#define RKH_DCLR_DHIST_STATE extern RKHROM RKH_SHIST_T
1092#define RKH_DCLR_SHIST_STATE extern RKHROM RKH_SHIST_T
1093#define RKH_DCLR_SUBM_STATE extern RKHROM RKH_SSBM_T
1094#define RKH_DCLR_REF_SUBM extern RKHROM RKH_RSM_T
1095#define RKH_DCLR_ENPNT extern RKHROM RKH_SENP_T
1096#define RKH_DCLR_REF_EXPNT extern RKHROM RKH_SEXP_T
1097#define RKH_DCLR_REF_ENPNT extern RKHROM RKH_ENPCN_T
1106#define RKH_DECLARE_TR_TBL(name) \
1107 extern RKHROM RKH_TR_T name##_trtbl[]
1132#define RKH_DCLR_SM_GLOBAL(sm_t, sm, gob) \
1133 sm_t * const gob = &s_##sm;
1150#define RKH_DCLR_SM_CONST_GLOBAL(smName) \
1151 extern RKHROM RKH_ROM_T RKH_SM_CONST_NAME(smName)
1277#define RKH_INIT_BASIC_STATE(name, en, ex, parent, prepro) \
1280 MKBASE(RKH_BASIC, name), \
1281 MKST(en, ex, parent) \
1283 MKBASIC(name, prepro) \
1300#define RKH_INIT_COMPOSITE_STATE(name, en, ex, parent, \
1301 defchild, history) \
1304 MKBASE(RKH_COMPOSITE, name), \
1305 MKST(en, ex, parent) \
1307 MKCOMP(name, defchild, history) \
1318#define RKH_GFALSE RKH_FALSE
1319#define RKH_GTRUE RKH_TRUE
1353#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1354 #define RKH_SM_CREATE(type, name, prio, ppty, initialState, \
1355 initialAction, initialEvt) \
1356 static RKH_SM_CONST_CREATE(name, prio, ppty, initialState, \
1357 initialAction, initialEvt); \
1358 static type s_##name = {MKSM(&RKH_SM_CONST_NAME(name), initialState)}
1360 #define RKH_SM_CREATE(type, name, prio, ppty, initialState, \
1361 initialAction, initialEvt) \
1362 static type RKH_SMA_NAME(name) = {MKSM(name, prio, ppty, initialState, \
1363 initialAction, initialEvt)}
1397#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1398 #define RKH_SM_INIT(me_, nameSMConst_, prio_, ppty_, initialState_, \
1399 initialAction_, initialEvt_) \
1400 ((RKH_SM_T *)me_)->romrkh = \
1401 (RKHROM RKH_ROM_T *)(RKH_SM_GET_CONST_OBJ(nameSMConst_)); \
1402 ((RKH_SM_T *)me_)->state = \
1403 (RKHROM struct RKH_ST_T *) \
1404 ((RKH_SM_GET_CONST_OBJ(nameSMConst_))->istate)
1406 #define RKH_SM_INIT(me_, nameSMConst_, prio_, ppty_, initialState_, \
1407 initialAction_, initialEvt_) \
1408 MKRT_SM(me_, nameSMConst_, prio_, ppty_, initialState_, \
1409 initialAction_, initialEvt_)
1442#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1443 #define RKH_SM_CONST_CREATE(name, prio, ppty, initialState, \
1444 initialAction, initialEvt) \
1445 RKHROM RKH_ROM_T RKH_SM_CONST_NAME(name) = \
1453 #define RKH_SM_CONST_CREATE(name, prio, ppty, initialState, \
1454 initialAction, initialEvt)
1464#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1465 #define RKH_SM_GET_CONST(sm) \
1466 ((RKH_SM_T *)sm)->romrkh
1468 #define RKH_SM_GET_CONST(sm) \
1478#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1479 #define RKH_SM_GET_CONST_OBJ(sm) \
1480 &RKH_SM_CONST_NAME(sm)
1482 #define RKH_SM_GET_CONST_OBJ(sm) \
1486#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1487 #define RKH_SM_GET_OBJ(type, sm)
1489 #define RKH_SM_GET_OBJ(type, sm) \
1490 (type *)&RKH_SM_NAME(sm)
1502#define RKH_SM_DEF_PTR(sm) \
1503 RKH_SM_T *const sm = (RKH_SM_T *)&RKH_SM_NAME(sm)
1519#define RKH_SM_DEF_PTR_TYPE(type, sm) \
1520 type *const sm = (type *)&RKH_SM_NAME(sm)
1531#define RKH_GET_CSTATE_ID(me) \
1532 ((RKH_BASE_T *)(((RKH_SM_T *)me)->state))->id
1534#if R_TRC_AO_NAME_EN == RKH_ENABLED
1544 #define RKH_GET_VERTEX_NAME(vx) \
1545 ((struct RKH_BASE_T *)(vx))->name
1547 #define RKH_GET_VERTEX_NAME(vx) noname
1653#if RKH_CFG_SMA_ENT_ARG_SMA_EN == RKH_ENABLED
1654 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1661 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1693#if RKH_CFG_SMA_EXT_ARG_SMA_EN == RKH_ENABLED
1694 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1701 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1726#if RKH_CFG_SMA_PPRO_ARG_SMA_EN == RKH_ENABLED
1764#if (RKH_CFG_SMA_ACT_ARG_EVT_EN == RKH_ENABLED && \
1765 RKH_CFG_SMA_ACT_ARG_SMA_EN == RKH_ENABLED)
1768#elif (RKH_CFG_SMA_ACT_ARG_EVT_EN == RKH_ENABLED && \
1769 RKH_CFG_SMA_ACT_ARG_SMA_EN == RKH_DISABLED)
1771#elif (RKH_CFG_SMA_ACT_ARG_EVT_EN == RKH_DISABLED && \
1772 RKH_CFG_SMA_ACT_ARG_SMA_EN == RKH_ENABLED)
1802#if (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
1803 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_ENABLED)
1807#elif (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
1808 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_DISABLED)
1810#elif (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_DISABLED && \
1811 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_ENABLED)
1817#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1857#if R_TRC_AO_NAME_EN == RKH_ENABLED
1887#if RKH_CFG_SMA_INIT_EVT_EN == RKH_ENABLED
1904#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1911 RKHROM RKH_ROM_T *romrkh;
1954#if R_TRC_AO_NAME_EN == RKH_ENABLED
1984#if RKH_CFG_SMA_INIT_EVT_EN == RKH_ENABLED
2032#if R_TRC_AO_NAME_EN == RKH_ENABLED
2085#if RKH_CFG_SMA_HCAL_EN == RKH_ENABLED
2158#if RKH_CFG_SMA_PPRO_EN == RKH_ENABLED
2215#if RKH_CFG_SMA_PPRO_EN == RKH_ENABLED
2219#if RKH_CFG_SMA_HCAL_EN == RKH_ENABLED
2224 RKHROM
void *defchild;
2236#if defined(RKH_HISTORY_ENABLED)
2264#if RKH_CFG_SMA_PPRO_EN == RKH_ENABLED
2273#if defined(RKH_SUBMACHINE_ENABLED)
2286 RKHROM
void *target;
2305 RKHROM
void *target;
2380 RKHROM RKH_EXPCN_T *exptbl;
2386 RKHROM RKH_RSM_T *sbm;
2405 RKHROM
void *defchild;
2447 RKHROM RKH_ENPCN_T *enpcn;
2484 RKHROM RKH_RSM_T *parent;
2492#if defined(RKH_CHOICE_OR_CONDITIONAL_ENABLED)
2513#if defined(RKH_CHOICE_ENABLED)
2658#if (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
2659 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_ENABLED)
2661#elif (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
2662 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_DISABLED)
2664#elif (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_DISABLED && \
2665 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_ENABLED)
2666rbool_t rkh_sm_else(
const RKH_SM_T *sma);
2668rbool_t rkh_sm_else(
void);
ruint rkh_sm_dispatch(RKH_SM_T *me, RKH_EVT_T *e)
Executes a state machine in a run-to-completation (RTC) model.
RKH_HPPTY_T
State machine properties.
void rkh_sm_ctor(RKH_SM_T *me)
Initializes the attributes of the state machine instance.
void rkh_sm_propagate(RKH_SM_T *me, RKH_EVT_T *e)
Propagate an event to self. This event will be processed subsequently, without exiting from the curre...
RKH_RCODE_T
Return codes from rkh_sm_dispatch() function.
void rkh_sm_init(RKH_SM_T *me)
Inits a previously created state machine calling its initializing action.
void rkh_sm_clear_history(RKHROM RKH_SHIST_T *h)
Erase the history of a state. It can be a shallow or deep history.
Defines event data type and other related macros.
RKH engine interface.This header file is directly included in RKH interface file, rkh....
void(* RKH_TRN_ACT_T)(void)
Transition action.
void(* RKH_EXT_ACT_T)(void)
Exit action.
RKH_SIG_T(* RKH_PPRO_T)(RKH_EVT_T *pe)
Event preprocessor.
rbool_t(* RKH_GUARD_T)(void)
Guard.
void(* RKH_ENT_ACT_T)(void)
Entry action.
Maintains the basic information of a state.
Represents events without parameters.
RKHROM RKH_TR_T * trtbl
Points to state transition table.
Describes a composite state.
RKHROM RKH_TR_T * trtbl
Points to state transition table.
Describes the exit point connection.
RKH_BASE_T base
Maintains the basic information of state.
RKHROM RKH_TR_T trn
History default transition.
RKHROM RKH_ST_T * parent
Points to state's parent.
RKHROM RKH_ST_T ** target
Points to RAM memory location which stores the state's history.
Describes the state machine.
RKH_TRN_ACT_T iaction
Points to initializing action (optional).
rui8_t ppty
State machine properties.
RKH_EVT_T * propagatedEvent
Points to the propagated event.
RKHROM RKH_ST_T * istate
Name of State Machine Application (a.k.a Active Object).
rui8_t prio
SMA (a.k.a Active Object) priority.
RKHROM RKH_ST_T * state
Pointer to an event that will be passed to state machine application when it starts....
Describes the common properties of regular states (basic, composite, and submachine).
RKH_BASE_T base
Maintains the basic information of state.
Describes the state transition.
RKHROM void * target
Points to target state.
RKH_GUARD_T guard
Points to guard function.
RKH_TRN_ACT_T action
Points to transition action.
RKH_SIG_T event
Triggering event.