RaiseEvent.cpp 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. #include "RaiseEvent.h"
  2. #include <string.h>
  3. /*! \file Implementation of the state machine 'RaiseEvent'
  4. */
  5. RaiseEvent::RaiseEvent()
  6. {
  7. stateConfVectorPosition = 0;
  8. }
  9. RaiseEvent::~RaiseEvent()
  10. {
  11. }
  12. void RaiseEvent::init()
  13. {
  14. for (int i = 0; i < maxOrthogonalStates; ++i)
  15. stateConfVector[i] = RaiseEvent_last_state;
  16. stateConfVectorPosition = 0;
  17. clearInEvents();
  18. clearOutEvents();
  19. }
  20. void RaiseEvent::enter()
  21. {
  22. /* Default enter sequence for statechart RaiseEvent */
  23. enseq_main_region_default();
  24. enseq_second_region_default();
  25. }
  26. void RaiseEvent::exit()
  27. {
  28. /* Default exit sequence for statechart RaiseEvent */
  29. exseq_main_region();
  30. exseq_second_region();
  31. }
  32. sc_boolean RaiseEvent::isActive() const
  33. {
  34. return stateConfVector[0] != RaiseEvent_last_state||stateConfVector[1] != RaiseEvent_last_state;
  35. }
  36. /*
  37. * Always returns 'false' since this state machine can never become final.
  38. */
  39. sc_boolean RaiseEvent::isFinal() const
  40. {
  41. return false;}
  42. void RaiseEvent::runCycle()
  43. {
  44. clearOutEvents();
  45. for (stateConfVectorPosition = 0;
  46. stateConfVectorPosition < maxOrthogonalStates;
  47. stateConfVectorPosition++)
  48. {
  49. switch (stateConfVector[stateConfVectorPosition])
  50. {
  51. case main_region_StateA :
  52. {
  53. react_main_region_StateA();
  54. break;
  55. }
  56. case main_region_StateB :
  57. {
  58. react_main_region_StateB();
  59. break;
  60. }
  61. case second_region_SateA :
  62. {
  63. react_second_region_SateA();
  64. break;
  65. }
  66. case second_region_StateB :
  67. {
  68. react_second_region_StateB();
  69. break;
  70. }
  71. default:
  72. break;
  73. }
  74. }
  75. clearInEvents();
  76. }
  77. void RaiseEvent::clearInEvents()
  78. {
  79. iface.e2_raised = false;
  80. }
  81. void RaiseEvent::clearOutEvents()
  82. {
  83. iface.e1_raised = false;
  84. }
  85. sc_boolean RaiseEvent::isStateActive(RaiseEventStates state) const
  86. {
  87. switch (state)
  88. {
  89. case main_region_StateA :
  90. return (sc_boolean) (stateConfVector[0] == main_region_StateA
  91. );
  92. case main_region_StateB :
  93. return (sc_boolean) (stateConfVector[0] == main_region_StateB
  94. );
  95. case second_region_SateA :
  96. return (sc_boolean) (stateConfVector[1] == second_region_SateA
  97. );
  98. case second_region_StateB :
  99. return (sc_boolean) (stateConfVector[1] == second_region_StateB
  100. );
  101. default: return false;
  102. }
  103. }
  104. RaiseEvent::DefaultSCI* RaiseEvent::getDefaultSCI()
  105. {
  106. return &iface;
  107. }
  108. void RaiseEvent::DefaultSCI::raise_e2()
  109. {
  110. e2_raised = true;
  111. }
  112. void RaiseEvent::raise_e2()
  113. {
  114. iface.raise_e2();
  115. }
  116. sc_boolean RaiseEvent::DefaultSCI::isRaised_e1() const
  117. {
  118. return e1_raised;
  119. }
  120. sc_boolean RaiseEvent::isRaised_e1() const
  121. {
  122. return iface.isRaised_e1();
  123. }
  124. // implementations of all internal functions
  125. sc_boolean RaiseEvent::check_main_region_StateA_tr0_tr0()
  126. {
  127. return iface.e2_raised;
  128. }
  129. sc_boolean RaiseEvent::check_second_region_SateA_tr0_tr0()
  130. {
  131. return iface.e1_raised;
  132. }
  133. void RaiseEvent::effect_main_region_StateA_tr0()
  134. {
  135. exseq_main_region_StateA();
  136. enseq_main_region_StateB_default();
  137. }
  138. void RaiseEvent::effect_second_region_SateA_tr0()
  139. {
  140. exseq_second_region_SateA();
  141. enseq_second_region_StateB_default();
  142. }
  143. /* Entry action for state 'StateB'. */
  144. void RaiseEvent::enact_main_region_StateB()
  145. {
  146. /* Entry action for state 'StateB'. */
  147. iface.e1_raised = true;
  148. }
  149. /* 'default' enter sequence for state StateA */
  150. void RaiseEvent::enseq_main_region_StateA_default()
  151. {
  152. /* 'default' enter sequence for state StateA */
  153. stateConfVector[0] = main_region_StateA;
  154. stateConfVectorPosition = 0;
  155. }
  156. /* 'default' enter sequence for state StateB */
  157. void RaiseEvent::enseq_main_region_StateB_default()
  158. {
  159. /* 'default' enter sequence for state StateB */
  160. enact_main_region_StateB();
  161. stateConfVector[0] = main_region_StateB;
  162. stateConfVectorPosition = 0;
  163. }
  164. /* 'default' enter sequence for state SateA */
  165. void RaiseEvent::enseq_second_region_SateA_default()
  166. {
  167. /* 'default' enter sequence for state SateA */
  168. stateConfVector[1] = second_region_SateA;
  169. stateConfVectorPosition = 1;
  170. }
  171. /* 'default' enter sequence for state StateB */
  172. void RaiseEvent::enseq_second_region_StateB_default()
  173. {
  174. /* 'default' enter sequence for state StateB */
  175. stateConfVector[1] = second_region_StateB;
  176. stateConfVectorPosition = 1;
  177. }
  178. /* 'default' enter sequence for region main region */
  179. void RaiseEvent::enseq_main_region_default()
  180. {
  181. /* 'default' enter sequence for region main region */
  182. react_main_region__entry_Default();
  183. }
  184. /* 'default' enter sequence for region second region */
  185. void RaiseEvent::enseq_second_region_default()
  186. {
  187. /* 'default' enter sequence for region second region */
  188. react_second_region__entry_Default();
  189. }
  190. /* Default exit sequence for state StateA */
  191. void RaiseEvent::exseq_main_region_StateA()
  192. {
  193. /* Default exit sequence for state StateA */
  194. stateConfVector[0] = RaiseEvent_last_state;
  195. stateConfVectorPosition = 0;
  196. }
  197. /* Default exit sequence for state StateB */
  198. void RaiseEvent::exseq_main_region_StateB()
  199. {
  200. /* Default exit sequence for state StateB */
  201. stateConfVector[0] = RaiseEvent_last_state;
  202. stateConfVectorPosition = 0;
  203. }
  204. /* Default exit sequence for state SateA */
  205. void RaiseEvent::exseq_second_region_SateA()
  206. {
  207. /* Default exit sequence for state SateA */
  208. stateConfVector[1] = RaiseEvent_last_state;
  209. stateConfVectorPosition = 1;
  210. }
  211. /* Default exit sequence for state StateB */
  212. void RaiseEvent::exseq_second_region_StateB()
  213. {
  214. /* Default exit sequence for state StateB */
  215. stateConfVector[1] = RaiseEvent_last_state;
  216. stateConfVectorPosition = 1;
  217. }
  218. /* Default exit sequence for region main region */
  219. void RaiseEvent::exseq_main_region()
  220. {
  221. /* Default exit sequence for region main region */
  222. /* Handle exit of all possible states (of RaiseEvent.main_region) at position 0... */
  223. switch(stateConfVector[ 0 ])
  224. {
  225. case main_region_StateA :
  226. {
  227. exseq_main_region_StateA();
  228. break;
  229. }
  230. case main_region_StateB :
  231. {
  232. exseq_main_region_StateB();
  233. break;
  234. }
  235. default: break;
  236. }
  237. }
  238. /* Default exit sequence for region second region */
  239. void RaiseEvent::exseq_second_region()
  240. {
  241. /* Default exit sequence for region second region */
  242. /* Handle exit of all possible states (of RaiseEvent.second_region) at position 1... */
  243. switch(stateConfVector[ 1 ])
  244. {
  245. case second_region_SateA :
  246. {
  247. exseq_second_region_SateA();
  248. break;
  249. }
  250. case second_region_StateB :
  251. {
  252. exseq_second_region_StateB();
  253. break;
  254. }
  255. default: break;
  256. }
  257. }
  258. /* The reactions of state StateA. */
  259. void RaiseEvent::react_main_region_StateA()
  260. {
  261. /* The reactions of state StateA. */
  262. if (check_main_region_StateA_tr0_tr0())
  263. {
  264. effect_main_region_StateA_tr0();
  265. }
  266. }
  267. /* The reactions of state StateB. */
  268. void RaiseEvent::react_main_region_StateB()
  269. {
  270. /* The reactions of state StateB. */
  271. }
  272. /* The reactions of state SateA. */
  273. void RaiseEvent::react_second_region_SateA()
  274. {
  275. /* The reactions of state SateA. */
  276. if (check_second_region_SateA_tr0_tr0())
  277. {
  278. effect_second_region_SateA_tr0();
  279. }
  280. }
  281. /* The reactions of state StateB. */
  282. void RaiseEvent::react_second_region_StateB()
  283. {
  284. }
  285. /* Default react sequence for initial entry */
  286. void RaiseEvent::react_main_region__entry_Default()
  287. {
  288. /* Default react sequence for initial entry */
  289. enseq_main_region_StateA_default();
  290. }
  291. /* Default react sequence for initial entry */
  292. void RaiseEvent::react_second_region__entry_Default()
  293. {
  294. /* Default react sequence for initial entry */
  295. enseq_second_region_SateA_default();
  296. }