diff --git a/com.yakindu.sct.examples.coffeemachine.c/index.html b/com.yakindu.sct.examples.coffeemachine.c/index.html index 756efbe6..81762ae5 100644 --- a/com.yakindu.sct.examples.coffeemachine.c/index.html +++ b/com.yakindu.sct.examples.coffeemachine.c/index.html @@ -10,7 +10,7 @@
- This is a comprehensive example for the deep integration of YAKINDU
+ This is a comprehensive example for the deep integration of itemis CREATE
statecharts with manually written C code. The example is implemented as a
simple command line tool. It makes use of POSIX threads. So you need a
compiler tool chain and a 'pthread' library to build an run the example.
diff --git a/com.yakindu.sct.examples.coffeemachine.c/main.c b/com.yakindu.sct.examples.coffeemachine.c/main.c
index c3d070e5..b7b4d443 100644
--- a/com.yakindu.sct.examples.coffeemachine.c/main.c
+++ b/com.yakindu.sct.examples.coffeemachine.c/main.c
@@ -8,7 +8,7 @@
#include "src-gen/CoffeeMachine.h"
#include "src-gen/sc_timer_service.h"
-/*! \file Implementation of the main function and setup of the virtual YAKINDU Coffee Maker.
+/*! \file Implementation of the main function and setup of the virtual itemis CREATE Coffee Maker.
* It includes everything to setup and run the example.
* The example applies a cycle based execution model.
*/
diff --git a/com.yakindu.sct.examples.coffeemachine.c/metadata.json b/com.yakindu.sct.examples.coffeemachine.c/metadata.json
index 9485484f..6c19e425 100644
--- a/com.yakindu.sct.examples.coffeemachine.c/metadata.json
+++ b/com.yakindu.sct.examples.coffeemachine.c/metadata.json
@@ -2,7 +2,7 @@
"id": "com.yakindu.sct.examples.coffeemachine.c",
"title": "Coffee Machine (Deep C)",
"author": "itemis AG",
- "description": "This is a comprehensive example for the deep integration of YAKINDU statecharts with manually written C code. The example is implemented as a simple command line tool.",
+ "description": "This is a comprehensive example for the deep integration of itemis CREATE statecharts with manually written C code. The example is implemented as a simple command line tool.",
"previewImage": "coffee_machine_thumb.jpg",
"category": [
"professional",
diff --git a/com.yakindu.sct.examples.coffeemachine.c/model/CoffeeMachine.ysc b/com.yakindu.sct.examples.coffeemachine.c/model/CoffeeMachine.ysc
index 35e8838b..840c3541 100644
--- a/com.yakindu.sct.examples.coffeemachine.c/model/CoffeeMachine.ysc
+++ b/com.yakindu.sct.examples.coffeemachine.c/model/CoffeeMachine.ysc
@@ -11,7 +11,7 @@
- This is a example for the deep C++ integration of YAKINDU
+ This is a example for the deep C++ integration of itemis CREATE
statecharts. It shows how C++ classes can be used as variables and is based on the C example: This tutorial contains three parts: 1. Installing the YAKINDU Statechart Tool as a Plugin into Texas
+ 1. Installing the itemis CREATE Statechart Tool as a Plugin into Texas
Instruments Code Composer Studio 2. Adding state machines to the project 3. Creating the Blinky example with the Professional Edition The whole tutorial gives you step-by-step instructions to enable you
to upload the project. First, you need to install TIs Code Composer Studio, which you can
find here:
- After this, you need to get the download site of YAKINDU Statechart Tools.
+ After this, you need to get the download site of itemis CREATE.
Go to
our download site and complete the free registration, in case you have
not done this already. Then you will get a number of different
@@ -68,7 +68,7 @@
Once again, go over to install new software. There you add the URL
- you copied from our site. Choose at least the YAKINDU Statechart
+ you copied from our site. Choose at least the itemis CREATE Statechart
Tools Professional Edition. You will get a trial version, which lasts
for 30 days. Don’t hesitate, our aren’t buying anything. If the time
expired, you can still use all free Standard Edition features.
@@ -83,7 +83,7 @@
To use state machines proceed as normal and create a new CCS Project. Open
the File tab, open New, click on Other and search for
@@ -95,7 +95,7 @@ Now you can start working with state machines!
Right click the project, open New and choose a C Statechart Model.
A Wizard will be opened in which you can select your project and name your
@@ -160,7 +160,7 @@
@@ -224,7 +224,7 @@ The following tools were used in the creation of this tutorial: System: Windows 10 YAKINDU Statechart Tool Version: 2.9.3 itemis CREATE Statechart Tool Version: 2.9.3 Code Composer Version: 7.0.0.00043
Note: The MSP430G2 Launchpad does not support Linux.
@@ -232,18 +232,18 @@ Code Composer Studio V6 is based Eclipse Mars (4.5.) and Java 7.
- Installing and running YAKINDU Statechart Tools within CCSV6 requires two steps: 1st: Use the Mars update site instead of the Neon update site, which you can find here. As I mentioned
before, you do not need to install anything of the Mars update site. Just add the update site.
- After this you are able to install YAKINDU Statechart Tools within CCS V6 as described before.
- You need to get the download site of YAKINDU Statechart Tools.
+ After this you are able to install itemis CREATE within CCS V6 as described before.
+ You need to get the download site of itemis CREATE.
Go to
our download site and complete the free registration, in case you have
not done this already. Then you will get a number of different
installation options. Choose the black button with install from
update site. 2nd: YAKINDU Statechart Tools has been added, but it won't be executed,
+ 2nd: itemis CREATE has been added, but it won't be executed,
because Java 8 is missing. Therefore, if you don't already have, install a 32 bit version of Java 8.
Afterwards, right click your CCS V6 shortcut and add the path of the 32 bit Java 8.
For my machine it looks like this:
- This is an example for the integration of YAKINDU Statechart Tools with another IDE, here the STM32CubeIDE.
+ This is an example for the integration of itemis CREATE with another IDE, here the STM32CubeIDE.
The example model makes use of the deep C integration to directly call functions from the HAL headers in the
statechart model:
- After downloading and installing the STM32CubeIDE, YAKINDU Statechart Tools Professional Edition must
+ After downloading and installing the STM32CubeIDE, itemis CREATE Professional Edition must
installed via the update
site. You can follow these STEPS.
diff --git a/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Inc/sc_timer_service.h b/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Inc/sc_timer_service.h
index b883deea..33815405 100644
--- a/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Inc/sc_timer_service.h
+++ b/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Inc/sc_timer_service.h
@@ -14,7 +14,7 @@
extern "C" {
#endif
-/*! file/ Interface definition of a POSIX thread based timer service for YAKINDU SCT state machines. */
+/*! file/ Interface definition of a POSIX thread based timer service for itemis CREATE state machines. */
struct sc_timer_service;
diff --git a/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Src/sc_timer_service.c b/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Src/sc_timer_service.c
index 21fe894f..5687ff4e 100644
--- a/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Src/sc_timer_service.c
+++ b/com.yakindu.sct.examples.stm32f407vg.multism.blinky/Core/Src/sc_timer_service.c
@@ -10,7 +10,7 @@
#include "sc_timer_service.h"
-/*! \file Implementation of YAKINDU SCT timer functionality based on POSIX threads. */
+/*! \file Implementation of itemis CREATE timer functionality based on POSIX threads. */
/*! Callback that is called when a timer fires. */
diff --git a/com.yakindu.sct.examples.stm32f407vg.multism.blinky/index.html b/com.yakindu.sct.examples.stm32f407vg.multism.blinky/index.html
index b8a05d50..053e2afd 100644
--- a/com.yakindu.sct.examples.stm32f407vg.multism.blinky/index.html
+++ b/com.yakindu.sct.examples.stm32f407vg.multism.blinky/index.html
@@ -12,7 +12,7 @@
- This is an example for the integration of YAKINDU Statechart Tools with another IDE, here the
+ This is an example for the integration of itemis CREATE with another IDE, here the
STM32CubeIDE.
The example model demonstrates the usage of the multi state machines feature together with the
deep C
@@ -44,7 +44,7 @@
- After downloading and installing the STM32CubeIDE, YAKINDU Statechart Tools Professional Edition must
+ After downloading and installing the STM32CubeIDE, itemis CREATE Professional Edition must
installed via the update
site. You can follow these STEPS.
diff --git a/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/bundle.js b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/bundle.js
new file mode 100644
index 00000000..d93b4323
--- /dev/null
+++ b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/bundle.js
@@ -0,0 +1,550 @@
+var com;
+(function (com) {
+ var yakindu;
+ (function (yakindu) {
+ var core;
+ (function (core) {
+ /**
+ * Instances represent state machine trace events.
+ * @param {com.yakindu.core.TraceEventType} type
+ * @param {*} machine
+ * @param {*} state
+ * @param {*} feature
+ * @param {*} value
+ * @class
+ */
+ class TraceEvent {
+ constructor(type, machine, state, feature, value) {
+ if (((typeof type === 'number') || type === null) && ((machine != null) || machine === null) && ((state != null) || state === null) && ((feature != null) || feature === null) && ((value != null) || value === null)) {
+ let __args = arguments;
+ if (this.type === undefined) {
+ this.type = null;
+ }
+ if (this.machine === undefined) {
+ this.machine = null;
+ }
+ if (this.state === undefined) {
+ this.state = null;
+ }
+ if (this.feature === undefined) {
+ this.feature = null;
+ }
+ if (this.value === undefined) {
+ this.value = null;
+ }
+ this.type = type;
+ this.machine = machine;
+ this.state = state;
+ this.feature = feature;
+ this.value = value;
+ }
+ else if (((typeof type === 'number') || type === null) && ((machine != null) || machine === null) && state === undefined && feature === undefined && value === undefined) {
+ let __args = arguments;
+ {
+ let __args = arguments;
+ let state = null;
+ let feature = null;
+ let value = null;
+ if (this.type === undefined) {
+ this.type = null;
+ }
+ if (this.machine === undefined) {
+ this.machine = null;
+ }
+ if (this.state === undefined) {
+ this.state = null;
+ }
+ if (this.feature === undefined) {
+ this.feature = null;
+ }
+ if (this.value === undefined) {
+ this.value = null;
+ }
+ this.type = type;
+ this.machine = machine;
+ this.state = state;
+ this.feature = feature;
+ this.value = value;
+ }
+ if (this.type === undefined) {
+ this.type = null;
+ }
+ if (this.machine === undefined) {
+ this.machine = null;
+ }
+ if (this.state === undefined) {
+ this.state = null;
+ }
+ if (this.feature === undefined) {
+ this.feature = null;
+ }
+ if (this.value === undefined) {
+ this.value = null;
+ }
+ }
+ else
+ throw new Error('invalid overload');
+ }
+ getType() {
+ return this.type;
+ }
+ getMachine() {
+ return this.machine;
+ }
+ getState() {
+ return this.state;
+ }
+ getFeature() {
+ return this.feature;
+ }
+ getValue() {
+ return this.value;
+ }
+ }
+ core.TraceEvent = TraceEvent;
+ TraceEvent["__class"] = "com.yakindu.core.TraceEvent";
+ })(core = yakindu.core || (yakindu.core = {}));
+ })(yakindu = com.yakindu || (com.yakindu = {}));
+})(com || (com = {}));
+(function (com) {
+ var yakindu;
+ (function (yakindu) {
+ var core;
+ (function (core) {
+ /**
+ * Trace event type enumeration.
+ * @enum
+ * @property {com.yakindu.core.TraceEventType} MACHINE_ENTER
+ * @property {com.yakindu.core.TraceEventType} MACHINE_EXIT
+ * @property {com.yakindu.core.TraceEventType} MACHINE_RTS_START
+ * @property {com.yakindu.core.TraceEventType} MACHINE_RTS_STOP
+ * @property {com.yakindu.core.TraceEventType} STATE_ENTERED
+ * @property {com.yakindu.core.TraceEventType} STATE_EXITED
+ * @property {com.yakindu.core.TraceEventType} STATE_TRANSITION
+ * @property {com.yakindu.core.TraceEventType} EVENT_RAISED
+ * @property {com.yakindu.core.TraceEventType} VARIABLE_SET
+ * @property {com.yakindu.core.TraceEventType} TIME_EVENT_RAISED
+ * @property {com.yakindu.core.TraceEventType} TIME_EVENT_SET
+ * @property {com.yakindu.core.TraceEventType} TIME_EVENT_UNSET
+ * @class
+ */
+ let TraceEventType;
+ (function (TraceEventType) {
+ TraceEventType[TraceEventType["MACHINE_ENTER"] = 0] = "MACHINE_ENTER";
+ TraceEventType[TraceEventType["MACHINE_EXIT"] = 1] = "MACHINE_EXIT";
+ TraceEventType[TraceEventType["MACHINE_RTS_START"] = 2] = "MACHINE_RTS_START";
+ TraceEventType[TraceEventType["MACHINE_RTS_STOP"] = 3] = "MACHINE_RTS_STOP";
+ TraceEventType[TraceEventType["STATE_ENTERED"] = 4] = "STATE_ENTERED";
+ TraceEventType[TraceEventType["STATE_EXITED"] = 5] = "STATE_EXITED";
+ TraceEventType[TraceEventType["STATE_TRANSITION"] = 6] = "STATE_TRANSITION";
+ TraceEventType[TraceEventType["EVENT_RAISED"] = 7] = "EVENT_RAISED";
+ TraceEventType[TraceEventType["VARIABLE_SET"] = 8] = "VARIABLE_SET";
+ TraceEventType[TraceEventType["TIME_EVENT_RAISED"] = 9] = "TIME_EVENT_RAISED";
+ TraceEventType[TraceEventType["TIME_EVENT_SET"] = 10] = "TIME_EVENT_SET";
+ TraceEventType[TraceEventType["TIME_EVENT_UNSET"] = 11] = "TIME_EVENT_UNSET";
+ })(TraceEventType = core.TraceEventType || (core.TraceEventType = {}));
+ })(core = yakindu.core || (yakindu.core = {}));
+ })(yakindu = com.yakindu || (com.yakindu = {}));
+})(com || (com = {}));
+(function (com) {
+ var yakindu;
+ (function (yakindu) {
+ var core;
+ (function (core) {
+ var rx;
+ (function (rx) {
+ class Observable {
+ constructor() {
+ this.observers = ([]);
+ }
+ next(value) {
+ for (let index = 0; index < this.observers.length; index++) {
+ let observer = this.observers[index];
+ {
+ observer.next(value);
+ }
+ }
+ }
+ subscribe(observer) {
+ return observer != null ? /* add */ (this.observers.push(observer) > 0) : false;
+ }
+ unsubscribe(observer) {
+ return observer != null ? /* remove */ (a => { let index = a.indexOf(observer); if (index >= 0) {
+ a.splice(index, 1);
+ return true;
+ }
+ else {
+ return false;
+ } })(this.observers) : false;
+ }
+ }
+ rx.Observable = Observable;
+ Observable["__class"] = "com.yakindu.core.rx.Observable";
+ })(rx = core.rx || (core.rx = {}));
+ })(core = yakindu.core || (yakindu.core = {}));
+ })(yakindu = com.yakindu || (com.yakindu = {}));
+})(com || (com = {}));
+var sct;
+(function (sct) {
+ var yakindu;
+ (function (yakindu) {
+ var io;
+ (function (io) {
+ class Statemachine {
+ constructor() {
+ this.stateVector = [null];
+ this.trace = (new com.yakindu.core.rx.Observable());
+ this.inEventQueue = ([]);
+ if (this.isExecuting === undefined) {
+ this.isExecuting = false;
+ }
+ if (this.e === undefined) {
+ this.e = false;
+ }
+ if (this.m === undefined) {
+ this.m = 0;
+ }
+ if (this.n === undefined) {
+ this.n = 0;
+ }
+ if (this.o === undefined) {
+ this.o = 0;
+ }
+ for (let i = 0; i < 1; i++) {
+ {
+ this.stateVector[i] = Statemachine.State.$NULLSTATE$;
+ }
+ ;
+ }
+ this.clearInEvents();
+ this.setM(0);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.M, this.m)));
+ this.setN(0);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.N, this.n)));
+ this.setO(0);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.O, this.o)));
+ this.isExecuting = false;
+ }
+ getIsExecuting() {
+ return this.isExecuting;
+ }
+ setIsExecuting(value) {
+ this.isExecuting = value;
+ }
+ enter() {
+ if (this.getIsExecuting()) {
+ return;
+ }
+ this.isExecuting = true;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.MACHINE_ENTER, this)));
+ this.enterSequence_main_region_default();
+ this.isExecuting = false;
+ }
+ exit() {
+ if (this.getIsExecuting()) {
+ return;
+ }
+ this.isExecuting = true;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.MACHINE_EXIT, this)));
+ this.exitSequence_main_region();
+ this.isExecuting = false;
+ }
+ /**
+ * @see IStatemachine#isActive()
+ * @return {boolean}
+ */
+ isActive() {
+ return this.stateVector[0] !== Statemachine.State.$NULLSTATE$;
+ }
+ /**
+ *
+ * Always returns 'false' since this state machine can never become final.
+ *
+ * @see IStatemachine#isFinal()
+ * @return {boolean}
+ */
+ isFinal() {
+ return false;
+ }
+ clearInEvents() {
+ this.e = false;
+ }
+ microStep() {
+ switch ((this.stateVector[0])) {
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_B:
+ this.main_region_A_r1_B_react(-1);
+ break;
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_C:
+ this.main_region_A_r1_C_react(-1);
+ break;
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_D:
+ this.main_region_D_react(-1);
+ break;
+ default:
+ break;
+ }
+ }
+ runCycle() {
+ if (this.getIsExecuting()) {
+ return;
+ }
+ this.isExecuting = true;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.MACHINE_RTS_START, this)));
+ this.nextEvent();
+ do {
+ {
+ this.microStep();
+ this.clearInEvents();
+ this.nextEvent();
+ }
+ } while ((this.e));
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.MACHINE_RTS_STOP, this)));
+ this.isExecuting = false;
+ }
+ nextEvent() {
+ if (!(this.inEventQueue.length == 0)) {
+ (target => (typeof target === 'function') ? target() : target.run())(/* poll */ (a => a.length == 0 ? null : a.shift())(this.inEventQueue));
+ return;
+ }
+ }
+ /**
+ * Returns true if the given state is currently active otherwise false.
+ * @param {sct.yakindu.io.Statemachine.State} state
+ * @return {boolean}
+ */
+ isStateActive(state) {
+ switch ((state)) {
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A:
+ return /* Enum.ordinal */ sct.yakindu.io.Statemachine.State[sct.yakindu.io.Statemachine.State[this.stateVector[0]]] >= /* Enum.ordinal */ sct.yakindu.io.Statemachine.State[sct.yakindu.io.Statemachine.State[Statemachine.State.MAIN_REGION_A]] && /* Enum.ordinal */ sct.yakindu.io.Statemachine.State[sct.yakindu.io.Statemachine.State[this.stateVector[0]]] <= /* Enum.ordinal */ sct.yakindu.io.Statemachine.State[sct.yakindu.io.Statemachine.State[Statemachine.State.MAIN_REGION_A_R1_C]];
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_B:
+ return this.stateVector[0] === Statemachine.State.MAIN_REGION_A_R1_B;
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_C:
+ return this.stateVector[0] === Statemachine.State.MAIN_REGION_A_R1_C;
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_D:
+ return this.stateVector[0] === Statemachine.State.MAIN_REGION_D;
+ default:
+ return false;
+ }
+ }
+ getTrace() {
+ return this.trace;
+ }
+ raiseE() {
+ /* add */ (this.inEventQueue.push(() => {
+ this.e = true;
+ }) > 0);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.EVENT_RAISED, this, null, Statemachine.Feature.E, null)));
+ this.runCycle();
+ }
+ getM() {
+ return this.m;
+ }
+ setM(value) {
+ this.m = value;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.M, this.m)));
+ }
+ getN() {
+ return this.n;
+ }
+ setN(value) {
+ this.n = value;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.N, this.n)));
+ }
+ getO() {
+ return this.o;
+ }
+ setO(value) {
+ this.o = value;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.O, this.o)));
+ }
+ entryAction_main_region_A() {
+ this.setM(1);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.M, this.m)));
+ }
+ entryAction_main_region_A_r1_B() {
+ this.setM(2);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.M, this.m)));
+ }
+ exitAction_main_region_A() {
+ this.setO(1);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.O, this.o)));
+ }
+ exitAction_main_region_A_r1_B() {
+ this.setO(2);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.O, this.o)));
+ }
+ enterSequence_main_region_A_default() {
+ this.entryAction_main_region_A();
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_ENTERED, this, Statemachine.State.MAIN_REGION_A, null, null)));
+ this.enterSequence_main_region_A_r1_default();
+ }
+ enterSequence_main_region_A_r1_B_default() {
+ this.entryAction_main_region_A_r1_B();
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_ENTERED, this, Statemachine.State.MAIN_REGION_A_R1_B, null, null)));
+ this.stateVector[0] = Statemachine.State.MAIN_REGION_A_R1_B;
+ }
+ enterSequence_main_region_A_r1_C_default() {
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_ENTERED, this, Statemachine.State.MAIN_REGION_A_R1_C, null, null)));
+ this.stateVector[0] = Statemachine.State.MAIN_REGION_A_R1_C;
+ }
+ enterSequence_main_region_D_default() {
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_ENTERED, this, Statemachine.State.MAIN_REGION_D, null, null)));
+ this.stateVector[0] = Statemachine.State.MAIN_REGION_D;
+ }
+ enterSequence_main_region_default() {
+ this.react_main_region__entry_Default();
+ }
+ enterSequence_main_region_A_r1_default() {
+ this.react_main_region_A_r1__entry_Default();
+ }
+ exitSequence_main_region_A() {
+ this.exitSequence_main_region_A_r1();
+ this.exitAction_main_region_A();
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_EXITED, this, Statemachine.State.MAIN_REGION_A, null, null)));
+ }
+ exitSequence_main_region_A_r1_B() {
+ this.stateVector[0] = Statemachine.State.$NULLSTATE$;
+ this.exitAction_main_region_A_r1_B();
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_EXITED, this, Statemachine.State.MAIN_REGION_A_R1_B, null, null)));
+ }
+ exitSequence_main_region_A_r1_C() {
+ this.stateVector[0] = Statemachine.State.$NULLSTATE$;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_EXITED, this, Statemachine.State.MAIN_REGION_A_R1_C, null, null)));
+ }
+ exitSequence_main_region_D() {
+ this.stateVector[0] = Statemachine.State.$NULLSTATE$;
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_EXITED, this, Statemachine.State.MAIN_REGION_D, null, null)));
+ }
+ exitSequence_main_region() {
+ switch ((this.stateVector[0])) {
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_B:
+ this.exitSequence_main_region_A_r1_B();
+ this.exitAction_main_region_A();
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_EXITED, this, Statemachine.State.MAIN_REGION_A, null, null)));
+ break;
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_C:
+ this.exitSequence_main_region_A_r1_C();
+ this.exitAction_main_region_A();
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_EXITED, this, Statemachine.State.MAIN_REGION_A, null, null)));
+ break;
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_D:
+ this.exitSequence_main_region_D();
+ break;
+ default:
+ break;
+ }
+ }
+ exitSequence_main_region_A_r1() {
+ switch ((this.stateVector[0])) {
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_B:
+ this.exitSequence_main_region_A_r1_B();
+ break;
+ case sct.yakindu.io.Statemachine.State.MAIN_REGION_A_R1_C:
+ this.exitSequence_main_region_A_r1_C();
+ break;
+ default:
+ break;
+ }
+ }
+ react_main_region_A_r1__entry_Default() {
+ this.enterSequence_main_region_A_r1_B_default();
+ }
+ react_main_region__entry_Default() {
+ this.enterSequence_main_region_A_default();
+ }
+ react(transitioned_before) {
+ return transitioned_before;
+ }
+ main_region_A_react(transitioned_before) {
+ let transitioned_after = transitioned_before;
+ if (transitioned_after < 0) {
+ if (this.e) {
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_TRANSITION, this, Statemachine.State.MAIN_REGION_A, null, 0)));
+ this.exitSequence_main_region_A();
+ this.enterSequence_main_region_D_default();
+ this.react(0);
+ transitioned_after = 0;
+ }
+ }
+ if (transitioned_after === transitioned_before) {
+ if (this.e) {
+ this.setN(1);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.N, this.n)));
+ }
+ transitioned_after = this.react(transitioned_before);
+ }
+ return transitioned_after;
+ }
+ main_region_A_r1_B_react(transitioned_before) {
+ let transitioned_after = transitioned_before;
+ if (transitioned_after < 0) {
+ if (this.e) {
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.STATE_TRANSITION, this, Statemachine.State.MAIN_REGION_A_R1_B, null, 0)));
+ this.exitSequence_main_region_A_r1_B();
+ this.enterSequence_main_region_A_r1_C_default();
+ this.main_region_A_react(0);
+ transitioned_after = 0;
+ }
+ }
+ if (transitioned_after === transitioned_before) {
+ if (this.e) {
+ this.setN(2);
+ this.trace.next((new com.yakindu.core.TraceEvent(com.yakindu.core.TraceEventType.VARIABLE_SET, this, null, Statemachine.Feature.N, this.n)));
+ }
+ transitioned_after = this.main_region_A_react(transitioned_before);
+ }
+ return transitioned_after;
+ }
+ main_region_A_r1_C_react(transitioned_before) {
+ let transitioned_after = transitioned_before;
+ if (transitioned_after < 0) {
+ }
+ if (transitioned_after === transitioned_before) {
+ transitioned_after = this.main_region_A_react(transitioned_before);
+ }
+ return transitioned_after;
+ }
+ main_region_D_react(transitioned_before) {
+ let transitioned_after = transitioned_before;
+ if (transitioned_after < 0) {
+ }
+ if (transitioned_after === transitioned_before) {
+ transitioned_after = this.react(transitioned_before);
+ }
+ return transitioned_after;
+ }
+ }
+ io.Statemachine = Statemachine;
+ Statemachine["__class"] = "sct.yakindu.io.Statemachine";
+ Statemachine["__interfaces"] = ["com.yakindu.core.IStatemachine"];
+ (function (Statemachine) {
+ let State;
+ (function (State) {
+ State[State["MAIN_REGION_A"] = 0] = "MAIN_REGION_A";
+ State[State["MAIN_REGION_A_R1_B"] = 1] = "MAIN_REGION_A_R1_B";
+ State[State["MAIN_REGION_A_R1_C"] = 2] = "MAIN_REGION_A_R1_C";
+ State[State["MAIN_REGION_D"] = 3] = "MAIN_REGION_D";
+ State[State["$NULLSTATE$"] = 4] = "$NULLSTATE$";
+ })(State = Statemachine.State || (Statemachine.State = {}));
+ /**
+ * Enumeration of all features of the statechart
+ * @enum
+ * @property {sct.yakindu.io.Statemachine.Feature} NO_FEATURE
+ * @property {sct.yakindu.io.Statemachine.Feature} E
+ * @property {sct.yakindu.io.Statemachine.Feature} M
+ * @property {sct.yakindu.io.Statemachine.Feature} N
+ * @property {sct.yakindu.io.Statemachine.Feature} O
+ * @class
+ */
+ let Feature;
+ (function (Feature) {
+ Feature[Feature["NO_FEATURE"] = 0] = "NO_FEATURE";
+ Feature[Feature["E"] = 1] = "E";
+ Feature[Feature["M"] = 2] = "M";
+ Feature[Feature["N"] = 3] = "N";
+ Feature[Feature["O"] = 4] = "O";
+ })(Feature = Statemachine.Feature || (Statemachine.Feature = {}));
+ })(Statemachine = io.Statemachine || (io.Statemachine = {}));
+ })(io = yakindu.io || (yakindu.io = {}));
+ })(yakindu = sct.yakindu || (sct.yakindu = {}));
+})(sct || (sct = {}));
diff --git a/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/context.json.js b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/context.json.js
new file mode 100644
index 00000000..df20296f
--- /dev/null
+++ b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/context.json.js
@@ -0,0 +1 @@
+const contextJson = {"elements":[{"elements":[{"kind":"event","name":"e","fqName":"e","featureId":"E","writable":true},{"kind":"variable","type":"integer","name":"m","fqName":"m","featureId":"M","writable":true,"value":0},{"kind":"variable","type":"integer","name":"n","fqName":"n","featureId":"N","writable":true,"value":0},{"kind":"variable","type":"integer","name":"o","fqName":"o","featureId":"O","writable":true,"value":0}],"kind":"composite","name":"default","featureId":"","writable":true}]}
\ No newline at end of file
diff --git a/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/hashes.json.js b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/hashes.json.js
new file mode 100644
index 00000000..0429c25c
--- /dev/null
+++ b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/hashes.json.js
@@ -0,0 +1 @@
+const hashesJson = {"MAIN_REGION_A_R1_B_tr0":"6e0d1ca2-a571-4b99-80d2-9b5af32ec56b","MAIN_REGION_A_R1_B":"8e25f8e2-0c5b-4c86-a61b-5f89d171d8cb","MAIN_REGION_A_R1_C":"28a8064c-d355-481a-9cba-67e8e7001341","MAIN_REGION_A":"4b7141ed-a359-4fb0-bf64-3e82ecaa43bd","MAIN_REGION_A_tr0":"df33b6e4-03e6-467c-8ac3-3e33369a58c6","MAIN_REGION_D":"b2b05fa3-4f82-41b2-9c2e-ce73bbb51e91"}
\ No newline at end of file
diff --git a/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/statemachine.svg.js b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/statemachine.svg.js
new file mode 100644
index 00000000..f2b03e13
--- /dev/null
+++ b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/statemachine.svg.js
@@ -0,0 +1 @@
+let svg = ``
\ No newline at end of file
diff --git a/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/ypi.css b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/ypi.css
new file mode 100644
index 00000000..771aaa11
--- /dev/null
+++ b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/assets/ypi.css
@@ -0,0 +1,113 @@
+/*!
+ * itemis CREATE Player Styles
+ * Copyright 2021 itemis AG
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+
+ /*!
+ * Style definitions follow BEM pattern using and additional 'y' namespace (for itemis CREATE).
+ */
+.y-declaration {
+ padding: 3px;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ background-color: #eee;
+ font-family: 'Courier New', Courier, monospace;
+}
+
+
+.y-entry {
+ padding: 3px;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+}
+
+.y-entry:after {
+ content: ' \25CF ';
+ font-size: larger;
+}
+
+.y-state {
+ background-color: rgb(209, 223, 238);
+ padding: 3px;
+ border: 0.5pt;;
+ border: 0.5pt;
+ border-radius: 4px;
+ border-color: #bbb;
+ font-family: 'Courier New', Courier, monospace;
+}
+
+.y-state--active {
+ background-color: rgb(244, 215, 66);
+}
+
+.y-state--inactive {
+ background-color: rgb(209, 223, 238);
+}
+
+.y-variable{
+ background-color: #eee;
+ border-color: #aaa;
+ border: 0.5pt;
+ border: 0.5pt;
+ border-radius: 2px;
+ font-family: 'Courier New', Courier, monospace;
+}
+
+.y-variable::after {
+ color: #aaa;
+ content: attr(value);
+ font-family: 'Courier New', Courier, monospace;
+}
+
+.y-do-enter {
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: pointer;
+}
+
+.y-do-enter:before {
+ content: ' \2192 ';
+}
+
+.y-do-exit {
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: pointer
+}
+
+.y-do-exit:before {
+ content: ' \2192 ';
+}
+
+.y-do-raise {
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: pointer;
+ white-space: nowrap;
+}
+
+.y-do-raise:before {
+ content: ' \2192 ';
+}
+
+button.y-do-raise:before {
+ content: '';
+}
+
+button.y-do-raise {
+ cursor: pointer;
+}
+
+.y-do--over {
+ color: blue;
+ background-color: #eee;
+ cursor: pointer;
+}
+
+.y-player {
+ border-style: solid;
+ border-width: 1px;
+ border-color: ;
+}
diff --git a/org.yakindu.sct.examples.basic.childfirst/childfirst-player/model.scm b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/model.scm
new file mode 100644
index 00000000..657df6ec
--- /dev/null
+++ b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/model.scm
@@ -0,0 +1,472 @@
+{
+ "cells": [
+ {
+ "position": {
+ "x": 0,
+ "y": 0
+ },
+ "size": {
+ "height": 10,
+ "width": 10
+ },
+ "angle": 0,
+ "type": "Statechart",
+ "id": "c61e5c49-f8f4-4a2b-82f6-647a13ca0ed3",
+ "linkable": false,
+ "z": 1,
+ "attrs": {
+ "name": {
+ "text": "childfirst"
+ },
+ "specification": {
+ "text": "@ChildFirstExecution\n@CycleBased(200)\n\ninterface:\n in event e\n var m : integer = 0\n var n : integer = 0\n var o : integer = 0"
+ }
+ }
+ },
+ {
+ "type": "Region",
+ "position": {
+ "x": 4,
+ "y": 0
+ },
+ "size": {
+ "width": 417,
+ "height": 429
+ },
+ "angle": 0,
+ "fixedRatio": false,
+ "embedable": true,
+ "linkable": false,
+ "id": "f8e0a667-0239-46cb-a603-462a925cc24c",
+ "z": 2,
+ "embeds": [
+ "df33b6e4-03e6-467c-8ac3-3e33369a58c6",
+ "c77f8a92-2e1e-41f3-870c-e4029df5713f",
+ "b67eb288-2475-43e6-9771-037bf624d4d2",
+ "4b7141ed-a359-4fb0-bf64-3e82ecaa43bd",
+ "b2b05fa3-4f82-41b2-9c2e-ce73bbb51e91"
+ ],
+ "attrs": {
+ "priority": {
+ "text": 1
+ },
+ "name": {
+ "fontSize": "9",
+ "text": "main region"
+ }
+ }
+ },
+ {
+ "type": "Entry",
+ "position": {
+ "x": 86,
+ "y": 48
+ },
+ "size": {
+ "width": 15,
+ "height": 15
+ },
+ "angle": 0,
+ "fixedRatio": true,
+ "embedable": false,
+ "linkable": true,
+ "id": "b67eb288-2475-43e6-9771-037bf624d4d2",
+ "parent": "f8e0a667-0239-46cb-a603-462a925cc24c",
+ "z": 3,
+ "embeds": [
+ "1e091169-bc5d-4735-8a77-a4d6f53e8172"
+ ],
+ "attrs": {}
+ },
+ {
+ "type": "NodeLabel",
+ "label": true,
+ "size": {
+ "width": 15,
+ "height": 15
+ },
+ "position": {
+ "x": 86,
+ "y": 63
+ },
+ "id": "1e091169-bc5d-4735-8a77-a4d6f53e8172",
+ "z": 4,
+ "parent": "b67eb288-2475-43e6-9771-037bf624d4d2",
+ "attrs": {
+ "label": {
+ "fontSize": "9",
+ "refX": "50%",
+ "textAnchor": "middle",
+ "refY": "50%",
+ "textVerticalAnchor": "middle"
+ }
+ }
+ },
+ {
+ "type": "State",
+ "position": {
+ "x": 73,
+ "y": 107
+ },
+ "size": {
+ "width": 208,
+ "height": 302
+ },
+ "angle": 0,
+ "fixedRatio": false,
+ "embedable": true,
+ "linkable": true,
+ "id": "4b7141ed-a359-4fb0-bf64-3e82ecaa43bd",
+ "parent": "f8e0a667-0239-46cb-a603-462a925cc24c",
+ "z": 5,
+ "embeds": [
+ "70675d40-8666-4022-ae90-641c029b97bc"
+ ],
+ "attrs": {
+ "name": {
+ "text": "A"
+ },
+ "specification": {
+ "text": "entry / m = 1\ne / n = 1\nexit / o = 1",
+ "fontSize": "9"
+ }
+ }
+ },
+ {
+ "type": "Region",
+ "position": {
+ "x": 74,
+ "y": 168
+ },
+ "size": {
+ "width": 206,
+ "height": 240
+ },
+ "angle": 0,
+ "fixedRatio": false,
+ "embedable": true,
+ "linkable": false,
+ "id": "70675d40-8666-4022-ae90-641c029b97bc",
+ "z": 6,
+ "parent": "4b7141ed-a359-4fb0-bf64-3e82ecaa43bd",
+ "embeds": [
+ "6e0d1ca2-a571-4b99-80d2-9b5af32ec56b",
+ "0a6d3538-3d3c-4a6d-b84e-9d50349db9db",
+ "8e25f8e2-0c5b-4c86-a61b-5f89d171d8cb",
+ "76ca553f-48e8-4f8f-92d1-6257589f9d02",
+ "28a8064c-d355-481a-9cba-67e8e7001341"
+ ],
+ "attrs": {
+ "name": {
+ "fontSize": "9",
+ "text": "r1"
+ }
+ }
+ },
+ {
+ "type": "State",
+ "position": {
+ "x": 134,
+ "y": 217
+ },
+ "size": {
+ "width": 90,
+ "height": 61
+ },
+ "angle": 0,
+ "fixedRatio": false,
+ "embedable": true,
+ "linkable": true,
+ "id": "8e25f8e2-0c5b-4c86-a61b-5f89d171d8cb",
+ "parent": "70675d40-8666-4022-ae90-641c029b97bc",
+ "z": 7,
+ "attrs": {
+ "name": {
+ "text": "B"
+ },
+ "specification": {
+ "text": "entry / m = 2\ne / n = 2\nexit / o = 2",
+ "fontSize": "9"
+ }
+ }
+ },
+ {
+ "type": "Entry",
+ "position": {
+ "x": 92,
+ "y": 240
+ },
+ "size": {
+ "width": 15,
+ "height": 15
+ },
+ "angle": 0,
+ "fixedRatio": true,
+ "embedable": false,
+ "linkable": true,
+ "id": "76ca553f-48e8-4f8f-92d1-6257589f9d02",
+ "parent": "70675d40-8666-4022-ae90-641c029b97bc",
+ "z": 8,
+ "embeds": [
+ "37d23794-1833-4316-805c-d5fc6f9298d8"
+ ],
+ "attrs": {}
+ },
+ {
+ "type": "NodeLabel",
+ "label": true,
+ "size": {
+ "width": 15,
+ "height": 15
+ },
+ "position": {
+ "x": 92,
+ "y": 255
+ },
+ "id": "37d23794-1833-4316-805c-d5fc6f9298d8",
+ "z": 9,
+ "parent": "76ca553f-48e8-4f8f-92d1-6257589f9d02",
+ "attrs": {
+ "label": {
+ "fontSize": "9",
+ "refX": "50%",
+ "textAnchor": "middle",
+ "refY": "50%",
+ "textVerticalAnchor": "middle"
+ }
+ }
+ },
+ {
+ "type": "State",
+ "position": {
+ "x": 131,
+ "y": 320
+ },
+ "size": {
+ "width": 98,
+ "height": 62
+ },
+ "angle": 0,
+ "fixedRatio": false,
+ "embedable": true,
+ "linkable": true,
+ "id": "28a8064c-d355-481a-9cba-67e8e7001341",
+ "parent": "70675d40-8666-4022-ae90-641c029b97bc",
+ "z": 10,
+ "attrs": {
+ "name": {
+ "text": "C"
+ }
+ }
+ },
+ {
+ "type": "State",
+ "position": {
+ "x": 336,
+ "y": 111
+ },
+ "size": {
+ "width": 40,
+ "height": 53
+ },
+ "angle": 0,
+ "fixedRatio": false,
+ "embedable": true,
+ "linkable": true,
+ "id": "b2b05fa3-4f82-41b2-9c2e-ce73bbb51e91",
+ "parent": "f8e0a667-0239-46cb-a603-462a925cc24c",
+ "z": 11,
+ "attrs": {
+ "name": {
+ "text": "D"
+ }
+ }
+ },
+ {
+ "type": "Transition",
+ "source": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "49.21313766596787%",
+ "dy": "50%",
+ "rotate": true
+ }
+ },
+ "id": "b67eb288-2475-43e6-9771-037bf624d4d2"
+ },
+ "target": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "9.799024350911143%",
+ "dy": "50%",
+ "rotate": true
+ }
+ },
+ "id": "4b7141ed-a359-4fb0-bf64-3e82ecaa43bd"
+ },
+ "labels": [
+ {
+ "attrs": {
+ "text": {
+ "fontSize": "9"
+ }
+ },
+ "position": {}
+ },
+ {
+ "attrs": {
+ "label": {
+ "text": "1"
+ }
+ }
+ }
+ ],
+ "id": "c77f8a92-2e1e-41f3-870c-e4029df5713f",
+ "z": 12,
+ "parent": "f8e0a667-0239-46cb-a603-462a925cc24c",
+ "attrs": {}
+ },
+ {
+ "type": "Transition",
+ "source": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "96.6893424036281%",
+ "dy": "42.59958071278826%",
+ "rotate": true
+ }
+ },
+ "id": "76ca553f-48e8-4f8f-92d1-6257589f9d02"
+ },
+ "target": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "3.3408919123204823%",
+ "dy": "48.18022476543974%",
+ "rotate": true
+ }
+ },
+ "id": "8e25f8e2-0c5b-4c86-a61b-5f89d171d8cb"
+ },
+ "labels": [
+ {
+ "attrs": {
+ "text": {
+ "fontSize": "9"
+ }
+ },
+ "position": {}
+ },
+ {
+ "attrs": {
+ "label": {
+ "text": "1"
+ }
+ }
+ }
+ ],
+ "id": "0a6d3538-3d3c-4a6d-b84e-9d50349db9db",
+ "z": 13,
+ "parent": "70675d40-8666-4022-ae90-641c029b97bc",
+ "attrs": {}
+ },
+ {
+ "type": "Transition",
+ "source": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "80.15142718916304%",
+ "dy": "9.597622828774393%",
+ "rotate": true
+ }
+ },
+ "id": "4b7141ed-a359-4fb0-bf64-3e82ecaa43bd"
+ },
+ "target": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "50%",
+ "dy": "47.14117159037484%",
+ "rotate": true
+ }
+ },
+ "id": "b2b05fa3-4f82-41b2-9c2e-ce73bbb51e91"
+ },
+ "labels": [
+ {
+ "attrs": {
+ "text": {
+ "text": "e",
+ "fontSize": "9"
+ }
+ },
+ "position": {}
+ },
+ {
+ "attrs": {
+ "label": {
+ "text": "1"
+ }
+ }
+ }
+ ],
+ "id": "df33b6e4-03e6-467c-8ac3-3e33369a58c6",
+ "z": 14,
+ "parent": "f8e0a667-0239-46cb-a603-462a925cc24c",
+ "attrs": {}
+ },
+ {
+ "type": "Transition",
+ "source": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "58.00491629931748%",
+ "dy": "50%",
+ "rotate": true
+ }
+ },
+ "id": "8e25f8e2-0c5b-4c86-a61b-5f89d171d8cb"
+ },
+ "target": {
+ "anchor": {
+ "name": "topLeft",
+ "args": {
+ "dx": "56.331045581005846%",
+ "dy": "50%",
+ "rotate": true
+ }
+ },
+ "id": "28a8064c-d355-481a-9cba-67e8e7001341"
+ },
+ "labels": [
+ {
+ "attrs": {
+ "text": {
+ "text": "e",
+ "fontSize": "9"
+ }
+ },
+ "position": {}
+ },
+ {
+ "attrs": {
+ "label": {
+ "text": "1"
+ }
+ }
+ }
+ ],
+ "id": "6e0d1ca2-a571-4b99-80d2-9b5af32ec56b",
+ "z": 15,
+ "parent": "70675d40-8666-4022-ae90-641c029b97bc",
+ "attrs": {}
+ }
+ ]
+}
\ No newline at end of file
diff --git a/org.yakindu.sct.examples.basic.childfirst/childfirst-player/player.html b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/player.html
new file mode 100644
index 00000000..a40d8757
--- /dev/null
+++ b/org.yakindu.sct.examples.basic.childfirst/childfirst-player/player.html
@@ -0,0 +1,52 @@
+
+ This example demonstrates the two different execution schemes of composite states: child-first and parent-first execution. For more information, please also refer to chapter Parent-first and child-first execution.
-The parent-first and child-first execution schemes define in which order a composite state and its substates are processed:
-
-
-The question that we want to answer is: What happens if event
-Let's first answer which state gets active. When the event
-
-Now let's take a look at the variable values. When starting the simulation (or when entering the statechart), the outer state A is activated first, independent of the used execution scheme. Afterwards, the entry action of state B sets
-Notice the difference when child-first execution is used:
-
-
-When event This example demonstrates the two different execution schemes of composite states: child-first and parent-first
+ execution. For more information, please also refer to chapter Parent-first
+ and child-first execution.
+ The parent-first and child-first execution schemes define in which order a composite state and its substates are
+ processed:
+
+
+ The question that we want to answer is: What happens if event
+ Let's first answer which state gets active. When the event
+
+ Now let's take a look at the variable values. When starting the simulation (or when entering the statechart), the
+ outer state A is activated first, independent of the used execution scheme. Afterwards, the entry
+ action of state B sets
+ Notice the difference when child-first execution is used:
+
+
+ When event [Pro] Coffee Machine with C++ integration

Overview
Installing the YAKINDU Statechart Tool as a Plugin into Texas
+
Installing the itemis CREATE Statechart Tool as a Plugin into Texas
Instruments Code Composer Studio
Installing the YAKINDU Statechart Tool as a Plugin into Texas
Installing the YAKINDU Statechart Tool as a Plugin into Texas
Installing the YAKINDU Statechart Tool as a Plugin into Texas
needs to be restarted. Afterwards, the installation is finished.
Working with YAKINDU Statecharts Tool in CCS
+ Working with itemis CREATE Statecharts Tool in CCS
Working with YAKINDU Statecharts Tool in CCS
Working with YAKINDU Statecharts Tool Professional Edition
+ Working with itemis CREATE Statecharts Tool Professional Edition
Generate the C-Code
and click on Code Generator Model. Choose a name for the sgen file.
It is good practice to stay with the state machine name. Call it "blinkyStateMachine.sgen"
for example and click on Next. Choose the desired state machine by
- clicking on the checkbox. Ensure that you have chosen the YAKINDU
+ clicking on the checkbox. Ensure that you have chosen the itemis CREATE
SCT C Code Generator and click on Finish.
That’s it - Now you can build and upload the program to your
System and Version Information
System and Version Information
Support for Code Composer Studio Version 6
[Pro] STM32F407 Discovery Board With Deep C Integration
Getting started
required. You can find it HERE.
[Pro] STM32F407 Discovery Board Using Multi State Machines With Deep C Integration
Getting started
required. You can find it HERE.
Parent-first vs. Child-first Execution
- Composite state execution schemes
-
-
-
-Example
-We will use the following example model to explain the two different execution schemes:
-
-e is raised, i.e. which state gets activated, C or D; and what are the values of the statechart variables m, n and o afterwards?
-e is raised, the specified execution scheme defines which of the currently active states', A's or B's, outgoing transitions are evaluated first. In the child-first execution scheme, state B, the active child of the composite state, is processed first. Hence, the transition to state C is evaluated and taken. In contrast to that, in the parent-first execution scheme, the outer state A is processed first and state D gets activated:
-
-m to 2. After event e is raised, the inner state B is exited first, before A is exited which sets the value of o to 1.
-
-e is raised, state B is exited, setting variable o to 2. Furthermore, the outer state A stays active in this run-to-completion step and hence its local reaction is executed, setting n to 1.
-Composite state execution schemes
+
+
+
+ Example
+ We will use the following example model to explain the two different execution schemes:
+ e is raised, i.e. which state gets
+ activated, C or D; and what are the values of the statechart variables
+ m, n and o afterwards?
+ e is raised, the specified execution
+ scheme defines which of the currently active states', A's or B's, outgoing
+ transitions are evaluated first. In the child-first execution scheme, state B, the active child
+ of the composite state, is processed first. Hence, the transition to state C is evaluated and
+ taken. In contrast to that, in the parent-first execution scheme, the outer state A is processed
+ first and state D gets activated:
+ m to 2. After event e is raised, the inner state
+ B is exited first, before A is exited which sets the value of o to
+ 1.
+
+ e is raised, state B is exited, setting variable o to 2.
+ Furthermore, the outer state A stays active in this run-to-completion step and hence its local
+ reaction is executed, setting n to 1.
+