blob: 5a42bb43bb0953e595d37c37f4597c7f63db9a97 [file]
RoomModel DynAct8 {
import etrice.api.types.boolean
import etrice.api.types.char
import etrice.api.types.int8
import etrice.api.types.int16
import etrice.api.types.int32
import etrice.api.types.float32
import etrice.api.types.float64
import etrice.api.types.string
LogicalSystem LogSys1 {
SubSystemRef main: Main
}
SubSystemClass Main {
ActorRef main: Appl
LogicalThread defaultThread
}
ActorClass Appl {
Structure {
ActorRef cont: Container
}
Behavior { }
}
ActorClass Container {
Structure {
usercode1 '''import java.io.File;'''
usercode2 '''
private static final String FIRST_OPT_OBJ = "firstOpt.obj";
private static final String SECOND_OPT_OBJ = "secondOpt.obj";'''
conjugated Port op: PStep
conjugated Port opa [*]: PStep
optional ActorRef opt: Optional
optional ActorRef optarr [*]: Optional
Binding op and opt.fct
Binding opa and optarr.fct
}
Behavior {
Operation clean() '''
File f = new File(FIRST_OPT_OBJ);
if (f.exists())
f.delete();'''
StateMachine {
Transition init: initial -> Init { }
Transition tr0: Init -> DestroyAndCreate {
triggers {
<hello: op>
}
action '''System.out.println("received "+transitionData);''' }
Transition tr1: DestroyAndCreate -> DestroyAndRestore {
triggers {
<hello: op>
}
action '''System.out.println("received "+transitionData);''' }
Transition tr2: DestroyAndRestore -> LoadInArray {
triggers {
<hello: op>
}
action '''System.out.println("received "+transitionData);''' }
Transition tr3: LoadInArray -> ReceivedHello {
triggers {
<hello: opa>
}
action '''System.out.println("received "+transitionData);''' }
Transition tr4: ReceivedHello -> Done {
triggers {
<hello: opa>
}
action '''System.out.println("received "+transitionData);''' }
State Init {
entry '''
clean();
FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, "Optional1");
op.step();
op.step();
op.sayHello();'''
}
State DestroyAndCreate {
entry '''
FilePersistor.saveAndDestroy(opt, FIRST_OPT_OBJ);
FilePersistor.createAndLoad(opt, getThread(), SECOND_OPT_OBJ, "Optional2");
op.step();
op.step();
op.sayHello();'''
}
State DestroyAndRestore {
entry '''
FilePersistor.saveAndDestroy(opt, SECOND_OPT_OBJ);
FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, "Optional1");
op.sayHello();'''
}
State Done {
entry '''System.out.println("Done, enter 'quit' to exit");'''
}
State LoadInArray {
entry '''
FilePersistor.createAndLoad(optarr, getThread(), FIRST_OPT_OBJ, "Optional1");
FilePersistor.createAndLoad(optarr, getThread(), SECOND_OPT_OBJ, "Optional2");
opa.sayHello();'''
}
State ReceivedHello
}
}
}
abstract ActorClass Optional {
Interface {
Port fct: PStep
}
Structure { }
Behavior { }
}
ActorClass Optional1 extends Optional {
Structure {
ActorRef ^sub: Sub1
Binding fct and ^sub.fct
}
Behavior { }
}
ActorClass Optional2 extends Optional {
Structure {
ActorRef ^sub: Sub2
Binding fct and ^sub.fct
}
Behavior { }
}
ActorClass Sub1 {
Interface {
Port fct: PStep
}
Structure {
external Port fct
conjugated Port dp: PStep
Attribute ival: int32
Attribute sval: int16
Attribute bval: int8
Attribute some[3]: SomeData
Attribute other: OtherData
Attribute derived: DerivedData
ActorRef deep: DeepSub1
Binding dp and deep.fct
}
Behavior {
StateMachine {
Transition init: initial -> Step1 { }
Transition tr0: Step1 -> Step2 {
triggers {
<step: fct>
}
action '''dp.step();'''
}
Transition tr1: Step2 -> Step3 {
triggers {
<step: fct>
}
action '''dp.step();'''
}
Transition tr2: my tp0 -> my tp0 {
triggers {
<sayHello: fct>
}
action '''fct.hello(getClassName()+", state="+stateStrings[getState()]+", path= "+getInstancePath());'''
}
handler TransitionPoint tp0
State Step1 {
entry '''
ival = 1;
sval = 2;
bval = 3;'''
}
State Step2 {
entry '''ival = 123;'''
}
State Step3 {
subgraph {
Transition init: initial -> StepA { }
Transition tr0: StepA -> StepB {
triggers {
<step: fct>
}
action '''dp.step();'''
}
Transition tr1: StepB -> StepC {
triggers {
<step: fct>
}
action '''dp.step();'''
}
State StepA {
entry '''sval = 456;'''
}
State StepB {
entry '''bval = 13;'''
}
State StepC
}
}
}
}
}
ActorClass DeepSub1 {
Interface {
Port fct: PStep
}
Structure {
external Port fct
}
Behavior {
StateMachine {
Transition init: initial -> Step1 { }
Transition tr0: Step1 -> Step2 {
triggers {
<step: fct>
}
}
Transition tr1: Step2 -> Step3 {
triggers {
<step: fct>
}
}
Transition tr2: Step3 -> Step5 {
triggers {
<step: fct>
}
}
Transition tr3: Step5 -> Step6 {
triggers {
<step: fct>
}
}
Transition tr4: Step6 -> Step7 {
triggers {
<step: fct>
}
}
State Step1
State Step2
State Step3
State Step5
State Step6
State Step7
}
}
}
ActorClass Sub2 {
Interface {
Port fct: PStep
}
Structure {
external Port fct
}
Behavior {
StateMachine {
Transition init: initial -> Ready { }
Transition tr0: Ready -> Ready {
triggers {
<step: fct>
}
}
Transition tr1: Ready -> Ready {
triggers {
<sayHello: fct>
}
action '''fct.hello(getClassName()+", state="+stateStrings[getState()]+", path= "+getInstancePath());'''
}
State Ready
}
}
}
ProtocolClass PStep {
incoming {
Message step()
Message sayHello()
}
outgoing {
Message hello(string)
}
}
DataClass SomeData {
Attribute fval[3]: float32 = "1.0"
Attribute dval: float64 = "123.4"
Attribute str: string = "\"Text\""
}
DataClass OtherData {
Attribute some: SomeData
Attribute bval: boolean = "false"
}
DataClass DerivedData extends OtherData {
Attribute cval[3]: char = "{'a', 'b', 'c'}"
}
}