Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: ec42cc43ed5c56861f8262585cc0ab1ce3e07ae9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
RoomModel PingPong {

	import room.basic.service.timing.* from "../../../org.eclipse.etrice.modellib/models/TimingService.room"

	LogicalSystem System_PingPong {
		SubSystemRef subsystem: SubSystem_PingPong
	}

	SubSystemClass SubSystem_PingPong {
		ActorRef application: PingPongTop
		ActorRef services: ATimingService
		LayerConnection ref application satisfied_by services.timer
		LayerConnection ref application satisfied_by services.timeout
		LogicalThread mrPingThread prio=5 {application.MrPing}
		LogicalThread mrPong1Thread prio=5  {application.MrPong1}
//		LogicalThread mrPong2Thread prio=5 {application.MrPong2}
	}

	// automatically inserted App_SubSystem_PedLightController
	ActorClass PingPongTop {
		Structure {
			ActorRef MrPing: MrPingActor
			ActorRef MrPong1: MrPongActor1
	//		ActorRef MrPong2: MrPongActor2
			Binding MrPing.PingPongPort and MrPong1.PingPongPort
		}
	}

	ActorClass MrPingActor {
		Interface {
			conjugated Port PingPongPort [2]: PingPongProtocol
		}
		Structure {
			external Port PingPongPort 
			SAP timer: PTimeout
		}
		Behavior {
			StateMachine {
				Transition tr0: initial -> waitForTimer {
					action {
						"timer.Start(1000);"
					}
				}
				Transition tr1: waitForTimer -> waitForPong {
					triggers {
						<timeoutTick: timer>
					}
					action {
						"PingPongPort.ping();"
					}
				}
				Transition tr2: waitForPong -> waitForTimer {
					triggers {
						<pong: PingPongPort>
					}
					action {
						"timer.Start(1000);"
					}
				}
				State waitForTimer { }
				State waitForPong { }
			}
		}
	}

	ActorClass MrPongActor1 {
		Interface {
			Port PingPongPort: PingPongProtocol
		}
		Structure {
			external Port PingPongPort
		}
		Behavior {
			StateMachine {
				Transition tr0: initial -> waitForPing { }
				Transition myTrigger: waitForPing -> waitForPing {
					triggers {
						<ping: PingPongPort>
					}
					action {
						"PingPongPort.pong();"
					}
				}
				State waitForPing { }
			}
		}
	}
	
/*	ActorClass MrPongActor2 {
		Interface {
			Port PingPongPort: PingPongProtocol
		}
		Structure {
			external Port PingPongPort
		}
		Behavior {
			StateMachine {
				Transition tr0: initial -> waitForPing { }
				Transition myTrigger: waitForPing -> waitForPing {
					triggers {
						<ping: PingPongPort>
					}
					action {
						"PingPongPort.pong();"
					}
				}
				State waitForPing { }
			}
		}
	}*/
	
	ProtocolClass PingPongProtocol {
		incoming {
			Message ping()
		}
		outgoing {
			Message pong()
		}
	}

}

Back to the top