EnterState.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include "sc_types.h"
  4. #include "EnterState.h"
  5. /*! \file Implementation of the state machine 'EnterState'
  6. */
  7. /* prototypes of all internal functions */
  8. static sc_boolean enterState_check_r_A_tr0_tr0(const EnterState* handle);
  9. static sc_boolean enterState_check_r_A_tr1_tr1(const EnterState* handle);
  10. static sc_boolean enterState_check_r_A_tr2_tr2(const EnterState* handle);
  11. static void enterState_effect_r_A_tr0(EnterState* handle);
  12. static void enterState_effect_r_A_tr1(EnterState* handle);
  13. static void enterState_effect_r_A_tr2(EnterState* handle);
  14. static void enterState_enseq_r_A_default(EnterState* handle);
  15. static void enterState_enseq_r_B_default(EnterState* handle);
  16. static void enterState_enseq_r_B_f(EnterState* handle);
  17. static void enterState_enseq_r_B_g(EnterState* handle);
  18. static void enterState_enseq_r_B_r_E_default(EnterState* handle);
  19. static void enterState_enseq_r_B_r_F_default(EnterState* handle);
  20. static void enterState_enseq_r_default(EnterState* handle);
  21. static void enterState_enseq_r_B_r_default(EnterState* handle);
  22. static void enterState_enseq_r_B_r_f(EnterState* handle);
  23. static void enterState_exseq_r_A(EnterState* handle);
  24. static void enterState_exseq_r_B_r_E(EnterState* handle);
  25. static void enterState_exseq_r_B_r_F(EnterState* handle);
  26. static void enterState_exseq_r(EnterState* handle);
  27. static void enterState_exseq_r_B_r(EnterState* handle);
  28. static void enterState_react_r_A(EnterState* handle);
  29. static void enterState_react_r_B_r_E(EnterState* handle);
  30. static void enterState_react_r_B_r_F(EnterState* handle);
  31. static void enterState_react_r__entry_Default(EnterState* handle);
  32. static void enterState_react_r_B_r__entry_Default(EnterState* handle);
  33. static void enterState_react_r_B_r_f(EnterState* handle);
  34. static void enterState_clearInEvents(EnterState* handle);
  35. static void enterState_clearOutEvents(EnterState* handle);
  36. void enterState_init(EnterState* handle)
  37. {
  38. sc_integer i;
  39. for (i = 0; i < ENTERSTATE_MAX_ORTHOGONAL_STATES; ++i)
  40. {
  41. handle->stateConfVector[i] = EnterState_last_state;
  42. }
  43. handle->stateConfVectorPosition = 0;
  44. enterState_clearInEvents(handle);
  45. enterState_clearOutEvents(handle);
  46. }
  47. void enterState_enter(EnterState* handle)
  48. {
  49. /* Default enter sequence for statechart EnterState */
  50. enterState_enseq_r_default(handle);
  51. }
  52. void enterState_exit(EnterState* handle)
  53. {
  54. /* Default exit sequence for statechart EnterState */
  55. enterState_exseq_r(handle);
  56. }
  57. sc_boolean enterState_isActive(const EnterState* handle)
  58. {
  59. sc_boolean result;
  60. if (handle->stateConfVector[0] != EnterState_last_state)
  61. {
  62. result = bool_true;
  63. }
  64. else
  65. {
  66. result = bool_false;
  67. }
  68. return result;
  69. }
  70. /*
  71. * Always returns 'false' since this state machine can never become final.
  72. */
  73. sc_boolean enterState_isFinal(const EnterState* handle)
  74. {
  75. return bool_false;
  76. }
  77. static void enterState_clearInEvents(EnterState* handle)
  78. {
  79. handle->iface.e_raised = bool_false;
  80. handle->iface.f_raised = bool_false;
  81. handle->iface.g_raised = bool_false;
  82. }
  83. static void enterState_clearOutEvents(EnterState* handle)
  84. {
  85. }
  86. void enterState_runCycle(EnterState* handle)
  87. {
  88. enterState_clearOutEvents(handle);
  89. for (handle->stateConfVectorPosition = 0;
  90. handle->stateConfVectorPosition < ENTERSTATE_MAX_ORTHOGONAL_STATES;
  91. handle->stateConfVectorPosition++)
  92. {
  93. switch (handle->stateConfVector[handle->stateConfVectorPosition])
  94. {
  95. case EnterState_r_A :
  96. {
  97. enterState_react_r_A(handle);
  98. break;
  99. }
  100. case EnterState_r_B_r_E :
  101. {
  102. enterState_react_r_B_r_E(handle);
  103. break;
  104. }
  105. case EnterState_r_B_r_F :
  106. {
  107. enterState_react_r_B_r_F(handle);
  108. break;
  109. }
  110. default:
  111. break;
  112. }
  113. }
  114. enterState_clearInEvents(handle);
  115. }
  116. sc_boolean enterState_isStateActive(const EnterState* handle, EnterStateStates state)
  117. {
  118. sc_boolean result = bool_false;
  119. switch (state)
  120. {
  121. case EnterState_r_A :
  122. result = (sc_boolean) (handle->stateConfVector[0] == EnterState_r_A
  123. );
  124. break;
  125. case EnterState_r_B :
  126. result = (sc_boolean) (handle->stateConfVector[0] >= EnterState_r_B
  127. && handle->stateConfVector[0] <= EnterState_r_B_r_F);
  128. break;
  129. case EnterState_r_B_r_E :
  130. result = (sc_boolean) (handle->stateConfVector[0] == EnterState_r_B_r_E
  131. );
  132. break;
  133. case EnterState_r_B_r_F :
  134. result = (sc_boolean) (handle->stateConfVector[0] == EnterState_r_B_r_F
  135. );
  136. break;
  137. default:
  138. result = bool_false;
  139. break;
  140. }
  141. return result;
  142. }
  143. void enterStateIface_raise_e(EnterState* handle)
  144. {
  145. handle->iface.e_raised = bool_true;
  146. }
  147. void enterStateIface_raise_f(EnterState* handle)
  148. {
  149. handle->iface.f_raised = bool_true;
  150. }
  151. void enterStateIface_raise_g(EnterState* handle)
  152. {
  153. handle->iface.g_raised = bool_true;
  154. }
  155. /* implementations of all internal functions */
  156. static sc_boolean enterState_check_r_A_tr0_tr0(const EnterState* handle)
  157. {
  158. return handle->iface.e_raised;
  159. }
  160. static sc_boolean enterState_check_r_A_tr1_tr1(const EnterState* handle)
  161. {
  162. return handle->iface.f_raised;
  163. }
  164. static sc_boolean enterState_check_r_A_tr2_tr2(const EnterState* handle)
  165. {
  166. return handle->iface.g_raised;
  167. }
  168. static void enterState_effect_r_A_tr0(EnterState* handle)
  169. {
  170. enterState_exseq_r_A(handle);
  171. enterState_enseq_r_B_default(handle);
  172. }
  173. static void enterState_effect_r_A_tr1(EnterState* handle)
  174. {
  175. enterState_exseq_r_A(handle);
  176. enterState_enseq_r_B_f(handle);
  177. }
  178. static void enterState_effect_r_A_tr2(EnterState* handle)
  179. {
  180. enterState_exseq_r_A(handle);
  181. enterState_enseq_r_B_g(handle);
  182. }
  183. /* 'default' enter sequence for state A */
  184. static void enterState_enseq_r_A_default(EnterState* handle)
  185. {
  186. /* 'default' enter sequence for state A */
  187. handle->stateConfVector[0] = EnterState_r_A;
  188. handle->stateConfVectorPosition = 0;
  189. }
  190. /* 'default' enter sequence for state B */
  191. static void enterState_enseq_r_B_default(EnterState* handle)
  192. {
  193. /* 'default' enter sequence for state B */
  194. enterState_enseq_r_B_r_default(handle);
  195. }
  196. /* 'f' enter sequence for state B */
  197. static void enterState_enseq_r_B_f(EnterState* handle)
  198. {
  199. /* 'f' enter sequence for state B */
  200. enterState_enseq_r_B_r_f(handle);
  201. }
  202. /* 'g' enter sequence for state B */
  203. static void enterState_enseq_r_B_g(EnterState* handle)
  204. {
  205. /* 'g' enter sequence for state B */
  206. enterState_enseq_r_B_r_default(handle);
  207. }
  208. /* 'default' enter sequence for state E */
  209. static void enterState_enseq_r_B_r_E_default(EnterState* handle)
  210. {
  211. /* 'default' enter sequence for state E */
  212. handle->stateConfVector[0] = EnterState_r_B_r_E;
  213. handle->stateConfVectorPosition = 0;
  214. }
  215. /* 'default' enter sequence for state F */
  216. static void enterState_enseq_r_B_r_F_default(EnterState* handle)
  217. {
  218. /* 'default' enter sequence for state F */
  219. handle->stateConfVector[0] = EnterState_r_B_r_F;
  220. handle->stateConfVectorPosition = 0;
  221. }
  222. /* 'default' enter sequence for region r */
  223. static void enterState_enseq_r_default(EnterState* handle)
  224. {
  225. /* 'default' enter sequence for region r */
  226. enterState_react_r__entry_Default(handle);
  227. }
  228. /* 'default' enter sequence for region r */
  229. static void enterState_enseq_r_B_r_default(EnterState* handle)
  230. {
  231. /* 'default' enter sequence for region r */
  232. enterState_react_r_B_r__entry_Default(handle);
  233. }
  234. /* 'f' enter sequence for region r */
  235. static void enterState_enseq_r_B_r_f(EnterState* handle)
  236. {
  237. /* 'f' enter sequence for region r */
  238. enterState_react_r_B_r_f(handle);
  239. }
  240. /* Default exit sequence for state A */
  241. static void enterState_exseq_r_A(EnterState* handle)
  242. {
  243. /* Default exit sequence for state A */
  244. handle->stateConfVector[0] = EnterState_last_state;
  245. handle->stateConfVectorPosition = 0;
  246. }
  247. /* Default exit sequence for state E */
  248. static void enterState_exseq_r_B_r_E(EnterState* handle)
  249. {
  250. /* Default exit sequence for state E */
  251. handle->stateConfVector[0] = EnterState_last_state;
  252. handle->stateConfVectorPosition = 0;
  253. }
  254. /* Default exit sequence for state F */
  255. static void enterState_exseq_r_B_r_F(EnterState* handle)
  256. {
  257. /* Default exit sequence for state F */
  258. handle->stateConfVector[0] = EnterState_last_state;
  259. handle->stateConfVectorPosition = 0;
  260. }
  261. /* Default exit sequence for region r */
  262. static void enterState_exseq_r(EnterState* handle)
  263. {
  264. /* Default exit sequence for region r */
  265. /* Handle exit of all possible states (of EnterState.r) at position 0... */
  266. switch(handle->stateConfVector[ 0 ])
  267. {
  268. case EnterState_r_A :
  269. {
  270. enterState_exseq_r_A(handle);
  271. break;
  272. }
  273. case EnterState_r_B_r_E :
  274. {
  275. enterState_exseq_r_B_r_E(handle);
  276. break;
  277. }
  278. case EnterState_r_B_r_F :
  279. {
  280. enterState_exseq_r_B_r_F(handle);
  281. break;
  282. }
  283. default: break;
  284. }
  285. }
  286. /* Default exit sequence for region r */
  287. static void enterState_exseq_r_B_r(EnterState* handle)
  288. {
  289. /* Default exit sequence for region r */
  290. /* Handle exit of all possible states (of EnterState.r.B.r) at position 0... */
  291. switch(handle->stateConfVector[ 0 ])
  292. {
  293. case EnterState_r_B_r_E :
  294. {
  295. enterState_exseq_r_B_r_E(handle);
  296. break;
  297. }
  298. case EnterState_r_B_r_F :
  299. {
  300. enterState_exseq_r_B_r_F(handle);
  301. break;
  302. }
  303. default: break;
  304. }
  305. }
  306. /* The reactions of state A. */
  307. static void enterState_react_r_A(EnterState* handle)
  308. {
  309. /* The reactions of state A. */
  310. if (enterState_check_r_A_tr0_tr0(handle) == bool_true)
  311. {
  312. enterState_effect_r_A_tr0(handle);
  313. } else
  314. {
  315. if (enterState_check_r_A_tr1_tr1(handle) == bool_true)
  316. {
  317. enterState_effect_r_A_tr1(handle);
  318. } else
  319. {
  320. if (enterState_check_r_A_tr2_tr2(handle) == bool_true)
  321. {
  322. enterState_effect_r_A_tr2(handle);
  323. }
  324. }
  325. }
  326. }
  327. /* The reactions of state E. */
  328. static void enterState_react_r_B_r_E(EnterState* handle)
  329. {
  330. /* The reactions of state E. */
  331. }
  332. /* The reactions of state F. */
  333. static void enterState_react_r_B_r_F(EnterState* handle)
  334. {
  335. /* The reactions of state F. */
  336. }
  337. /* Default react sequence for initial entry */
  338. static void enterState_react_r__entry_Default(EnterState* handle)
  339. {
  340. /* Default react sequence for initial entry */
  341. enterState_enseq_r_A_default(handle);
  342. }
  343. /* Default react sequence for initial entry */
  344. static void enterState_react_r_B_r__entry_Default(EnterState* handle)
  345. {
  346. /* Default react sequence for initial entry */
  347. enterState_enseq_r_B_r_E_default(handle);
  348. }
  349. /* Default react sequence for initial entry f */
  350. static void enterState_react_r_B_r_f(EnterState* handle)
  351. {
  352. /* Default react sequence for initial entry f */
  353. enterState_enseq_r_B_r_F_default(handle);
  354. }