OutEventLifeCycle.cpp 6.9 KB

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