PriorityValues.cpp 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. #include "PriorityValues.h"
  2. #include <string.h>
  3. /*! \file Implementation of the state machine 'PriorityValues'
  4. */
  5. PriorityValues::PriorityValues()
  6. {
  7. stateConfVectorPosition = 0;
  8. }
  9. PriorityValues::~PriorityValues()
  10. {
  11. }
  12. void PriorityValues::init()
  13. {
  14. for (int i = 0; i < maxOrthogonalStates; ++i)
  15. stateConfVector[i] = PriorityValues_last_state;
  16. stateConfVectorPosition = 0;
  17. clearInEvents();
  18. clearOutEvents();
  19. }
  20. void PriorityValues::enter()
  21. {
  22. /* Default enter sequence for statechart PriorityValues */
  23. enseq_someRegion_default();
  24. enseq_main_region_default();
  25. }
  26. void PriorityValues::exit()
  27. {
  28. /* Default exit sequence for statechart PriorityValues */
  29. exseq_someRegion();
  30. exseq_main_region();
  31. }
  32. sc_boolean PriorityValues::isActive() const
  33. {
  34. return stateConfVector[0] != PriorityValues_last_state||stateConfVector[1] != PriorityValues_last_state;
  35. }
  36. /*
  37. * Always returns 'false' since this state machine can never become final.
  38. */
  39. sc_boolean PriorityValues::isFinal() const
  40. {
  41. return false;}
  42. void PriorityValues::runCycle()
  43. {
  44. clearOutEvents();
  45. for (stateConfVectorPosition = 0;
  46. stateConfVectorPosition < maxOrthogonalStates;
  47. stateConfVectorPosition++)
  48. {
  49. switch (stateConfVector[stateConfVectorPosition])
  50. {
  51. case someRegion_A :
  52. {
  53. react_someRegion_A();
  54. break;
  55. }
  56. case someRegion_B :
  57. {
  58. react_someRegion_B();
  59. break;
  60. }
  61. case main_region_A :
  62. {
  63. react_main_region_A();
  64. break;
  65. }
  66. case main_region_B :
  67. {
  68. react_main_region_B();
  69. break;
  70. }
  71. case main_region_C :
  72. {
  73. react_main_region_C();
  74. break;
  75. }
  76. case main_region_D :
  77. {
  78. react_main_region_D();
  79. break;
  80. }
  81. case main_region_E :
  82. {
  83. react_main_region_E();
  84. break;
  85. }
  86. default:
  87. break;
  88. }
  89. }
  90. clearInEvents();
  91. }
  92. void PriorityValues::clearInEvents()
  93. {
  94. iface.event1_raised = false;
  95. iface.event2_raised = false;
  96. }
  97. void PriorityValues::clearOutEvents()
  98. {
  99. }
  100. sc_boolean PriorityValues::isStateActive(PriorityValuesStates state) const
  101. {
  102. switch (state)
  103. {
  104. case someRegion_A :
  105. return (sc_boolean) (stateConfVector[0] == someRegion_A
  106. );
  107. case someRegion_B :
  108. return (sc_boolean) (stateConfVector[0] == someRegion_B
  109. );
  110. case main_region_A :
  111. return (sc_boolean) (stateConfVector[1] == main_region_A
  112. );
  113. case main_region_B :
  114. return (sc_boolean) (stateConfVector[1] == main_region_B
  115. );
  116. case main_region_C :
  117. return (sc_boolean) (stateConfVector[1] == main_region_C
  118. );
  119. case main_region_D :
  120. return (sc_boolean) (stateConfVector[1] == main_region_D
  121. );
  122. case main_region_E :
  123. return (sc_boolean) (stateConfVector[1] == main_region_E
  124. );
  125. default: return false;
  126. }
  127. }
  128. PriorityValues::DefaultSCI* PriorityValues::getDefaultSCI()
  129. {
  130. return &iface;
  131. }
  132. void PriorityValues::DefaultSCI::raise_event1()
  133. {
  134. event1_raised = true;
  135. }
  136. void PriorityValues::raise_event1()
  137. {
  138. iface.raise_event1();
  139. }
  140. void PriorityValues::DefaultSCI::raise_event2()
  141. {
  142. event2_raised = true;
  143. }
  144. void PriorityValues::raise_event2()
  145. {
  146. iface.raise_event2();
  147. }
  148. // implementations of all internal functions
  149. sc_boolean PriorityValues::check_someRegion_A_tr0_tr0()
  150. {
  151. return iface.event2_raised;
  152. }
  153. sc_boolean PriorityValues::check_main_region_A_tr0_tr0()
  154. {
  155. return iface.event1_raised;
  156. }
  157. sc_boolean PriorityValues::check_main_region_A_tr1_tr1()
  158. {
  159. return iface.event1_raised;
  160. }
  161. sc_boolean PriorityValues::check_main_region_A_tr2_tr2()
  162. {
  163. return iface.event1_raised;
  164. }
  165. sc_boolean PriorityValues::check_main_region_A_tr3_tr3()
  166. {
  167. return (iface.event2_raised) && (!isStateActive(someRegion_B));
  168. }
  169. void PriorityValues::effect_someRegion_A_tr0()
  170. {
  171. exseq_someRegion_A();
  172. enseq_someRegion_B_default();
  173. }
  174. void PriorityValues::effect_main_region_A_tr0()
  175. {
  176. exseq_main_region_A();
  177. enseq_main_region_C_default();
  178. }
  179. void PriorityValues::effect_main_region_A_tr1()
  180. {
  181. exseq_main_region_A();
  182. enseq_main_region_B_default();
  183. }
  184. void PriorityValues::effect_main_region_A_tr2()
  185. {
  186. exseq_main_region_A();
  187. enseq_main_region_D_default();
  188. }
  189. void PriorityValues::effect_main_region_A_tr3()
  190. {
  191. exseq_main_region_A();
  192. enseq_main_region_E_default();
  193. }
  194. /* 'default' enter sequence for state A */
  195. void PriorityValues::enseq_someRegion_A_default()
  196. {
  197. /* 'default' enter sequence for state A */
  198. stateConfVector[0] = someRegion_A;
  199. stateConfVectorPosition = 0;
  200. }
  201. /* 'default' enter sequence for state B */
  202. void PriorityValues::enseq_someRegion_B_default()
  203. {
  204. /* 'default' enter sequence for state B */
  205. stateConfVector[0] = someRegion_B;
  206. stateConfVectorPosition = 0;
  207. }
  208. /* 'default' enter sequence for state A */
  209. void PriorityValues::enseq_main_region_A_default()
  210. {
  211. /* 'default' enter sequence for state A */
  212. stateConfVector[1] = main_region_A;
  213. stateConfVectorPosition = 1;
  214. }
  215. /* 'default' enter sequence for state B */
  216. void PriorityValues::enseq_main_region_B_default()
  217. {
  218. /* 'default' enter sequence for state B */
  219. stateConfVector[1] = main_region_B;
  220. stateConfVectorPosition = 1;
  221. }
  222. /* 'default' enter sequence for state C */
  223. void PriorityValues::enseq_main_region_C_default()
  224. {
  225. /* 'default' enter sequence for state C */
  226. stateConfVector[1] = main_region_C;
  227. stateConfVectorPosition = 1;
  228. }
  229. /* 'default' enter sequence for state D */
  230. void PriorityValues::enseq_main_region_D_default()
  231. {
  232. /* 'default' enter sequence for state D */
  233. stateConfVector[1] = main_region_D;
  234. stateConfVectorPosition = 1;
  235. }
  236. /* 'default' enter sequence for state E */
  237. void PriorityValues::enseq_main_region_E_default()
  238. {
  239. /* 'default' enter sequence for state E */
  240. stateConfVector[1] = main_region_E;
  241. stateConfVectorPosition = 1;
  242. }
  243. /* 'default' enter sequence for region someRegion */
  244. void PriorityValues::enseq_someRegion_default()
  245. {
  246. /* 'default' enter sequence for region someRegion */
  247. react_someRegion__entry_Default();
  248. }
  249. /* 'default' enter sequence for region main region */
  250. void PriorityValues::enseq_main_region_default()
  251. {
  252. /* 'default' enter sequence for region main region */
  253. react_main_region__entry_Default();
  254. }
  255. /* Default exit sequence for state A */
  256. void PriorityValues::exseq_someRegion_A()
  257. {
  258. /* Default exit sequence for state A */
  259. stateConfVector[0] = PriorityValues_last_state;
  260. stateConfVectorPosition = 0;
  261. }
  262. /* Default exit sequence for state B */
  263. void PriorityValues::exseq_someRegion_B()
  264. {
  265. /* Default exit sequence for state B */
  266. stateConfVector[0] = PriorityValues_last_state;
  267. stateConfVectorPosition = 0;
  268. }
  269. /* Default exit sequence for state A */
  270. void PriorityValues::exseq_main_region_A()
  271. {
  272. /* Default exit sequence for state A */
  273. stateConfVector[1] = PriorityValues_last_state;
  274. stateConfVectorPosition = 1;
  275. }
  276. /* Default exit sequence for state B */
  277. void PriorityValues::exseq_main_region_B()
  278. {
  279. /* Default exit sequence for state B */
  280. stateConfVector[1] = PriorityValues_last_state;
  281. stateConfVectorPosition = 1;
  282. }
  283. /* Default exit sequence for state C */
  284. void PriorityValues::exseq_main_region_C()
  285. {
  286. /* Default exit sequence for state C */
  287. stateConfVector[1] = PriorityValues_last_state;
  288. stateConfVectorPosition = 1;
  289. }
  290. /* Default exit sequence for state D */
  291. void PriorityValues::exseq_main_region_D()
  292. {
  293. /* Default exit sequence for state D */
  294. stateConfVector[1] = PriorityValues_last_state;
  295. stateConfVectorPosition = 1;
  296. }
  297. /* Default exit sequence for state E */
  298. void PriorityValues::exseq_main_region_E()
  299. {
  300. /* Default exit sequence for state E */
  301. stateConfVector[1] = PriorityValues_last_state;
  302. stateConfVectorPosition = 1;
  303. }
  304. /* Default exit sequence for region someRegion */
  305. void PriorityValues::exseq_someRegion()
  306. {
  307. /* Default exit sequence for region someRegion */
  308. /* Handle exit of all possible states (of PriorityValues.someRegion) at position 0... */
  309. switch(stateConfVector[ 0 ])
  310. {
  311. case someRegion_A :
  312. {
  313. exseq_someRegion_A();
  314. break;
  315. }
  316. case someRegion_B :
  317. {
  318. exseq_someRegion_B();
  319. break;
  320. }
  321. default: break;
  322. }
  323. }
  324. /* Default exit sequence for region main region */
  325. void PriorityValues::exseq_main_region()
  326. {
  327. /* Default exit sequence for region main region */
  328. /* Handle exit of all possible states (of PriorityValues.main_region) at position 1... */
  329. switch(stateConfVector[ 1 ])
  330. {
  331. case main_region_A :
  332. {
  333. exseq_main_region_A();
  334. break;
  335. }
  336. case main_region_B :
  337. {
  338. exseq_main_region_B();
  339. break;
  340. }
  341. case main_region_C :
  342. {
  343. exseq_main_region_C();
  344. break;
  345. }
  346. case main_region_D :
  347. {
  348. exseq_main_region_D();
  349. break;
  350. }
  351. case main_region_E :
  352. {
  353. exseq_main_region_E();
  354. break;
  355. }
  356. default: break;
  357. }
  358. }
  359. /* The reactions of state A. */
  360. void PriorityValues::react_someRegion_A()
  361. {
  362. /* The reactions of state A. */
  363. if (check_someRegion_A_tr0_tr0())
  364. {
  365. effect_someRegion_A_tr0();
  366. }
  367. }
  368. /* The reactions of state B. */
  369. void PriorityValues::react_someRegion_B()
  370. {
  371. /* The reactions of state B. */
  372. }
  373. /* The reactions of state A. */
  374. void PriorityValues::react_main_region_A()
  375. {
  376. /* The reactions of state A. */
  377. if (check_main_region_A_tr0_tr0())
  378. {
  379. effect_main_region_A_tr0();
  380. } else
  381. {
  382. if (check_main_region_A_tr1_tr1())
  383. {
  384. effect_main_region_A_tr1();
  385. } else
  386. {
  387. if (check_main_region_A_tr2_tr2())
  388. {
  389. effect_main_region_A_tr2();
  390. } else
  391. {
  392. if (check_main_region_A_tr3_tr3())
  393. {
  394. effect_main_region_A_tr3();
  395. }
  396. }
  397. }
  398. }
  399. }
  400. /* The reactions of state B. */
  401. void PriorityValues::react_main_region_B()
  402. {
  403. }
  404. /* The reactions of state C. */
  405. void PriorityValues::react_main_region_C()
  406. {
  407. }
  408. /* The reactions of state D. */
  409. void PriorityValues::react_main_region_D()
  410. {
  411. }
  412. /* The reactions of state E. */
  413. void PriorityValues::react_main_region_E()
  414. {
  415. }
  416. /* Default react sequence for initial entry */
  417. void PriorityValues::react_someRegion__entry_Default()
  418. {
  419. /* Default react sequence for initial entry */
  420. enseq_someRegion_A_default();
  421. }
  422. /* Default react sequence for initial entry */
  423. void PriorityValues::react_main_region__entry_Default()
  424. {
  425. /* Default react sequence for initial entry */
  426. enseq_main_region_A_default();
  427. }