| 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'}" |
| } |
| } |