TimedTransitions.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. #include "TimedTransitions.h"
  2. #include <string.h>
  3. /*! \file Implementation of the state machine 'TimedTransitions'
  4. */
  5. TimedTransitions::TimedTransitions()
  6. {
  7. stateConfVectorPosition = 0;
  8. timer = null;
  9. }
  10. TimedTransitions::~TimedTransitions()
  11. {
  12. }
  13. void TimedTransitions::init()
  14. {
  15. for (int i = 0; i < maxOrthogonalStates; ++i)
  16. stateConfVector[i] = TimedTransitions_last_state;
  17. stateConfVectorPosition = 0;
  18. clearInEvents();
  19. clearOutEvents();
  20. /* Default init sequence for statechart TimedTransitions */
  21. ifaceInternalSCI.x = 0;
  22. ifaceInternalSCI.y = 0;
  23. }
  24. void TimedTransitions::enter()
  25. {
  26. /* Default enter sequence for statechart TimedTransitions */
  27. enact();
  28. enseq_main_region_default();
  29. }
  30. void TimedTransitions::exit()
  31. {
  32. /* Default exit sequence for statechart TimedTransitions */
  33. exseq_main_region();
  34. exact();
  35. }
  36. sc_boolean TimedTransitions::isActive() const
  37. {
  38. return stateConfVector[0] != TimedTransitions_last_state;
  39. }
  40. /*
  41. * Always returns 'false' since this state machine can never become final.
  42. */
  43. sc_boolean TimedTransitions::isFinal() const
  44. {
  45. return false;}
  46. void TimedTransitions::runCycle()
  47. {
  48. clearOutEvents();
  49. for (stateConfVectorPosition = 0;
  50. stateConfVectorPosition < maxOrthogonalStates;
  51. stateConfVectorPosition++)
  52. {
  53. switch (stateConfVector[stateConfVectorPosition])
  54. {
  55. case main_region_Start :
  56. {
  57. react_main_region_Start();
  58. break;
  59. }
  60. case main_region_End :
  61. {
  62. react_main_region_End();
  63. break;
  64. }
  65. default:
  66. break;
  67. }
  68. }
  69. clearInEvents();
  70. }
  71. void TimedTransitions::clearInEvents()
  72. {
  73. timeEvents[0] = false;
  74. timeEvents[1] = false;
  75. }
  76. void TimedTransitions::clearOutEvents()
  77. {
  78. }
  79. void TimedTransitions::setTimer(TimerInterface* timer)
  80. {
  81. this->timer = timer;
  82. }
  83. TimerInterface* TimedTransitions::getTimer()
  84. {
  85. return timer;
  86. }
  87. void TimedTransitions::raiseTimeEvent(sc_eventid evid)
  88. {
  89. if ((evid >= (sc_eventid)timeEvents) && (evid < (sc_eventid)(&timeEvents[timeEventsCount])))
  90. {
  91. *(sc_boolean*)evid = true;
  92. }
  93. }
  94. sc_boolean TimedTransitions::isStateActive(TimedTransitionsStates state) const
  95. {
  96. switch (state)
  97. {
  98. case main_region_Start :
  99. return (sc_boolean) (stateConfVector[0] == main_region_Start
  100. );
  101. case main_region_End :
  102. return (sc_boolean) (stateConfVector[0] == main_region_End
  103. );
  104. default: return false;
  105. }
  106. }
  107. sc_integer TimedTransitions::InternalSCI::get_x() const
  108. {
  109. return x;
  110. }
  111. void TimedTransitions::InternalSCI::set_x(sc_integer value)
  112. {
  113. x = value;
  114. }
  115. sc_integer TimedTransitions::InternalSCI::get_y() const
  116. {
  117. return y;
  118. }
  119. void TimedTransitions::InternalSCI::set_y(sc_integer value)
  120. {
  121. y = value;
  122. }
  123. // implementations of all internal functions
  124. sc_boolean TimedTransitions::check__lr0()
  125. {
  126. return timeEvents[1];
  127. }
  128. sc_boolean TimedTransitions::check__lr1()
  129. {
  130. return true;
  131. }
  132. sc_boolean TimedTransitions::check_main_region_Start_tr0_tr0()
  133. {
  134. return timeEvents[0];
  135. }
  136. void TimedTransitions::effect__lr0()
  137. {
  138. ifaceInternalSCI.x += 1;
  139. }
  140. void TimedTransitions::effect__lr1()
  141. {
  142. ifaceInternalSCI.y += 1;
  143. }
  144. void TimedTransitions::effect_main_region_Start_tr0()
  145. {
  146. exseq_main_region_Start();
  147. enseq_main_region_End_default();
  148. }
  149. /* Entry action for statechart 'TimedTransitions'. */
  150. void TimedTransitions::enact()
  151. {
  152. /* Entry action for statechart 'TimedTransitions'. */
  153. timer->setTimer(this, (sc_eventid)(&timeEvents[1]), 1 * 1000, true);
  154. }
  155. /* Entry action for state 'Start'. */
  156. void TimedTransitions::enact_main_region_Start()
  157. {
  158. /* Entry action for state 'Start'. */
  159. timer->setTimer(this, (sc_eventid)(&timeEvents[0]), 2 * 1000, false);
  160. }
  161. /* Exit action for state 'TimedTransitions'. */
  162. void TimedTransitions::exact()
  163. {
  164. /* Exit action for state 'TimedTransitions'. */
  165. timer->unsetTimer(this, (sc_eventid)(&timeEvents[1]));
  166. }
  167. /* Exit action for state 'Start'. */
  168. void TimedTransitions::exact_main_region_Start()
  169. {
  170. /* Exit action for state 'Start'. */
  171. timer->unsetTimer(this, (sc_eventid)(&timeEvents[0]));
  172. }
  173. /* 'default' enter sequence for state Start */
  174. void TimedTransitions::enseq_main_region_Start_default()
  175. {
  176. /* 'default' enter sequence for state Start */
  177. enact_main_region_Start();
  178. stateConfVector[0] = main_region_Start;
  179. stateConfVectorPosition = 0;
  180. }
  181. /* 'default' enter sequence for state End */
  182. void TimedTransitions::enseq_main_region_End_default()
  183. {
  184. /* 'default' enter sequence for state End */
  185. stateConfVector[0] = main_region_End;
  186. stateConfVectorPosition = 0;
  187. }
  188. /* 'default' enter sequence for region main region */
  189. void TimedTransitions::enseq_main_region_default()
  190. {
  191. /* 'default' enter sequence for region main region */
  192. react_main_region__entry_Default();
  193. }
  194. /* Default exit sequence for state Start */
  195. void TimedTransitions::exseq_main_region_Start()
  196. {
  197. /* Default exit sequence for state Start */
  198. stateConfVector[0] = TimedTransitions_last_state;
  199. stateConfVectorPosition = 0;
  200. exact_main_region_Start();
  201. }
  202. /* Default exit sequence for state End */
  203. void TimedTransitions::exseq_main_region_End()
  204. {
  205. /* Default exit sequence for state End */
  206. stateConfVector[0] = TimedTransitions_last_state;
  207. stateConfVectorPosition = 0;
  208. }
  209. /* Default exit sequence for region main region */
  210. void TimedTransitions::exseq_main_region()
  211. {
  212. /* Default exit sequence for region main region */
  213. /* Handle exit of all possible states (of TimedTransitions.main_region) at position 0... */
  214. switch(stateConfVector[ 0 ])
  215. {
  216. case main_region_Start :
  217. {
  218. exseq_main_region_Start();
  219. break;
  220. }
  221. case main_region_End :
  222. {
  223. exseq_main_region_End();
  224. break;
  225. }
  226. default: break;
  227. }
  228. }
  229. /* The reactions of state Start. */
  230. void TimedTransitions::react_main_region_Start()
  231. {
  232. /* The reactions of state Start. */
  233. if (check__lr0())
  234. {
  235. effect__lr0();
  236. }
  237. effect__lr1();
  238. if (check_main_region_Start_tr0_tr0())
  239. {
  240. effect_main_region_Start_tr0();
  241. }
  242. }
  243. /* The reactions of state End. */
  244. void TimedTransitions::react_main_region_End()
  245. {
  246. /* The reactions of state End. */
  247. if (check__lr0())
  248. {
  249. effect__lr0();
  250. }
  251. effect__lr1();
  252. }
  253. /* Default react sequence for initial entry */
  254. void TimedTransitions::react_main_region__entry_Default()
  255. {
  256. /* Default react sequence for initial entry */
  257. enseq_main_region_Start_default();
  258. }