NamedInterfaceAccess.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. #include "NamedInterfaceAccess.h"
  2. #include <string.h>
  3. /*! \file Implementation of the state machine 'NamedInterfaceAccess'
  4. */
  5. NamedInterfaceAccess::NamedInterfaceAccess()
  6. {
  7. stateConfVectorPosition = 0;
  8. }
  9. NamedInterfaceAccess::~NamedInterfaceAccess()
  10. {
  11. }
  12. void NamedInterfaceAccess::init()
  13. {
  14. for (int i = 0; i < maxOrthogonalStates; ++i)
  15. stateConfVector[i] = NamedInterfaceAccess_last_state;
  16. stateConfVectorPosition = 0;
  17. clearInEvents();
  18. clearOutEvents();
  19. /* Default init sequence for statechart NamedInterfaceAccess */
  20. ifaceInternalSCI.number1 = 3;
  21. ifaceInternalSCI.number2 = 7;
  22. ifaceInternalSCI.number3 = 5;
  23. }
  24. void NamedInterfaceAccess::enter()
  25. {
  26. /* Default enter sequence for statechart NamedInterfaceAccess */
  27. enseq_region_1_default();
  28. enseq__region1_default();
  29. }
  30. void NamedInterfaceAccess::exit()
  31. {
  32. /* Default exit sequence for statechart NamedInterfaceAccess */
  33. exseq_region_1();
  34. exseq__region1();
  35. }
  36. sc_boolean NamedInterfaceAccess::isActive() const
  37. {
  38. return stateConfVector[0] != NamedInterfaceAccess_last_state||stateConfVector[1] != NamedInterfaceAccess_last_state;
  39. }
  40. /*
  41. * Always returns 'false' since this state machine can never become final.
  42. */
  43. sc_boolean NamedInterfaceAccess::isFinal() const
  44. {
  45. return false;}
  46. void NamedInterfaceAccess::runCycle()
  47. {
  48. clearOutEvents();
  49. for (stateConfVectorPosition = 0;
  50. stateConfVectorPosition < maxOrthogonalStates;
  51. stateConfVectorPosition++)
  52. {
  53. switch (stateConfVector[stateConfVectorPosition])
  54. {
  55. case region_1_Idle :
  56. {
  57. react_region_1_Idle();
  58. break;
  59. }
  60. case region_1_Number1Pressed :
  61. {
  62. react_region_1_Number1Pressed();
  63. break;
  64. }
  65. case region_1_Number2Pressed :
  66. {
  67. react_region_1_Number2Pressed();
  68. break;
  69. }
  70. case region_1_Number3Pressed :
  71. {
  72. react_region_1_Number3Pressed();
  73. break;
  74. }
  75. case _region1_Closed :
  76. {
  77. react__region1_Closed();
  78. break;
  79. }
  80. case _region1_Open :
  81. {
  82. react__region1_Open();
  83. break;
  84. }
  85. default:
  86. break;
  87. }
  88. }
  89. clearInEvents();
  90. }
  91. void NamedInterfaceAccess::clearInEvents()
  92. {
  93. ifaceUser.numberPressed_raised = false;
  94. ifaceUser.reset_raised = false;
  95. }
  96. void NamedInterfaceAccess::clearOutEvents()
  97. {
  98. ifaceSafe.open_raised = false;
  99. ifaceSafe.close_raised = false;
  100. }
  101. sc_boolean NamedInterfaceAccess::isStateActive(NamedInterfaceAccessStates state) const
  102. {
  103. switch (state)
  104. {
  105. case region_1_Idle :
  106. return (sc_boolean) (stateConfVector[0] == region_1_Idle
  107. );
  108. case region_1_Number1Pressed :
  109. return (sc_boolean) (stateConfVector[0] == region_1_Number1Pressed
  110. );
  111. case region_1_Number2Pressed :
  112. return (sc_boolean) (stateConfVector[0] == region_1_Number2Pressed
  113. );
  114. case region_1_Number3Pressed :
  115. return (sc_boolean) (stateConfVector[0] == region_1_Number3Pressed
  116. );
  117. case _region1_Closed :
  118. return (sc_boolean) (stateConfVector[1] == _region1_Closed
  119. );
  120. case _region1_Open :
  121. return (sc_boolean) (stateConfVector[1] == _region1_Open
  122. );
  123. default: return false;
  124. }
  125. }
  126. NamedInterfaceAccess::SCI_Safe* NamedInterfaceAccess::getSCI_Safe()
  127. {
  128. return &ifaceSafe;
  129. }
  130. sc_boolean NamedInterfaceAccess::SCI_Safe::isRaised_open() const
  131. {
  132. return open_raised;
  133. }
  134. sc_boolean NamedInterfaceAccess::SCI_Safe::isRaised_close() const
  135. {
  136. return close_raised;
  137. }
  138. NamedInterfaceAccess::SCI_User* NamedInterfaceAccess::getSCI_User()
  139. {
  140. return &ifaceUser;
  141. }
  142. void NamedInterfaceAccess::SCI_User::raise_numberPressed(sc_integer value)
  143. {
  144. numberPressed_value = value;
  145. numberPressed_raised = true;
  146. }
  147. void NamedInterfaceAccess::SCI_User::raise_reset()
  148. {
  149. reset_raised = true;
  150. }
  151. sc_integer NamedInterfaceAccess::InternalSCI::get_number1() const
  152. {
  153. return number1;
  154. }
  155. void NamedInterfaceAccess::InternalSCI::set_number1(sc_integer value)
  156. {
  157. number1 = value;
  158. }
  159. sc_integer NamedInterfaceAccess::InternalSCI::get_number2() const
  160. {
  161. return number2;
  162. }
  163. void NamedInterfaceAccess::InternalSCI::set_number2(sc_integer value)
  164. {
  165. number2 = value;
  166. }
  167. sc_integer NamedInterfaceAccess::InternalSCI::get_number3() const
  168. {
  169. return number3;
  170. }
  171. void NamedInterfaceAccess::InternalSCI::set_number3(sc_integer value)
  172. {
  173. number3 = value;
  174. }
  175. // implementations of all internal functions
  176. sc_boolean NamedInterfaceAccess::check_region_1_Idle_tr0_tr0()
  177. {
  178. return (ifaceUser.numberPressed_raised) && (ifaceUser.numberPressed_value == ifaceInternalSCI.number1);
  179. }
  180. sc_boolean NamedInterfaceAccess::check_region_1_Number1Pressed_tr0_tr0()
  181. {
  182. return (ifaceUser.numberPressed_raised) && (ifaceUser.numberPressed_value == ifaceInternalSCI.number2);
  183. }
  184. sc_boolean NamedInterfaceAccess::check_region_1_Number1Pressed_tr1_tr1()
  185. {
  186. return ifaceUser.numberPressed_raised;
  187. }
  188. sc_boolean NamedInterfaceAccess::check_region_1_Number2Pressed_tr0_tr0()
  189. {
  190. return (ifaceUser.numberPressed_raised) && (ifaceUser.numberPressed_value == ifaceInternalSCI.number3);
  191. }
  192. sc_boolean NamedInterfaceAccess::check_region_1_Number2Pressed_tr1_tr1()
  193. {
  194. return ifaceUser.numberPressed_raised;
  195. }
  196. sc_boolean NamedInterfaceAccess::check_region_1_Number3Pressed_tr0_tr0()
  197. {
  198. return ifaceUser.numberPressed_raised;
  199. }
  200. sc_boolean NamedInterfaceAccess::check__region1_Closed_tr0_tr0()
  201. {
  202. return ifaceSafe.open_raised;
  203. }
  204. sc_boolean NamedInterfaceAccess::check__region1_Open_tr0_tr0()
  205. {
  206. return ifaceSafe.close_raised;
  207. }
  208. void NamedInterfaceAccess::effect_region_1_Idle_tr0()
  209. {
  210. exseq_region_1_Idle();
  211. enseq_region_1_Number1Pressed_default();
  212. }
  213. void NamedInterfaceAccess::effect_region_1_Number1Pressed_tr0()
  214. {
  215. exseq_region_1_Number1Pressed();
  216. enseq_region_1_Number2Pressed_default();
  217. }
  218. void NamedInterfaceAccess::effect_region_1_Number1Pressed_tr1()
  219. {
  220. exseq_region_1_Number1Pressed();
  221. enseq_region_1_Idle_default();
  222. }
  223. void NamedInterfaceAccess::effect_region_1_Number2Pressed_tr0()
  224. {
  225. exseq_region_1_Number2Pressed();
  226. enseq_region_1_Number3Pressed_default();
  227. }
  228. void NamedInterfaceAccess::effect_region_1_Number2Pressed_tr1()
  229. {
  230. exseq_region_1_Number2Pressed();
  231. enseq_region_1_Idle_default();
  232. }
  233. void NamedInterfaceAccess::effect_region_1_Number3Pressed_tr0()
  234. {
  235. exseq_region_1_Number3Pressed();
  236. enseq_region_1_Idle_default();
  237. }
  238. void NamedInterfaceAccess::effect__region1_Closed_tr0()
  239. {
  240. exseq__region1_Closed();
  241. enseq__region1_Open_default();
  242. }
  243. void NamedInterfaceAccess::effect__region1_Open_tr0()
  244. {
  245. exseq__region1_Open();
  246. enseq__region1_Closed_default();
  247. }
  248. /* Entry action for state 'Idle'. */
  249. void NamedInterfaceAccess::enact_region_1_Idle()
  250. {
  251. /* Entry action for state 'Idle'. */
  252. ifaceSafe.close_raised = true;
  253. }
  254. /* Entry action for state 'Number3Pressed'. */
  255. void NamedInterfaceAccess::enact_region_1_Number3Pressed()
  256. {
  257. /* Entry action for state 'Number3Pressed'. */
  258. ifaceSafe.open_raised = true;
  259. }
  260. /* 'default' enter sequence for state Idle */
  261. void NamedInterfaceAccess::enseq_region_1_Idle_default()
  262. {
  263. /* 'default' enter sequence for state Idle */
  264. enact_region_1_Idle();
  265. stateConfVector[0] = region_1_Idle;
  266. stateConfVectorPosition = 0;
  267. }
  268. /* 'default' enter sequence for state Number1Pressed */
  269. void NamedInterfaceAccess::enseq_region_1_Number1Pressed_default()
  270. {
  271. /* 'default' enter sequence for state Number1Pressed */
  272. stateConfVector[0] = region_1_Number1Pressed;
  273. stateConfVectorPosition = 0;
  274. }
  275. /* 'default' enter sequence for state Number2Pressed */
  276. void NamedInterfaceAccess::enseq_region_1_Number2Pressed_default()
  277. {
  278. /* 'default' enter sequence for state Number2Pressed */
  279. stateConfVector[0] = region_1_Number2Pressed;
  280. stateConfVectorPosition = 0;
  281. }
  282. /* 'default' enter sequence for state Number3Pressed */
  283. void NamedInterfaceAccess::enseq_region_1_Number3Pressed_default()
  284. {
  285. /* 'default' enter sequence for state Number3Pressed */
  286. enact_region_1_Number3Pressed();
  287. stateConfVector[0] = region_1_Number3Pressed;
  288. stateConfVectorPosition = 0;
  289. }
  290. /* 'default' enter sequence for state Closed */
  291. void NamedInterfaceAccess::enseq__region1_Closed_default()
  292. {
  293. /* 'default' enter sequence for state Closed */
  294. stateConfVector[1] = _region1_Closed;
  295. stateConfVectorPosition = 1;
  296. }
  297. /* 'default' enter sequence for state Open */
  298. void NamedInterfaceAccess::enseq__region1_Open_default()
  299. {
  300. /* 'default' enter sequence for state Open */
  301. stateConfVector[1] = _region1_Open;
  302. stateConfVectorPosition = 1;
  303. }
  304. /* 'default' enter sequence for region region 1 */
  305. void NamedInterfaceAccess::enseq_region_1_default()
  306. {
  307. /* 'default' enter sequence for region region 1 */
  308. react_region_1__entry_Default();
  309. }
  310. /* 'default' enter sequence for region null */
  311. void NamedInterfaceAccess::enseq__region1_default()
  312. {
  313. /* 'default' enter sequence for region null */
  314. react__region1__entry_Default();
  315. }
  316. /* Default exit sequence for state Idle */
  317. void NamedInterfaceAccess::exseq_region_1_Idle()
  318. {
  319. /* Default exit sequence for state Idle */
  320. stateConfVector[0] = NamedInterfaceAccess_last_state;
  321. stateConfVectorPosition = 0;
  322. }
  323. /* Default exit sequence for state Number1Pressed */
  324. void NamedInterfaceAccess::exseq_region_1_Number1Pressed()
  325. {
  326. /* Default exit sequence for state Number1Pressed */
  327. stateConfVector[0] = NamedInterfaceAccess_last_state;
  328. stateConfVectorPosition = 0;
  329. }
  330. /* Default exit sequence for state Number2Pressed */
  331. void NamedInterfaceAccess::exseq_region_1_Number2Pressed()
  332. {
  333. /* Default exit sequence for state Number2Pressed */
  334. stateConfVector[0] = NamedInterfaceAccess_last_state;
  335. stateConfVectorPosition = 0;
  336. }
  337. /* Default exit sequence for state Number3Pressed */
  338. void NamedInterfaceAccess::exseq_region_1_Number3Pressed()
  339. {
  340. /* Default exit sequence for state Number3Pressed */
  341. stateConfVector[0] = NamedInterfaceAccess_last_state;
  342. stateConfVectorPosition = 0;
  343. }
  344. /* Default exit sequence for state Closed */
  345. void NamedInterfaceAccess::exseq__region1_Closed()
  346. {
  347. /* Default exit sequence for state Closed */
  348. stateConfVector[1] = NamedInterfaceAccess_last_state;
  349. stateConfVectorPosition = 1;
  350. }
  351. /* Default exit sequence for state Open */
  352. void NamedInterfaceAccess::exseq__region1_Open()
  353. {
  354. /* Default exit sequence for state Open */
  355. stateConfVector[1] = NamedInterfaceAccess_last_state;
  356. stateConfVectorPosition = 1;
  357. }
  358. /* Default exit sequence for region region 1 */
  359. void NamedInterfaceAccess::exseq_region_1()
  360. {
  361. /* Default exit sequence for region region 1 */
  362. /* Handle exit of all possible states (of NamedInterfaceAccess.region_1) at position 0... */
  363. switch(stateConfVector[ 0 ])
  364. {
  365. case region_1_Idle :
  366. {
  367. exseq_region_1_Idle();
  368. break;
  369. }
  370. case region_1_Number1Pressed :
  371. {
  372. exseq_region_1_Number1Pressed();
  373. break;
  374. }
  375. case region_1_Number2Pressed :
  376. {
  377. exseq_region_1_Number2Pressed();
  378. break;
  379. }
  380. case region_1_Number3Pressed :
  381. {
  382. exseq_region_1_Number3Pressed();
  383. break;
  384. }
  385. default: break;
  386. }
  387. }
  388. /* Default exit sequence for region null */
  389. void NamedInterfaceAccess::exseq__region1()
  390. {
  391. /* Default exit sequence for region null */
  392. /* Handle exit of all possible states (of NamedInterfaceAccess._region1) at position 1... */
  393. switch(stateConfVector[ 1 ])
  394. {
  395. case _region1_Closed :
  396. {
  397. exseq__region1_Closed();
  398. break;
  399. }
  400. case _region1_Open :
  401. {
  402. exseq__region1_Open();
  403. break;
  404. }
  405. default: break;
  406. }
  407. }
  408. /* The reactions of state Idle. */
  409. void NamedInterfaceAccess::react_region_1_Idle()
  410. {
  411. /* The reactions of state Idle. */
  412. if (check_region_1_Idle_tr0_tr0())
  413. {
  414. effect_region_1_Idle_tr0();
  415. }
  416. }
  417. /* The reactions of state Number1Pressed. */
  418. void NamedInterfaceAccess::react_region_1_Number1Pressed()
  419. {
  420. /* The reactions of state Number1Pressed. */
  421. if (check_region_1_Number1Pressed_tr0_tr0())
  422. {
  423. effect_region_1_Number1Pressed_tr0();
  424. } else
  425. {
  426. if (check_region_1_Number1Pressed_tr1_tr1())
  427. {
  428. effect_region_1_Number1Pressed_tr1();
  429. }
  430. }
  431. }
  432. /* The reactions of state Number2Pressed. */
  433. void NamedInterfaceAccess::react_region_1_Number2Pressed()
  434. {
  435. /* The reactions of state Number2Pressed. */
  436. if (check_region_1_Number2Pressed_tr0_tr0())
  437. {
  438. effect_region_1_Number2Pressed_tr0();
  439. } else
  440. {
  441. if (check_region_1_Number2Pressed_tr1_tr1())
  442. {
  443. effect_region_1_Number2Pressed_tr1();
  444. }
  445. }
  446. }
  447. /* The reactions of state Number3Pressed. */
  448. void NamedInterfaceAccess::react_region_1_Number3Pressed()
  449. {
  450. /* The reactions of state Number3Pressed. */
  451. if (check_region_1_Number3Pressed_tr0_tr0())
  452. {
  453. effect_region_1_Number3Pressed_tr0();
  454. }
  455. }
  456. /* The reactions of state Closed. */
  457. void NamedInterfaceAccess::react__region1_Closed()
  458. {
  459. /* The reactions of state Closed. */
  460. if (check__region1_Closed_tr0_tr0())
  461. {
  462. effect__region1_Closed_tr0();
  463. }
  464. }
  465. /* The reactions of state Open. */
  466. void NamedInterfaceAccess::react__region1_Open()
  467. {
  468. /* The reactions of state Open. */
  469. if (check__region1_Open_tr0_tr0())
  470. {
  471. effect__region1_Open_tr0();
  472. }
  473. }
  474. /* Default react sequence for initial entry */
  475. void NamedInterfaceAccess::react_region_1__entry_Default()
  476. {
  477. /* Default react sequence for initial entry */
  478. enseq_region_1_Idle_default();
  479. }
  480. /* Default react sequence for initial entry */
  481. void NamedInterfaceAccess::react__region1__entry_Default()
  482. {
  483. /* Default react sequence for initial entry */
  484. enseq__region1_Closed_default();
  485. }