TrafficLightCtrlStatemachine.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251
  1. package traffic.light.trafficlightctrl;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. import traffic.light.ITimer;
  5. public class TrafficLightCtrlStatemachine implements ITrafficLightCtrlStatemachine {
  6. protected class SCInterfaceImpl implements SCInterface {
  7. private boolean police_interrupt;
  8. public void raisePolice_interrupt() {
  9. police_interrupt = true;
  10. }
  11. private boolean toggle;
  12. public void raiseToggle() {
  13. toggle = true;
  14. }
  15. protected void clearEvents() {
  16. police_interrupt = false;
  17. toggle = false;
  18. }
  19. }
  20. protected SCInterfaceImpl sCInterface;
  21. protected class SCITrafficLightImpl implements SCITrafficLight {
  22. private List<SCITrafficLightListener> listeners = new LinkedList<SCITrafficLightListener>();
  23. public List<SCITrafficLightListener> getListeners() {
  24. return listeners;
  25. }
  26. private boolean displayRed;
  27. public boolean isRaisedDisplayRed() {
  28. return displayRed;
  29. }
  30. protected void raiseDisplayRed() {
  31. displayRed = true;
  32. for (SCITrafficLightListener listener : listeners) {
  33. listener.onDisplayRedRaised();
  34. }
  35. }
  36. private boolean displayGreen;
  37. public boolean isRaisedDisplayGreen() {
  38. return displayGreen;
  39. }
  40. protected void raiseDisplayGreen() {
  41. displayGreen = true;
  42. for (SCITrafficLightListener listener : listeners) {
  43. listener.onDisplayGreenRaised();
  44. }
  45. }
  46. private boolean displayYellow;
  47. public boolean isRaisedDisplayYellow() {
  48. return displayYellow;
  49. }
  50. protected void raiseDisplayYellow() {
  51. displayYellow = true;
  52. for (SCITrafficLightListener listener : listeners) {
  53. listener.onDisplayYellowRaised();
  54. }
  55. }
  56. private boolean displayNone;
  57. public boolean isRaisedDisplayNone() {
  58. return displayNone;
  59. }
  60. protected void raiseDisplayNone() {
  61. displayNone = true;
  62. for (SCITrafficLightListener listener : listeners) {
  63. listener.onDisplayNoneRaised();
  64. }
  65. }
  66. protected void clearEvents() {
  67. }
  68. protected void clearOutEvents() {
  69. displayRed = false;
  70. displayGreen = false;
  71. displayYellow = false;
  72. displayNone = false;
  73. }
  74. }
  75. protected SCITrafficLightImpl sCITrafficLight;
  76. protected class SCITimerImpl implements SCITimer {
  77. private List<SCITimerListener> listeners = new LinkedList<SCITimerListener>();
  78. public List<SCITimerListener> getListeners() {
  79. return listeners;
  80. }
  81. private boolean updateTimerColour;
  82. private String updateTimerColourValue;
  83. public boolean isRaisedUpdateTimerColour() {
  84. return updateTimerColour;
  85. }
  86. protected void raiseUpdateTimerColour(String value) {
  87. updateTimerColour = true;
  88. updateTimerColourValue = value;
  89. for (SCITimerListener listener : listeners) {
  90. listener.onUpdateTimerColourRaised(value);
  91. }
  92. }
  93. public String getUpdateTimerColourValue() {
  94. if (! updateTimerColour )
  95. throw new IllegalStateException("Illegal event value access. Event UpdateTimerColour is not raised!");
  96. return updateTimerColourValue;
  97. }
  98. private boolean updateTimerValue;
  99. private long updateTimerValueValue;
  100. public boolean isRaisedUpdateTimerValue() {
  101. return updateTimerValue;
  102. }
  103. protected void raiseUpdateTimerValue(long value) {
  104. updateTimerValue = true;
  105. updateTimerValueValue = value;
  106. for (SCITimerListener listener : listeners) {
  107. listener.onUpdateTimerValueRaised(value);
  108. }
  109. }
  110. public long getUpdateTimerValueValue() {
  111. if (! updateTimerValue )
  112. throw new IllegalStateException("Illegal event value access. Event UpdateTimerValue is not raised!");
  113. return updateTimerValueValue;
  114. }
  115. protected void clearEvents() {
  116. }
  117. protected void clearOutEvents() {
  118. updateTimerColour = false;
  119. updateTimerValue = false;
  120. }
  121. }
  122. protected SCITimerImpl sCITimer;
  123. private boolean initialized = false;
  124. public enum State {
  125. main_main,
  126. main_main_trafficlight_interrupted,
  127. main_main_trafficlight_interrupted_blinking_Black,
  128. main_main_trafficlight_interrupted_blinking_Yellow,
  129. main_main_trafficlight_normal,
  130. main_main_trafficlight_normal_normal_Red,
  131. main_main_trafficlight_normal_normal_Yellow,
  132. main_main_trafficlight_normal_normal_Green,
  133. main_main_timer_Disabled,
  134. main_main_timer_running,
  135. main_main_timer_running_running_DecidingColor,
  136. main_main_timer_running_running_Green,
  137. main_main_timer_running_running_Red,
  138. main_off,
  139. $NullState$
  140. };
  141. private State[] historyVector = new State[1];
  142. private final State[] stateVector = new State[2];
  143. private int nextStateIndex;
  144. private ITimer timer;
  145. private final boolean[] timeEvents = new boolean[7];
  146. private boolean resetTimer;
  147. private boolean disableTimer;
  148. private boolean enableTimer;
  149. private long counter;
  150. protected void setCounter(long value) {
  151. counter = value;
  152. }
  153. protected long getCounter() {
  154. return counter;
  155. }
  156. public TrafficLightCtrlStatemachine() {
  157. sCInterface = new SCInterfaceImpl();
  158. sCITrafficLight = new SCITrafficLightImpl();
  159. sCITimer = new SCITimerImpl();
  160. }
  161. public void init() {
  162. this.initialized = true;
  163. if (timer == null) {
  164. throw new IllegalStateException("timer not set.");
  165. }
  166. for (int i = 0; i < 2; i++) {
  167. stateVector[i] = State.$NullState$;
  168. }
  169. for (int i = 0; i < 1; i++) {
  170. historyVector[i] = State.$NullState$;
  171. }
  172. clearEvents();
  173. clearOutEvents();
  174. setCounter(0);
  175. }
  176. public void enter() {
  177. if (!initialized) {
  178. throw new IllegalStateException(
  179. "The state machine needs to be initialized first by calling the init() function.");
  180. }
  181. if (timer == null) {
  182. throw new IllegalStateException("timer not set.");
  183. }
  184. enterSequence_main_default();
  185. }
  186. public void exit() {
  187. exitSequence_main();
  188. }
  189. /**
  190. * @see IStatemachine#isActive()
  191. */
  192. public boolean isActive() {
  193. return stateVector[0] != State.$NullState$||stateVector[1] != State.$NullState$;
  194. }
  195. /**
  196. * Always returns 'false' since this state machine can never become final.
  197. *
  198. * @see IStatemachine#isFinal()
  199. */
  200. public boolean isFinal() {
  201. return false;
  202. }
  203. /**
  204. * This method resets the incoming events (time events included).
  205. */
  206. protected void clearEvents() {
  207. sCInterface.clearEvents();
  208. sCITrafficLight.clearEvents();
  209. sCITimer.clearEvents();
  210. resetTimer = false;
  211. disableTimer = false;
  212. enableTimer = false;
  213. for (int i=0; i<timeEvents.length; i++) {
  214. timeEvents[i] = false;
  215. }
  216. }
  217. /**
  218. * This method resets the outgoing events.
  219. */
  220. protected void clearOutEvents() {
  221. sCITrafficLight.clearOutEvents();
  222. sCITimer.clearOutEvents();
  223. }
  224. /**
  225. * Returns true if the given state is currently active otherwise false.
  226. */
  227. public boolean isStateActive(State state) {
  228. switch (state) {
  229. case main_main:
  230. return stateVector[0].ordinal() >= State.
  231. main_main.ordinal()&& stateVector[0].ordinal() <= State.main_main_timer_running_running_Red.ordinal();
  232. case main_main_trafficlight_interrupted:
  233. return stateVector[0].ordinal() >= State.
  234. main_main_trafficlight_interrupted.ordinal()&& stateVector[0].ordinal() <= State.main_main_trafficlight_interrupted_blinking_Yellow.ordinal();
  235. case main_main_trafficlight_interrupted_blinking_Black:
  236. return stateVector[0] == State.main_main_trafficlight_interrupted_blinking_Black;
  237. case main_main_trafficlight_interrupted_blinking_Yellow:
  238. return stateVector[0] == State.main_main_trafficlight_interrupted_blinking_Yellow;
  239. case main_main_trafficlight_normal:
  240. return stateVector[0].ordinal() >= State.
  241. main_main_trafficlight_normal.ordinal()&& stateVector[0].ordinal() <= State.main_main_trafficlight_normal_normal_Green.ordinal();
  242. case main_main_trafficlight_normal_normal_Red:
  243. return stateVector[0] == State.main_main_trafficlight_normal_normal_Red;
  244. case main_main_trafficlight_normal_normal_Yellow:
  245. return stateVector[0] == State.main_main_trafficlight_normal_normal_Yellow;
  246. case main_main_trafficlight_normal_normal_Green:
  247. return stateVector[0] == State.main_main_trafficlight_normal_normal_Green;
  248. case main_main_timer_Disabled:
  249. return stateVector[1] == State.main_main_timer_Disabled;
  250. case main_main_timer_running:
  251. return stateVector[1].ordinal() >= State.
  252. main_main_timer_running.ordinal()&& stateVector[1].ordinal() <= State.main_main_timer_running_running_Red.ordinal();
  253. case main_main_timer_running_running_DecidingColor:
  254. return stateVector[1] == State.main_main_timer_running_running_DecidingColor;
  255. case main_main_timer_running_running_Green:
  256. return stateVector[1] == State.main_main_timer_running_running_Green;
  257. case main_main_timer_running_running_Red:
  258. return stateVector[1] == State.main_main_timer_running_running_Red;
  259. case main_off:
  260. return stateVector[0] == State.main_off;
  261. default:
  262. return false;
  263. }
  264. }
  265. /**
  266. * Set the {@link ITimer} for the state machine. It must be set
  267. * externally on a timed state machine before a run cycle can be correct
  268. * executed.
  269. *
  270. * @param timer
  271. */
  272. public void setTimer(ITimer timer) {
  273. this.timer = timer;
  274. }
  275. /**
  276. * Returns the currently used timer.
  277. *
  278. * @return {@link ITimer}
  279. */
  280. public ITimer getTimer() {
  281. return timer;
  282. }
  283. public void timeElapsed(int eventID) {
  284. timeEvents[eventID] = true;
  285. }
  286. public SCInterface getSCInterface() {
  287. return sCInterface;
  288. }
  289. public SCITrafficLight getSCITrafficLight() {
  290. return sCITrafficLight;
  291. }
  292. public SCITimer getSCITimer() {
  293. return sCITimer;
  294. }
  295. private void raiseResetTimer() {
  296. resetTimer = true;
  297. }
  298. private void raiseDisableTimer() {
  299. disableTimer = true;
  300. }
  301. private void raiseEnableTimer() {
  302. enableTimer = true;
  303. }
  304. public void raisePolice_interrupt() {
  305. sCInterface.raisePolice_interrupt();
  306. }
  307. public void raiseToggle() {
  308. sCInterface.raiseToggle();
  309. }
  310. private boolean check_main_main_tr0_tr0() {
  311. return sCInterface.toggle;
  312. }
  313. private boolean check_main_main_trafficlight_interrupted_tr0_tr0() {
  314. return sCInterface.police_interrupt;
  315. }
  316. private boolean check_main_main_trafficlight_interrupted_blinking_Black_tr0_tr0() {
  317. return timeEvents[0];
  318. }
  319. private boolean check_main_main_trafficlight_interrupted_blinking_Yellow_tr0_tr0() {
  320. return timeEvents[1];
  321. }
  322. private boolean check_main_main_trafficlight_normal_tr0_tr0() {
  323. return sCInterface.police_interrupt;
  324. }
  325. private boolean check_main_main_trafficlight_normal_normal_Red_tr0_tr0() {
  326. return timeEvents[2];
  327. }
  328. private boolean check_main_main_trafficlight_normal_normal_Yellow_tr0_tr0() {
  329. return timeEvents[3];
  330. }
  331. private boolean check_main_main_trafficlight_normal_normal_Green_tr0_tr0() {
  332. return timeEvents[4];
  333. }
  334. private boolean check_main_main_timer_Disabled_tr0_tr0() {
  335. return enableTimer;
  336. }
  337. private boolean check_main_main_timer_running_tr0_tr0() {
  338. return disableTimer;
  339. }
  340. private boolean check_main_main_timer_running_tr1_tr1() {
  341. return resetTimer;
  342. }
  343. private boolean check_main_main_timer_running_running_DecidingColor_tr0_tr0() {
  344. return isStateActive(State.main_main_trafficlight_normal_normal_Green);
  345. }
  346. private boolean check_main_main_timer_running_running_DecidingColor_tr1_tr1() {
  347. return isStateActive(State.main_main_trafficlight_normal_normal_Red);
  348. }
  349. private boolean check_main_main_timer_running_running_Green_tr0_tr0() {
  350. return timeEvents[5];
  351. }
  352. private boolean check_main_main_timer_running_running_Red_tr0_tr0() {
  353. return timeEvents[6];
  354. }
  355. private boolean check_main_off_tr0_tr0() {
  356. return sCInterface.toggle;
  357. }
  358. private void effect_main_main_tr0() {
  359. exitSequence_main_main();
  360. enterSequence_main_off_default();
  361. }
  362. private void effect_main_main_trafficlight_interrupted_tr0() {
  363. exitSequence_main_main_trafficlight_interrupted();
  364. raiseEnableTimer();
  365. react_main_main_trafficlight_normal_normal_hist();
  366. }
  367. private void effect_main_main_trafficlight_interrupted_blinking_Black_tr0() {
  368. exitSequence_main_main_trafficlight_interrupted_blinking_Black();
  369. enterSequence_main_main_trafficlight_interrupted_blinking_Yellow_default();
  370. }
  371. private void effect_main_main_trafficlight_interrupted_blinking_Yellow_tr0() {
  372. exitSequence_main_main_trafficlight_interrupted_blinking_Yellow();
  373. enterSequence_main_main_trafficlight_interrupted_blinking_Black_default();
  374. }
  375. private void effect_main_main_trafficlight_normal_tr0() {
  376. exitSequence_main_main_trafficlight_normal();
  377. raiseDisableTimer();
  378. enterSequence_main_main_trafficlight_interrupted_default();
  379. }
  380. private void effect_main_main_trafficlight_normal_normal_Red_tr0() {
  381. exitSequence_main_main_trafficlight_normal_normal_Red();
  382. enterSequence_main_main_trafficlight_normal_normal_Green_default();
  383. }
  384. private void effect_main_main_trafficlight_normal_normal_Yellow_tr0() {
  385. exitSequence_main_main_trafficlight_normal_normal_Yellow();
  386. raiseEnableTimer();
  387. enterSequence_main_main_trafficlight_normal_normal_Red_default();
  388. }
  389. private void effect_main_main_trafficlight_normal_normal_Green_tr0() {
  390. exitSequence_main_main_trafficlight_normal_normal_Green();
  391. enterSequence_main_main_trafficlight_normal_normal_Yellow_default();
  392. }
  393. private void effect_main_main_timer_Disabled_tr0() {
  394. exitSequence_main_main_timer_Disabled();
  395. enterSequence_main_main_timer_running_default();
  396. }
  397. private void effect_main_main_timer_running_tr0() {
  398. exitSequence_main_main_timer_running();
  399. enterSequence_main_main_timer_Disabled_default();
  400. }
  401. private void effect_main_main_timer_running_tr1() {
  402. exitSequence_main_main_timer_running();
  403. enterSequence_main_main_timer_running_default();
  404. }
  405. private void effect_main_main_timer_running_running_DecidingColor_tr0() {
  406. exitSequence_main_main_timer_running_running_DecidingColor();
  407. sCITimer.raiseUpdateTimerColour("Green");
  408. enterSequence_main_main_timer_running_running_Green_default();
  409. }
  410. private void effect_main_main_timer_running_running_DecidingColor_tr1() {
  411. exitSequence_main_main_timer_running_running_DecidingColor();
  412. sCITimer.raiseUpdateTimerColour("Red");
  413. enterSequence_main_main_timer_running_running_Red_default();
  414. }
  415. private void effect_main_main_timer_running_running_Green_tr0() {
  416. exitSequence_main_main_timer_running_running_Green();
  417. setCounter(getCounter() - 1);
  418. enterSequence_main_main_timer_running_running_Green_default();
  419. }
  420. private void effect_main_main_timer_running_running_Red_tr0() {
  421. exitSequence_main_main_timer_running_running_Red();
  422. setCounter(getCounter() - 1);
  423. enterSequence_main_main_timer_running_running_Red_default();
  424. }
  425. private void effect_main_off_tr0() {
  426. exitSequence_main_off();
  427. enterSequence_main_main_default();
  428. }
  429. /* Entry action for state 'Black'. */
  430. private void entryAction_main_main_trafficlight_interrupted_blinking_Black() {
  431. timer.setTimer(this, 0, 500, false);
  432. sCITrafficLight.raiseDisplayNone();
  433. }
  434. /* Entry action for state 'Yellow'. */
  435. private void entryAction_main_main_trafficlight_interrupted_blinking_Yellow() {
  436. timer.setTimer(this, 1, 500, false);
  437. sCITrafficLight.raiseDisplayYellow();
  438. }
  439. /* Entry action for state 'Red'. */
  440. private void entryAction_main_main_trafficlight_normal_normal_Red() {
  441. timer.setTimer(this, 2, 60 * 1000, false);
  442. sCITrafficLight.raiseDisplayRed();
  443. setCounter(60);
  444. raiseResetTimer();
  445. }
  446. /* Entry action for state 'Yellow'. */
  447. private void entryAction_main_main_trafficlight_normal_normal_Yellow() {
  448. timer.setTimer(this, 3, 5 * 1000, false);
  449. sCITrafficLight.raiseDisplayYellow();
  450. raiseDisableTimer();
  451. }
  452. /* Entry action for state 'Green'. */
  453. private void entryAction_main_main_trafficlight_normal_normal_Green() {
  454. timer.setTimer(this, 4, 55 * 1000, false);
  455. sCITrafficLight.raiseDisplayGreen();
  456. setCounter(55);
  457. raiseResetTimer();
  458. }
  459. /* Entry action for state 'Green'. */
  460. private void entryAction_main_main_timer_running_running_Green() {
  461. timer.setTimer(this, 5, 1 * 1000, false);
  462. sCITimer.raiseUpdateTimerValue(getCounter());
  463. }
  464. /* Entry action for state 'Red'. */
  465. private void entryAction_main_main_timer_running_running_Red() {
  466. timer.setTimer(this, 6, 1 * 1000, false);
  467. sCITimer.raiseUpdateTimerValue(getCounter());
  468. }
  469. /* Exit action for state 'main'. */
  470. private void exitAction_main_main() {
  471. sCITrafficLight.raiseDisplayNone();
  472. }
  473. /* Exit action for state 'Black'. */
  474. private void exitAction_main_main_trafficlight_interrupted_blinking_Black() {
  475. timer.unsetTimer(this, 0);
  476. }
  477. /* Exit action for state 'Yellow'. */
  478. private void exitAction_main_main_trafficlight_interrupted_blinking_Yellow() {
  479. timer.unsetTimer(this, 1);
  480. }
  481. /* Exit action for state 'Red'. */
  482. private void exitAction_main_main_trafficlight_normal_normal_Red() {
  483. timer.unsetTimer(this, 2);
  484. }
  485. /* Exit action for state 'Yellow'. */
  486. private void exitAction_main_main_trafficlight_normal_normal_Yellow() {
  487. timer.unsetTimer(this, 3);
  488. }
  489. /* Exit action for state 'Green'. */
  490. private void exitAction_main_main_trafficlight_normal_normal_Green() {
  491. timer.unsetTimer(this, 4);
  492. }
  493. /* Exit action for state 'running'. */
  494. private void exitAction_main_main_timer_running() {
  495. sCITimer.raiseUpdateTimerValue(-1);
  496. }
  497. /* Exit action for state 'Green'. */
  498. private void exitAction_main_main_timer_running_running_Green() {
  499. timer.unsetTimer(this, 5);
  500. }
  501. /* Exit action for state 'Red'. */
  502. private void exitAction_main_main_timer_running_running_Red() {
  503. timer.unsetTimer(this, 6);
  504. }
  505. /* 'default' enter sequence for state main */
  506. private void enterSequence_main_main_default() {
  507. enterSequence_main_main_trafficlight_default();
  508. enterSequence_main_main_timer_default();
  509. }
  510. /* 'default' enter sequence for state interrupted */
  511. private void enterSequence_main_main_trafficlight_interrupted_default() {
  512. enterSequence_main_main_trafficlight_interrupted_blinking_default();
  513. }
  514. /* 'default' enter sequence for state Black */
  515. private void enterSequence_main_main_trafficlight_interrupted_blinking_Black_default() {
  516. entryAction_main_main_trafficlight_interrupted_blinking_Black();
  517. nextStateIndex = 0;
  518. stateVector[0] = State.main_main_trafficlight_interrupted_blinking_Black;
  519. }
  520. /* 'default' enter sequence for state Yellow */
  521. private void enterSequence_main_main_trafficlight_interrupted_blinking_Yellow_default() {
  522. entryAction_main_main_trafficlight_interrupted_blinking_Yellow();
  523. nextStateIndex = 0;
  524. stateVector[0] = State.main_main_trafficlight_interrupted_blinking_Yellow;
  525. }
  526. /* 'default' enter sequence for state normal */
  527. private void enterSequence_main_main_trafficlight_normal_default() {
  528. enterSequence_main_main_trafficlight_normal_normal_default();
  529. }
  530. /* 'default' enter sequence for state Red */
  531. private void enterSequence_main_main_trafficlight_normal_normal_Red_default() {
  532. entryAction_main_main_trafficlight_normal_normal_Red();
  533. nextStateIndex = 0;
  534. stateVector[0] = State.main_main_trafficlight_normal_normal_Red;
  535. historyVector[0] = stateVector[0];
  536. }
  537. /* 'default' enter sequence for state Yellow */
  538. private void enterSequence_main_main_trafficlight_normal_normal_Yellow_default() {
  539. entryAction_main_main_trafficlight_normal_normal_Yellow();
  540. nextStateIndex = 0;
  541. stateVector[0] = State.main_main_trafficlight_normal_normal_Yellow;
  542. historyVector[0] = stateVector[0];
  543. }
  544. /* 'default' enter sequence for state Green */
  545. private void enterSequence_main_main_trafficlight_normal_normal_Green_default() {
  546. entryAction_main_main_trafficlight_normal_normal_Green();
  547. nextStateIndex = 0;
  548. stateVector[0] = State.main_main_trafficlight_normal_normal_Green;
  549. historyVector[0] = stateVector[0];
  550. }
  551. /* 'default' enter sequence for state Disabled */
  552. private void enterSequence_main_main_timer_Disabled_default() {
  553. nextStateIndex = 1;
  554. stateVector[1] = State.main_main_timer_Disabled;
  555. }
  556. /* 'default' enter sequence for state running */
  557. private void enterSequence_main_main_timer_running_default() {
  558. enterSequence_main_main_timer_running_running_default();
  559. }
  560. /* 'default' enter sequence for state DecidingColor */
  561. private void enterSequence_main_main_timer_running_running_DecidingColor_default() {
  562. nextStateIndex = 1;
  563. stateVector[1] = State.main_main_timer_running_running_DecidingColor;
  564. }
  565. /* 'default' enter sequence for state Green */
  566. private void enterSequence_main_main_timer_running_running_Green_default() {
  567. entryAction_main_main_timer_running_running_Green();
  568. nextStateIndex = 1;
  569. stateVector[1] = State.main_main_timer_running_running_Green;
  570. }
  571. /* 'default' enter sequence for state Red */
  572. private void enterSequence_main_main_timer_running_running_Red_default() {
  573. entryAction_main_main_timer_running_running_Red();
  574. nextStateIndex = 1;
  575. stateVector[1] = State.main_main_timer_running_running_Red;
  576. }
  577. /* 'default' enter sequence for state off */
  578. private void enterSequence_main_off_default() {
  579. nextStateIndex = 0;
  580. stateVector[0] = State.main_off;
  581. }
  582. /* 'default' enter sequence for region main */
  583. private void enterSequence_main_default() {
  584. react_main__entry_Default();
  585. }
  586. /* 'default' enter sequence for region trafficlight */
  587. private void enterSequence_main_main_trafficlight_default() {
  588. react_main_main_trafficlight__entry_Default();
  589. }
  590. /* 'default' enter sequence for region blinking */
  591. private void enterSequence_main_main_trafficlight_interrupted_blinking_default() {
  592. react_main_main_trafficlight_interrupted_blinking__entry_Default();
  593. }
  594. /* 'default' enter sequence for region normal */
  595. private void enterSequence_main_main_trafficlight_normal_normal_default() {
  596. react_main_main_trafficlight_normal_normal__entry_Default();
  597. }
  598. /* deep enterSequence with history in child normal */
  599. private void deepEnterSequence_main_main_trafficlight_normal_normal() {
  600. switch (historyVector[0]) {
  601. case main_main_trafficlight_normal_normal_Red:
  602. enterSequence_main_main_trafficlight_normal_normal_Red_default();
  603. break;
  604. case main_main_trafficlight_normal_normal_Yellow:
  605. enterSequence_main_main_trafficlight_normal_normal_Yellow_default();
  606. break;
  607. case main_main_trafficlight_normal_normal_Green:
  608. enterSequence_main_main_trafficlight_normal_normal_Green_default();
  609. break;
  610. default:
  611. break;
  612. }
  613. }
  614. /* 'default' enter sequence for region timer */
  615. private void enterSequence_main_main_timer_default() {
  616. react_main_main_timer__entry_Default();
  617. }
  618. /* 'default' enter sequence for region running */
  619. private void enterSequence_main_main_timer_running_running_default() {
  620. react_main_main_timer_running_running__entry_Default();
  621. }
  622. /* Default exit sequence for state main */
  623. private void exitSequence_main_main() {
  624. exitSequence_main_main_trafficlight();
  625. exitSequence_main_main_timer();
  626. exitAction_main_main();
  627. }
  628. /* Default exit sequence for state interrupted */
  629. private void exitSequence_main_main_trafficlight_interrupted() {
  630. exitSequence_main_main_trafficlight_interrupted_blinking();
  631. }
  632. /* Default exit sequence for state Black */
  633. private void exitSequence_main_main_trafficlight_interrupted_blinking_Black() {
  634. nextStateIndex = 0;
  635. stateVector[0] = State.$NullState$;
  636. exitAction_main_main_trafficlight_interrupted_blinking_Black();
  637. }
  638. /* Default exit sequence for state Yellow */
  639. private void exitSequence_main_main_trafficlight_interrupted_blinking_Yellow() {
  640. nextStateIndex = 0;
  641. stateVector[0] = State.$NullState$;
  642. exitAction_main_main_trafficlight_interrupted_blinking_Yellow();
  643. }
  644. /* Default exit sequence for state normal */
  645. private void exitSequence_main_main_trafficlight_normal() {
  646. exitSequence_main_main_trafficlight_normal_normal();
  647. }
  648. /* Default exit sequence for state Red */
  649. private void exitSequence_main_main_trafficlight_normal_normal_Red() {
  650. nextStateIndex = 0;
  651. stateVector[0] = State.$NullState$;
  652. exitAction_main_main_trafficlight_normal_normal_Red();
  653. }
  654. /* Default exit sequence for state Yellow */
  655. private void exitSequence_main_main_trafficlight_normal_normal_Yellow() {
  656. nextStateIndex = 0;
  657. stateVector[0] = State.$NullState$;
  658. exitAction_main_main_trafficlight_normal_normal_Yellow();
  659. }
  660. /* Default exit sequence for state Green */
  661. private void exitSequence_main_main_trafficlight_normal_normal_Green() {
  662. nextStateIndex = 0;
  663. stateVector[0] = State.$NullState$;
  664. exitAction_main_main_trafficlight_normal_normal_Green();
  665. }
  666. /* Default exit sequence for state Disabled */
  667. private void exitSequence_main_main_timer_Disabled() {
  668. nextStateIndex = 1;
  669. stateVector[1] = State.$NullState$;
  670. }
  671. /* Default exit sequence for state running */
  672. private void exitSequence_main_main_timer_running() {
  673. exitSequence_main_main_timer_running_running();
  674. exitAction_main_main_timer_running();
  675. }
  676. /* Default exit sequence for state DecidingColor */
  677. private void exitSequence_main_main_timer_running_running_DecidingColor() {
  678. nextStateIndex = 1;
  679. stateVector[1] = State.$NullState$;
  680. }
  681. /* Default exit sequence for state Green */
  682. private void exitSequence_main_main_timer_running_running_Green() {
  683. nextStateIndex = 1;
  684. stateVector[1] = State.$NullState$;
  685. exitAction_main_main_timer_running_running_Green();
  686. }
  687. /* Default exit sequence for state Red */
  688. private void exitSequence_main_main_timer_running_running_Red() {
  689. nextStateIndex = 1;
  690. stateVector[1] = State.$NullState$;
  691. exitAction_main_main_timer_running_running_Red();
  692. }
  693. /* Default exit sequence for state off */
  694. private void exitSequence_main_off() {
  695. nextStateIndex = 0;
  696. stateVector[0] = State.$NullState$;
  697. }
  698. /* Default exit sequence for region main */
  699. private void exitSequence_main() {
  700. switch (stateVector[0]) {
  701. case main_main_trafficlight_interrupted_blinking_Black:
  702. exitSequence_main_main_trafficlight_interrupted_blinking_Black();
  703. break;
  704. case main_main_trafficlight_interrupted_blinking_Yellow:
  705. exitSequence_main_main_trafficlight_interrupted_blinking_Yellow();
  706. break;
  707. case main_main_trafficlight_normal_normal_Red:
  708. exitSequence_main_main_trafficlight_normal_normal_Red();
  709. break;
  710. case main_main_trafficlight_normal_normal_Yellow:
  711. exitSequence_main_main_trafficlight_normal_normal_Yellow();
  712. break;
  713. case main_main_trafficlight_normal_normal_Green:
  714. exitSequence_main_main_trafficlight_normal_normal_Green();
  715. break;
  716. case main_off:
  717. exitSequence_main_off();
  718. break;
  719. default:
  720. break;
  721. }
  722. switch (stateVector[1]) {
  723. case main_main_timer_Disabled:
  724. exitSequence_main_main_timer_Disabled();
  725. exitAction_main_main();
  726. break;
  727. case main_main_timer_running_running_DecidingColor:
  728. exitSequence_main_main_timer_running_running_DecidingColor();
  729. exitAction_main_main_timer_running();
  730. exitAction_main_main();
  731. break;
  732. case main_main_timer_running_running_Green:
  733. exitSequence_main_main_timer_running_running_Green();
  734. exitAction_main_main_timer_running();
  735. exitAction_main_main();
  736. break;
  737. case main_main_timer_running_running_Red:
  738. exitSequence_main_main_timer_running_running_Red();
  739. exitAction_main_main_timer_running();
  740. exitAction_main_main();
  741. break;
  742. default:
  743. break;
  744. }
  745. }
  746. /* Default exit sequence for region trafficlight */
  747. private void exitSequence_main_main_trafficlight() {
  748. switch (stateVector[0]) {
  749. case main_main_trafficlight_interrupted_blinking_Black:
  750. exitSequence_main_main_trafficlight_interrupted_blinking_Black();
  751. break;
  752. case main_main_trafficlight_interrupted_blinking_Yellow:
  753. exitSequence_main_main_trafficlight_interrupted_blinking_Yellow();
  754. break;
  755. case main_main_trafficlight_normal_normal_Red:
  756. exitSequence_main_main_trafficlight_normal_normal_Red();
  757. break;
  758. case main_main_trafficlight_normal_normal_Yellow:
  759. exitSequence_main_main_trafficlight_normal_normal_Yellow();
  760. break;
  761. case main_main_trafficlight_normal_normal_Green:
  762. exitSequence_main_main_trafficlight_normal_normal_Green();
  763. break;
  764. default:
  765. break;
  766. }
  767. }
  768. /* Default exit sequence for region blinking */
  769. private void exitSequence_main_main_trafficlight_interrupted_blinking() {
  770. switch (stateVector[0]) {
  771. case main_main_trafficlight_interrupted_blinking_Black:
  772. exitSequence_main_main_trafficlight_interrupted_blinking_Black();
  773. break;
  774. case main_main_trafficlight_interrupted_blinking_Yellow:
  775. exitSequence_main_main_trafficlight_interrupted_blinking_Yellow();
  776. break;
  777. default:
  778. break;
  779. }
  780. }
  781. /* Default exit sequence for region normal */
  782. private void exitSequence_main_main_trafficlight_normal_normal() {
  783. switch (stateVector[0]) {
  784. case main_main_trafficlight_normal_normal_Red:
  785. exitSequence_main_main_trafficlight_normal_normal_Red();
  786. break;
  787. case main_main_trafficlight_normal_normal_Yellow:
  788. exitSequence_main_main_trafficlight_normal_normal_Yellow();
  789. break;
  790. case main_main_trafficlight_normal_normal_Green:
  791. exitSequence_main_main_trafficlight_normal_normal_Green();
  792. break;
  793. default:
  794. break;
  795. }
  796. }
  797. /* Default exit sequence for region timer */
  798. private void exitSequence_main_main_timer() {
  799. switch (stateVector[1]) {
  800. case main_main_timer_Disabled:
  801. exitSequence_main_main_timer_Disabled();
  802. break;
  803. case main_main_timer_running_running_DecidingColor:
  804. exitSequence_main_main_timer_running_running_DecidingColor();
  805. exitAction_main_main_timer_running();
  806. break;
  807. case main_main_timer_running_running_Green:
  808. exitSequence_main_main_timer_running_running_Green();
  809. exitAction_main_main_timer_running();
  810. break;
  811. case main_main_timer_running_running_Red:
  812. exitSequence_main_main_timer_running_running_Red();
  813. exitAction_main_main_timer_running();
  814. break;
  815. default:
  816. break;
  817. }
  818. }
  819. /* Default exit sequence for region running */
  820. private void exitSequence_main_main_timer_running_running() {
  821. switch (stateVector[1]) {
  822. case main_main_timer_running_running_DecidingColor:
  823. exitSequence_main_main_timer_running_running_DecidingColor();
  824. break;
  825. case main_main_timer_running_running_Green:
  826. exitSequence_main_main_timer_running_running_Green();
  827. break;
  828. case main_main_timer_running_running_Red:
  829. exitSequence_main_main_timer_running_running_Red();
  830. break;
  831. default:
  832. break;
  833. }
  834. }
  835. /* The reactions of state Black. */
  836. private void react_main_main_trafficlight_interrupted_blinking_Black() {
  837. if (check_main_main_tr0_tr0()) {
  838. effect_main_main_tr0();
  839. } else {
  840. if (check_main_main_trafficlight_interrupted_tr0_tr0()) {
  841. effect_main_main_trafficlight_interrupted_tr0();
  842. } else {
  843. if (check_main_main_trafficlight_interrupted_blinking_Black_tr0_tr0()) {
  844. effect_main_main_trafficlight_interrupted_blinking_Black_tr0();
  845. }
  846. }
  847. }
  848. }
  849. /* The reactions of state Yellow. */
  850. private void react_main_main_trafficlight_interrupted_blinking_Yellow() {
  851. if (check_main_main_tr0_tr0()) {
  852. effect_main_main_tr0();
  853. } else {
  854. if (check_main_main_trafficlight_interrupted_tr0_tr0()) {
  855. effect_main_main_trafficlight_interrupted_tr0();
  856. } else {
  857. if (check_main_main_trafficlight_interrupted_blinking_Yellow_tr0_tr0()) {
  858. effect_main_main_trafficlight_interrupted_blinking_Yellow_tr0();
  859. }
  860. }
  861. }
  862. }
  863. /* The reactions of state Red. */
  864. private void react_main_main_trafficlight_normal_normal_Red() {
  865. if (check_main_main_tr0_tr0()) {
  866. effect_main_main_tr0();
  867. } else {
  868. if (check_main_main_trafficlight_normal_tr0_tr0()) {
  869. effect_main_main_trafficlight_normal_tr0();
  870. } else {
  871. if (check_main_main_trafficlight_normal_normal_Red_tr0_tr0()) {
  872. effect_main_main_trafficlight_normal_normal_Red_tr0();
  873. }
  874. }
  875. }
  876. }
  877. /* The reactions of state Yellow. */
  878. private void react_main_main_trafficlight_normal_normal_Yellow() {
  879. if (check_main_main_tr0_tr0()) {
  880. effect_main_main_tr0();
  881. } else {
  882. if (check_main_main_trafficlight_normal_tr0_tr0()) {
  883. effect_main_main_trafficlight_normal_tr0();
  884. } else {
  885. if (check_main_main_trafficlight_normal_normal_Yellow_tr0_tr0()) {
  886. effect_main_main_trafficlight_normal_normal_Yellow_tr0();
  887. }
  888. }
  889. }
  890. }
  891. /* The reactions of state Green. */
  892. private void react_main_main_trafficlight_normal_normal_Green() {
  893. if (check_main_main_tr0_tr0()) {
  894. effect_main_main_tr0();
  895. } else {
  896. if (check_main_main_trafficlight_normal_tr0_tr0()) {
  897. effect_main_main_trafficlight_normal_tr0();
  898. } else {
  899. if (check_main_main_trafficlight_normal_normal_Green_tr0_tr0()) {
  900. effect_main_main_trafficlight_normal_normal_Green_tr0();
  901. }
  902. }
  903. }
  904. }
  905. /* The reactions of state Disabled. */
  906. private void react_main_main_timer_Disabled() {
  907. if (check_main_main_timer_Disabled_tr0_tr0()) {
  908. effect_main_main_timer_Disabled_tr0();
  909. }
  910. }
  911. /* The reactions of state DecidingColor. */
  912. private void react_main_main_timer_running_running_DecidingColor() {
  913. if (check_main_main_timer_running_tr0_tr0()) {
  914. effect_main_main_timer_running_tr0();
  915. } else {
  916. if (check_main_main_timer_running_tr1_tr1()) {
  917. effect_main_main_timer_running_tr1();
  918. } else {
  919. if (check_main_main_timer_running_running_DecidingColor_tr0_tr0()) {
  920. effect_main_main_timer_running_running_DecidingColor_tr0();
  921. } else {
  922. if (check_main_main_timer_running_running_DecidingColor_tr1_tr1()) {
  923. effect_main_main_timer_running_running_DecidingColor_tr1();
  924. }
  925. }
  926. }
  927. }
  928. }
  929. /* The reactions of state Green. */
  930. private void react_main_main_timer_running_running_Green() {
  931. if (check_main_main_timer_running_tr0_tr0()) {
  932. effect_main_main_timer_running_tr0();
  933. } else {
  934. if (check_main_main_timer_running_tr1_tr1()) {
  935. effect_main_main_timer_running_tr1();
  936. } else {
  937. if (check_main_main_timer_running_running_Green_tr0_tr0()) {
  938. effect_main_main_timer_running_running_Green_tr0();
  939. }
  940. }
  941. }
  942. }
  943. /* The reactions of state Red. */
  944. private void react_main_main_timer_running_running_Red() {
  945. if (check_main_main_timer_running_tr0_tr0()) {
  946. effect_main_main_timer_running_tr0();
  947. } else {
  948. if (check_main_main_timer_running_tr1_tr1()) {
  949. effect_main_main_timer_running_tr1();
  950. } else {
  951. if (check_main_main_timer_running_running_Red_tr0_tr0()) {
  952. effect_main_main_timer_running_running_Red_tr0();
  953. }
  954. }
  955. }
  956. }
  957. /* The reactions of state off. */
  958. private void react_main_off() {
  959. if (check_main_off_tr0_tr0()) {
  960. effect_main_off_tr0();
  961. }
  962. }
  963. /* Default react sequence for initial entry */
  964. private void react_main_main_trafficlight_interrupted_blinking__entry_Default() {
  965. enterSequence_main_main_trafficlight_interrupted_blinking_Yellow_default();
  966. }
  967. /* Default react sequence for initial entry */
  968. private void react_main_main_trafficlight_normal_normal__entry_Default() {
  969. enterSequence_main_main_trafficlight_normal_normal_Red_default();
  970. }
  971. /* Default react sequence for deep history entry hist */
  972. private void react_main_main_trafficlight_normal_normal_hist() {
  973. /* Enter the region with deep history */
  974. if (historyVector[0] != State.$NullState$) {
  975. deepEnterSequence_main_main_trafficlight_normal_normal();
  976. }
  977. }
  978. /* Default react sequence for initial entry */
  979. private void react_main_main_trafficlight__entry_Default() {
  980. enterSequence_main_main_trafficlight_normal_default();
  981. }
  982. /* Default react sequence for initial entry */
  983. private void react_main_main_timer_running_running__entry_Default() {
  984. enterSequence_main_main_timer_running_running_DecidingColor_default();
  985. }
  986. /* Default react sequence for initial entry */
  987. private void react_main_main_timer__entry_Default() {
  988. enterSequence_main_main_timer_running_default();
  989. }
  990. /* Default react sequence for initial entry */
  991. private void react_main__entry_Default() {
  992. enterSequence_main_off_default();
  993. }
  994. public void runCycle() {
  995. if (!initialized)
  996. throw new IllegalStateException(
  997. "The state machine needs to be initialized first by calling the init() function.");
  998. clearOutEvents();
  999. for (nextStateIndex = 0; nextStateIndex < stateVector.length; nextStateIndex++) {
  1000. switch (stateVector[nextStateIndex]) {
  1001. case main_main_trafficlight_interrupted_blinking_Black:
  1002. react_main_main_trafficlight_interrupted_blinking_Black();
  1003. break;
  1004. case main_main_trafficlight_interrupted_blinking_Yellow:
  1005. react_main_main_trafficlight_interrupted_blinking_Yellow();
  1006. break;
  1007. case main_main_trafficlight_normal_normal_Red:
  1008. react_main_main_trafficlight_normal_normal_Red();
  1009. break;
  1010. case main_main_trafficlight_normal_normal_Yellow:
  1011. react_main_main_trafficlight_normal_normal_Yellow();
  1012. break;
  1013. case main_main_trafficlight_normal_normal_Green:
  1014. react_main_main_trafficlight_normal_normal_Green();
  1015. break;
  1016. case main_main_timer_Disabled:
  1017. react_main_main_timer_Disabled();
  1018. break;
  1019. case main_main_timer_running_running_DecidingColor:
  1020. react_main_main_timer_running_running_DecidingColor();
  1021. break;
  1022. case main_main_timer_running_running_Green:
  1023. react_main_main_timer_running_running_Green();
  1024. break;
  1025. case main_main_timer_running_running_Red:
  1026. react_main_main_timer_running_running_Red();
  1027. break;
  1028. case main_off:
  1029. react_main_off();
  1030. break;
  1031. default:
  1032. // $NullState$
  1033. }
  1034. }
  1035. clearEvents();
  1036. }
  1037. }