RKH
Loading...
Searching...
No Matches
rkhsm.h
Go to the documentation of this file.
1/*
2 * --------------------------------------------------------------------------
3 *
4 * Framework RKH
5 * -------------
6 *
7 * State-machine framework for reactive embedded systems
8 *
9 * Copyright (C) 2010 Leandro Francucci.
10 * All rights reserved. Protected by international copyright laws.
11 *
12 *
13 * RKH is free software: you can redistribute it and/or modify it under the
14 * terms of the GNU General Public License as published by the Free Software
15 * Foundation, either version 3 of the License, or (at your option) any
16 * later version.
17 *
18 * RKH is distributed in the hope that it will be useful, but WITHOUT ANY
19 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
21 * more details.
22 *
23 * You should have received a copy of the GNU General Public License along
24 * with RKH, see copying.txt file.
25 *
26 * Contact information:
27 * RKH site: http://vortexmakes.com/que-es/
28 * RKH GitHub: https://github.com/vortexmakes/RKH
29 * RKH Sourceforge: https://sourceforge.net/projects/rkh-reactivesys/
30 * e-mail: lf@vortexmakes.com
31 * ---------------------------------------------------------------------------
32 */
33
42/* -------------------------- Development history -------------------------- */
43/*
44 * 2017.04.14 LeFr v2.4.05 Initial version
45 */
46
47/* -------------------------------- Authors -------------------------------- */
48/*
49 * LeFr Leandro Francucci lf@vortexmakes.com
50 */
51
52/* --------------------------------- Notes --------------------------------- */
53/* --------------------------------- Module -------------------------------- */
54#ifndef __RKHSM_H__
55#define __RKHSM_H__
56
57/* ----------------------------- Include files ----------------------------- */
58#include "rkhevt.h"
59#include "rkhitl.h"
60
61/* ---------------------- External C language linkage ---------------------- */
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66/* --------------------------------- Macros -------------------------------- */
67#define RKH_SM_NAME(smName_) s_##smName_
68#define RKH_SM_CONST_NAME(smName_) rs_##smName_
69
82#define ELSE rkh_sm_else
83
153#define RKH_CREATE_COMP_REGION_STATE(name, en, ex, parent, defchild, \
154 initialTrn, \
155 kindOfHistory, hDftTrnGuard, \
156 hDftTrnAction, hDftTarget, hRamMem) \
157 \
158 MKFINAL_INCOMP(name); \
159 MKHIST_INCOMP(name, kindOfHistory, hDftTrnGuard, hDftTrnAction, \
160 hDftTarget, hRamMem); \
161 \
162 extern RKHROM RKH_TR_T name##_trtbl[]; \
163 RKHROM RKH_SCMP_T name = \
164 { \
165 {MKBASE(RKH_COMPOSITE, name), MKST(en, ex, parent)}, \
166 MKCOMP(name, defchild, initialTrn, &name##Hist) \
167 }
168
192#define RKH_CREATE_COMP_STATE(name, en, ex, parent, defchild, history) \
193 \
194 extern RKHROM RKH_TR_T name##_trtbl[]; \
195 RKHROM RKH_SCMP_T name = \
196 { \
197 {MKBASE(RKH_COMPOSITE, name), MKST(en, ex, parent)}, \
198 MKCOMP(name, defchild, NULL, history) \
199 }
200
213#define RKH_CREATE_FINAL_STATE(name, parent) \
214 \
215 static RKHROM RKH_TR_T name##_trtbl[] = \
216 RKH_TRREG(RKH_ANY, NULL, NULL, NULL); \
217 RKHROM RKH_FINAL_T name = \
218 { \
219 {MKBASE(RKH_FINAL, name), MKST(NULL, NULL, parent)}, \
220 MKFINAL(name) \
221 }
222
278#define RKH_CREATE_BASIC_STATE(name, en, ex, parent, prepro) \
279 \
280 extern RKHROM RKH_TR_T name##_trtbl[]; \
281 \
282 RKHROM RKH_SBSC_T name = \
283 { \
284 {MKBASE(RKH_BASIC, name), MKST(en,ex,parent)}, \
285 MKBASIC(name,prepro) \
286 }
287
314#define RKH_CREATE_COND_STATE(name) \
315 \
316 extern RKHROM RKH_TR_T name##_trtbl[]; \
317 \
318 RKHROM RKH_SCOND_T name = \
319 { \
320 MKBASE(RKH_CONDITIONAL, name), \
321 name##_trtbl \
322 }
323
350#define RKH_CREATE_CHOICE_STATE(name) \
351 \
352 extern RKHROM RKH_TR_T name##_trtbl[]; \
353 \
354 RKHROM RKH_SCHOICE_T name = \
355 { \
356 MKBASE(RKH_CHOICE, name), \
357 name##_trtbl \
358 }
359
394#define RKH_CREATE_DEEP_HISTORY_STATE(name, parent, dftTrnGuard, \
395 dftTrnAction, dftTarget) \
396 \
397 static RKHROM RKH_ST_T *ram##name; \
398 MKHISTORY(name, parent, RKH_DHISTORY, dftTrnGuard, dftTrnAction, \
399 dftTarget, &ram##name)
400
437#define RKH_CREATE_SHALLOW_HISTORY_STATE(name, parent, dftTrnGuard, \
438 dftTrnAction, dftTarget) \
439 \
440 static RKHROM RKH_ST_T *ram##name; \
441 MKHISTORY(name, parent, RKH_SHISTORY, dftTrnGuard, dftTrnAction, \
442 dftTarget, &ram##name)
443
494#define RKH_CREATE_SUBMACHINE_STATE(name, en, ex, parent, sbm) \
495 \
496 extern RKHROM RKH_EXPCN_T name##_exptbl[]; \
497 extern RKHROM RKH_TR_T name##_trtbl[]; \
498 \
499 RKHROM RKH_SSBM_T name = \
500 { \
501 {MKBASE(RKH_SUBMACHINE, name), MKST(en,ex,parent)}, \
502 MKSBM(name,sbm) \
503 }
504
530#define RKH_CREATE_EX_CNNPNT_TABLE(name) \
531 RKHROM RKH_EXPCN_T name##_exptbl[]= \
532 {
533
576#define RKH_EX_CNNPNT(name, expnt, act, ts) \
577 {(RKH_TRN_ACT_T)act, (RKHROM struct RKH_ST_T *)ts}
578
600#define RKH_END_EX_CNNPNT_TABLE };
601
624#define RKH_EN_CNNPNT(name, enpnt, subm) \
625 \
626 RKHROM RKH_SENP_T name = \
627 { \
628 MKBASE(RKH_ENPOINT, name), \
629 MKENP(enpnt,subm) \
630 }
631
655#define RKH_CREATE_REF_SUBMACHINE(name, defchild, iact) \
656 \
657 static RKHROM RKH_ST_T * rdyp_##name; \
658 \
659 RKHROM RKH_RSM_T name = \
660 { \
661 MKBASE(RKH_REF_SUBMACHINE, name), \
662 MKMCH(defchild,iact,name) \
663 }
664
709#define RKH_CREATE_REF_EXPNT(name, ix, subm) \
710 \
711 RKHROM RKH_SEXP_T name = \
712 { \
713 MKBASE(RKH_EXPOINT, name), \
714 ix, subm \
715 }
716
746#define RKH_CREATE_REF_ENPNT(name, act, ts, subm) \
747 \
748 RKHROM RKH_ENPCN_T name = \
749 { \
750 (RKH_TRN_ACT_T)act, (RKHROM struct RKH_ST_T *)ts \
751 }
752
778#define RKH_CREATE_TRANS_TABLE(name) \
779 \
780 RKHROM RKH_TR_T name##_trtbl[]= \
781 {
782
812#define RKH_TRREG(evt_, guard_, effect_, target_) \
813 MKTRN(evt_, guard_, effect_, target_)
814
836#define RKH_TRINT(e, g, a) {e, (RKH_GUARD_T)g, (RKH_TRN_ACT_T)a, NULL}
837
871#define RKH_TRCOMPLETION(guard_, effect_, target_) \
872 {RKH_COMPLETION_EVENT, \
873 (RKH_GUARD_T)guard_, (RKH_TRN_ACT_T)effect_, target_}
874
895#define RKH_END_TRANS_TABLE {RKH_ANY, NULL, NULL, NULL}};
896
921#define RKH_CREATE_BRANCH_TABLE(name) \
922 \
923 RKH_CREATE_TRANS_TABLE(name)
924
957#define RKH_BRANCH(guard_, effect_, target_) \
958 MKTRN(0, guard_, effect_, target_)
959
973#define RKH_CREATE_HISTORY_STORAGE(compStateName) \
974 static RKHROM RKH_ST_T *ramHist_##compStateName
975
987#define RKH_GET_HISTORY_STORAGE(compStateName) \
988 &ramHist_##compStateName
989
990/*
991 * This macro is internal to RKH and the user application should
992 * not call it.
993 */
994#define RKH_EBTBL {RKH_ANY, NULL, NULL, NULL}
995
1014#define RKH_END_BRANCH_TABLE RKH_EBTBL};
1015
1020#define RKH_ROOT RKH_NULL
1021
1049#define RKH_SM_DCLR(me_) \
1050 RKH_DCLR_PTR_TYPE(RKH_SM_T, me_)
1051
1074#define RKH_SM_DCLR_TYPE(type_, me_) \
1075 RKH_DCLR_PTR_TYPE(type_, me_)
1076
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[]
1108
1132#define RKH_DCLR_SM_GLOBAL(sm_t, sm, gob) \
1133 sm_t * const gob = &s_##sm;
1134
1150#define RKH_DCLR_SM_CONST_GLOBAL(smName) \
1151 extern RKHROM RKH_ROM_T RKH_SM_CONST_NAME(smName)
1152
1277#define RKH_INIT_BASIC_STATE(name, en, ex, parent, prepro) \
1278 { \
1279 { \
1280 MKBASE(RKH_BASIC, name), /* RKH_BASE_T */ \
1281 MKST(en, ex, parent) \
1282 }, /* RKH_ST_T */ \
1283 MKBASIC(name, prepro) \
1284 } /* RKH_SBSC_T */ \
1285
1286
1300#define RKH_INIT_COMPOSITE_STATE(name, en, ex, parent, \
1301 defchild, history) \
1302 { \
1303 { \
1304 MKBASE(RKH_COMPOSITE, name), /* RKH_BASE_T */ \
1305 MKST(en, ex, parent) \
1306 }, /* RKH_ST_T */ \
1307 MKCOMP(name, defchild, history) \
1308 } /* RKH_SCMP_T */ \
1309
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)}
1359#else
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)}
1364#endif
1365
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)
1405#else
1406 #define RKH_SM_INIT(me_, nameSMConst_, prio_, ppty_, initialState_, \
1407 initialAction_, initialEvt_) \
1408 MKRT_SM(me_, nameSMConst_, prio_, ppty_, initialState_, \
1409 initialAction_, initialEvt_)
1410#endif
1411
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) = \
1446 MKRRKH(name, \
1447 prio, \
1448 ppty, \
1449 initialState, \
1450 initialAction, \
1451 initialEvt)
1452#else
1453 #define RKH_SM_CONST_CREATE(name, prio, ppty, initialState, \
1454 initialAction, initialEvt)
1455#endif
1456
1464#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1465 #define RKH_SM_GET_CONST(sm) \
1466 ((RKH_SM_T *)sm)->romrkh
1467#else
1468 #define RKH_SM_GET_CONST(sm) \
1469 ((RKH_SM_T *)sm)
1470#endif
1471
1478#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1479 #define RKH_SM_GET_CONST_OBJ(sm) \
1480 &RKH_SM_CONST_NAME(sm)
1481#else
1482 #define RKH_SM_GET_CONST_OBJ(sm) \
1483 ((RKH_SM_T *)sm)
1484#endif
1485
1486#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1487 #define RKH_SM_GET_OBJ(type, sm)
1488#else
1489 #define RKH_SM_GET_OBJ(type, sm) \
1490 (type *)&RKH_SM_NAME(sm)
1491#endif
1492
1502#define RKH_SM_DEF_PTR(sm) \
1503 RKH_SM_T *const sm = (RKH_SM_T *)&RKH_SM_NAME(sm)
1504
1519#define RKH_SM_DEF_PTR_TYPE(type, sm) \
1520 type *const sm = (type *)&RKH_SM_NAME(sm)
1521
1531#define RKH_GET_CSTATE_ID(me) \
1532 ((RKH_BASE_T *)(((RKH_SM_T *)me)->state))->id
1533
1534#if R_TRC_AO_NAME_EN == RKH_ENABLED
1544 #define RKH_GET_VERTEX_NAME(vx) \
1545 ((struct RKH_BASE_T *)(vx))->name
1546#else
1547 #define RKH_GET_VERTEX_NAME(vx) noname
1548#endif
1549
1550/* -------------------------------- Constants ------------------------------ */
1551/* ------------------------------- Data types ------------------------------ */
1599
1606typedef enum
1607{
1613
1622
1626
1653#if RKH_CFG_SMA_ENT_ARG_SMA_EN == RKH_ENABLED
1654 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1655 typedef void (*RKH_ENT_ACT_T)(const RKH_SM_T *me,
1656 const RKH_ST_T *state);
1657 #else
1658 typedef void (*RKH_ENT_ACT_T)(const RKH_SM_T *me);
1659 #endif
1660#else
1661 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1662 typedef void (*RKH_ENT_ACT_T)(const RKH_ST_T *state);
1663 #else
1664 typedef void (*RKH_ENT_ACT_T)(void);
1665 #endif
1666#endif
1667
1693#if RKH_CFG_SMA_EXT_ARG_SMA_EN == RKH_ENABLED
1694 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1695 typedef void (*RKH_EXT_ACT_T)(const RKH_SM_T *me,
1696 const RKH_ST_T *state);
1697 #else
1698 typedef void (*RKH_EXT_ACT_T)(const RKH_SM_T *me);
1699 #endif
1700#else
1701 #if RKH_CFG_SMA_ENT_ARG_STATE_EN == RKH_ENABLED
1702 typedef void (*RKH_EXT_ACT_T)(const RKH_ST_T *state);
1703 #else
1704 typedef void (*RKH_EXT_ACT_T)(void);
1705 #endif
1706#endif
1707
1726#if RKH_CFG_SMA_PPRO_ARG_SMA_EN == RKH_ENABLED
1727 typedef RKH_SIG_T (*RKH_PPRO_T)(const RKH_SM_T *sma,
1728 RKH_EVT_T *pe);
1729#else
1731#endif
1732
1764#if (RKH_CFG_SMA_ACT_ARG_EVT_EN == RKH_ENABLED && \
1765 RKH_CFG_SMA_ACT_ARG_SMA_EN == RKH_ENABLED)
1766 typedef void (*RKH_TRN_ACT_T)(const RKH_SM_T *me,
1767 RKH_EVT_T *pe);
1768#elif (RKH_CFG_SMA_ACT_ARG_EVT_EN == RKH_ENABLED && \
1769 RKH_CFG_SMA_ACT_ARG_SMA_EN == RKH_DISABLED)
1770 typedef void (*RKH_TRN_ACT_T)(RKH_EVT_T *pe);
1771#elif (RKH_CFG_SMA_ACT_ARG_EVT_EN == RKH_DISABLED && \
1772 RKH_CFG_SMA_ACT_ARG_SMA_EN == RKH_ENABLED)
1773 typedef void (*RKH_TRN_ACT_T)(const RKH_SM_T *me);
1774#else
1775 typedef void (*RKH_TRN_ACT_T)(void);
1776#endif
1777
1802#if (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
1803 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_ENABLED)
1804
1805 typedef rbool_t (*RKH_GUARD_T)(const RKH_SM_T *me,
1806 RKH_EVT_T *pe);
1807#elif (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
1808 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_DISABLED)
1809 typedef rbool_t (*RKH_GUARD_T)(RKH_EVT_T *pe);
1810#elif (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_DISABLED && \
1811 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_ENABLED)
1812 typedef rbool_t (*RKH_GUARD_T)(const RKH_SM_T *me);
1813#else
1814 typedef rbool_t (*RKH_GUARD_T)(void);
1815#endif
1816
1817#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1829struct RKH_ROM_T
1830{
1838 rui8_t prio;
1839
1847 rui8_t ppty;
1848
1857#if R_TRC_AO_NAME_EN == RKH_ENABLED
1858 const char *name;
1859#endif
1860
1868 RKHROM RKH_ST_T *istate;
1869
1877 RKH_TRN_ACT_T iaction;
1878
1887#if RKH_CFG_SMA_INIT_EVT_EN == RKH_ENABLED
1888 const RKH_EVT_T *ievent;
1889#endif
1890};
1891#endif
1892
1904#if RKH_CFG_SMA_SM_CONST_EN == RKH_ENABLED
1905struct RKH_SM_T
1906{
1911 RKHROM RKH_ROM_T *romrkh;
1912
1917 RKHROM RKH_ST_T *state;
1918
1924};
1925#else
1927{
1935 rui8_t prio;
1936
1944 rui8_t ppty;
1945
1954#if R_TRC_AO_NAME_EN == RKH_ENABLED
1955 const char *name;
1956#endif
1957
1966
1975
1984#if RKH_CFG_SMA_INIT_EVT_EN == RKH_ENABLED
1985 const RKH_EVT_T *ievent;
1986#endif
1987
1993
1999};
2000#endif
2001
2007{
2022 ruint type;
2023
2032#if R_TRC_AO_NAME_EN == RKH_ENABLED
2033 const char *name;
2034#endif
2035};
2036
2046{
2052
2058
2064
2069 RKHROM void *target;
2070};
2071
2078{
2084
2085#if RKH_CFG_SMA_HCAL_EN == RKH_ENABLED
2090 RKH_ENT_ACT_T enter;
2091
2096 RKH_EXT_ACT_T exit;
2097
2102 RKHROM RKH_ST_T *parent;
2103#endif
2104};
2105
2111{
2112 RKH_ST_T st;
2113
2119
2158#if RKH_CFG_SMA_PPRO_EN == RKH_ENABLED
2159 RKH_PPRO_T prepro;
2160#endif
2161};
2162
2168{
2169 RKH_ST_T st;
2170
2176
2215#if RKH_CFG_SMA_PPRO_EN == RKH_ENABLED
2216 RKH_PPRO_T prepro;
2217#endif
2218
2219#if RKH_CFG_SMA_HCAL_EN == RKH_ENABLED
2224 RKHROM void *defchild;
2225
2230 RKH_TRN_ACT_T initialAction;
2231
2236#if defined(RKH_HISTORY_ENABLED)
2237 RKHROM RKH_SHIST_T *history;
2238#endif
2239#endif
2240};
2241
2247{
2253
2259
2264#if RKH_CFG_SMA_PPRO_EN == RKH_ENABLED
2265 RKH_PPRO_T prepro;
2266#endif
2267};
2268
2273#if defined(RKH_SUBMACHINE_ENABLED)
2274struct RKH_EXPCN_T
2275{
2280 RKH_TRN_ACT_T action;
2281
2286 RKHROM void *target;
2287};
2288
2293struct RKH_ENPCN_T
2294{
2299 RKH_TRN_ACT_T action;
2300
2305 RKHROM void *target;
2306};
2307
2366struct RKH_SSBM_T
2367{
2368 RKH_ST_T st;
2369
2374 RKHROM RKH_TR_T *trtbl;
2375
2380 RKHROM RKH_EXPCN_T *exptbl;
2381
2386 RKHROM RKH_RSM_T *sbm;
2387};
2388
2393struct RKH_RSM_T
2394{
2399 RKH_BASE_T base;
2400
2405 RKHROM void *defchild;
2406
2414 RKH_TRN_ACT_T iaction;
2415
2421 RKHROM RKH_ST_T * *dyp;
2422};
2423
2435struct RKH_SENP_T
2436{
2441 RKH_BASE_T base;
2442
2447 RKHROM RKH_ENPCN_T *enpcn;
2448
2453 RKHROM RKH_ST_T *parent;
2454};
2455
2466struct RKH_SEXP_T
2467{
2472 RKH_BASE_T base;
2473
2478 rui8_t ix;
2479
2484 RKHROM RKH_RSM_T *parent;
2485};
2486#endif
2487
2492#if defined(RKH_CHOICE_OR_CONDITIONAL_ENABLED)
2493struct RKH_SCOND_T
2494{
2499 RKH_BASE_T base;
2500
2505 RKHROM RKH_TR_T *trtbl;
2506};
2507#endif
2508
2513#if defined(RKH_CHOICE_ENABLED)
2514struct RKH_SCHOICE_T
2515{
2520 RKH_BASE_T base;
2521
2526 RKHROM RKH_TR_T *trtbl;
2527};
2528#endif
2529
2537{
2543
2549
2556
2562};
2563
2564/* -------------------------- External variables --------------------------- */
2565/* -------------------------- Function prototypes -------------------------- */
2575
2633
2647
2657
2658#if (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
2659 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_ENABLED)
2660rbool_t rkh_sm_else(const RKH_SM_T *sma, RKH_EVT_T *pe);
2661#elif (RKH_CFG_SMA_GRD_ARG_EVT_EN == RKH_ENABLED && \
2662 RKH_CFG_SMA_GRD_ARG_SMA_EN == RKH_DISABLED)
2663rbool_t rkh_sm_else(RKH_EVT_T *pe);
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);
2667#else
2668rbool_t rkh_sm_else(void);
2669#endif
2670
2689
2690/* -------------------- External C language linkage end -------------------- */
2691#ifdef __cplusplus
2692}
2693#endif
2694
2695/* ------------------------------ Module end ------------------------------- */
2696#endif
2697
2698/* ------------------------------ End of file ------------------------------ */
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.
Definition rkhsm.h:1607
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.
Definition rkhsm.h:1559
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.
@ FLAT
Definition rkhsm.h:1621
@ RKH_NUM_HPPTY
Definition rkhsm.h:1624
@ HCAL
Definition rkhsm.h:1612
@ RKH_UNKN_STATE
Definition rkhsm.h:1585
@ RKH_EVT_NFOUND
Definition rkhsm.h:1569
@ RKH_CND_NFOUND
Definition rkhsm.h:1575
@ RKH_EX_HLEVEL
Definition rkhsm.h:1590
@ RKH_EVT_PROC
Definition rkhsm.h:1564
@ RKH_EX_TSEG
Definition rkhsm.h:1596
@ RKH_GRD_FALSE
Definition rkhsm.h:1580
Defines event data type and other related macros.
rui8_t RKH_SIG_T
Definition rkhevt.h:106
RKH engine interface.This header file is directly included in RKH interface file, rkh....
void(* RKH_TRN_ACT_T)(void)
Transition action.
Definition rkhsm.h:1775
void(* RKH_EXT_ACT_T)(void)
Exit action.
Definition rkhsm.h:1704
RKH_SIG_T(* RKH_PPRO_T)(RKH_EVT_T *pe)
Event preprocessor.
Definition rkhsm.h:1730
rbool_t(* RKH_GUARD_T)(void)
Guard.
Definition rkhsm.h:1814
void(* RKH_ENT_ACT_T)(void)
Entry action.
Definition rkhsm.h:1664
Maintains the basic information of a state.
Definition rkhsm.h:2007
ruint type
State type.
Definition rkhsm.h:2022
Represents events without parameters.
Definition rkhevt.h:170
Describes a final state.
Definition rkhsm.h:2247
RKH_ST_T st
Definition rkhsm.h:2252
RKHROM RKH_TR_T * trtbl
Definition rkhsm.h:2258
Describes a basic state.
Definition rkhsm.h:2111
RKHROM RKH_TR_T * trtbl
Points to state transition table.
Definition rkhsm.h:2118
Describes a composite state.
Definition rkhsm.h:2168
RKHROM RKH_TR_T * trtbl
Points to state transition table.
Definition rkhsm.h:2175
Describes the exit point connection.
Definition rkhsm.h:2537
RKH_BASE_T base
Maintains the basic information of state.
Definition rkhsm.h:2542
RKHROM RKH_TR_T trn
History default transition.
Definition rkhsm.h:2561
RKHROM RKH_ST_T * parent
Points to state's parent.
Definition rkhsm.h:2548
RKHROM RKH_ST_T ** target
Points to RAM memory location which stores the state's history.
Definition rkhsm.h:2555
Describes the state machine.
Definition rkhsm.h:1927
RKH_TRN_ACT_T iaction
Points to initializing action (optional).
Definition rkhsm.h:1974
rui8_t ppty
State machine properties.
Definition rkhsm.h:1944
RKH_EVT_T * propagatedEvent
Points to the propagated event.
Definition rkhsm.h:1998
RKHROM RKH_ST_T * istate
Name of State Machine Application (a.k.a Active Object).
Definition rkhsm.h:1965
rui8_t prio
SMA (a.k.a Active Object) priority.
Definition rkhsm.h:1935
RKHROM RKH_ST_T * state
Pointer to an event that will be passed to state machine application when it starts....
Definition rkhsm.h:1992
Describes the common properties of regular states (basic, composite, and submachine).
Definition rkhsm.h:2078
RKH_BASE_T base
Maintains the basic information of state.
Definition rkhsm.h:2083
Describes the state transition.
Definition rkhsm.h:2046
RKHROM void * target
Points to target state.
Definition rkhsm.h:2069
RKH_GUARD_T guard
Points to guard function.
Definition rkhsm.h:2057
RKH_TRN_ACT_T action
Points to transition action.
Definition rkhsm.h:2063
RKH_SIG_T event
Triggering event.
Definition rkhsm.h:2051