Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2013-03-27 15:33:11 +0000
committerHenrik Rentz-Reichert2013-03-27 15:33:11 +0000
commite00142a716a028a66822193e8e5368621153e666 (patch)
tree57bd643cccd1bbf65f181643327b7adf7ac9c4b4 /runtime/org.eclipse.etrice.modellib.java
parent0db8cbecb7c36faa2bc796485b8131e601e284cd (diff)
downloadorg.eclipse.etrice-e00142a716a028a66822193e8e5368621153e666.tar.gz
org.eclipse.etrice-e00142a716a028a66822193e8e5368621153e666.tar.xz
org.eclipse.etrice-e00142a716a028a66822193e8e5368621153e666.zip
[modellib.java] bug 404459: [modellib.java] periodic timer only triggers one event
https://bugs.eclipse.org/bugs/show_bug.cgi?id=404459
Diffstat (limited to 'runtime/org.eclipse.etrice.modellib.java')
-rw-r--r--runtime/org.eclipse.etrice.modellib.java/models/TimingService.room25
-rw-r--r--runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/logging/ALogService.java21
-rw-r--r--runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpClient.java33
-rw-r--r--runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpServer.java33
-rw-r--r--runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/ATimingService.java21
-rw-r--r--runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/PTimer.java50
6 files changed, 119 insertions, 64 deletions
diff --git a/runtime/org.eclipse.etrice.modellib.java/models/TimingService.room b/runtime/org.eclipse.etrice.modellib.java/models/TimingService.room
index c175854d1..623d294aa 100644
--- a/runtime/org.eclipse.etrice.modellib.java/models/TimingService.room
+++ b/runtime/org.eclipse.etrice.modellib.java/models/TimingService.room
@@ -75,21 +75,26 @@ RoomModel room.basic.service.timing {
}
usercode2 {
"static protected class FireTimeoutTask extends TimerTask {
-
+
private int time;
private int id;
+ private boolean periodic;
private PTimerPort port;
- public FireTimeoutTask(int time, int id, PTimerPort port) {
+ public FireTimeoutTask(int time, int id, boolean periodic, PTimerPort port) {
this.time = time;
this.id = id;
+ this.periodic = periodic;
this.port = port;
}
@Override
public void run() {
TimerData td = new TimerData(0,id);
- port.internalTimeout(td);
+ if (periodic)
+ port.internalTimer(td);
+ else
+ port.internalTimeout(td);
}
public int getTime() {
@@ -109,6 +114,7 @@ RoomModel room.basic.service.timing {
}
outgoing {
Message timeout()
+ private Message internalTimer(td: TimerData)
private Message internalTimeout(td: TimerData)
}
regular PortClass
@@ -123,7 +129,7 @@ RoomModel room.basic.service.timing {
"
EventWithDataMessage dataMsg = (EventWithDataMessage) msg;
TimerData td = (TimerData)dataMsg.getData();
- task = new FireTimeoutTask(td.time, td.id, this);
+ task = new FireTimeoutTask(td.time, td.id, true, this);
getActor().receiveEvent(this, IN_internalStartTimer, td);"
}
handle
@@ -131,7 +137,7 @@ RoomModel room.basic.service.timing {
"
EventWithDataMessage dataMsg = (EventWithDataMessage) msg;
TimerData td = (TimerData)dataMsg.getData();
- task = new FireTimeoutTask(td.time, td.id, this);
+ task = new FireTimeoutTask(td.time, td.id, false, this);
getActor().receiveEvent(this, IN_internalStartTimeout, td);"
}
handle
@@ -151,6 +157,15 @@ RoomModel room.basic.service.timing {
private boolean active = false;"
}
handle
+ outgoing internalTimer {
+ "//conjugate PortClass handle timer
+ EventWithDataMessage dataMsg = (EventWithDataMessage) msg;
+ TimerData td = (TimerData) dataMsg.getData();
+ if (active && td.getId()==currentId) {
+ getActor().receiveEvent(this, OUT_timeout, null);
+ }"
+ }
+ handle
outgoing internalTimeout {
"//conjugate PortClass handle timeout
EventWithDataMessage dataMsg = (EventWithDataMessage) msg;
diff --git a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/logging/ALogService.java b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/logging/ALogService.java
index 262d6fe2e..2a4c5bf77 100644
--- a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/logging/ALogService.java
+++ b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/logging/ALogService.java
@@ -82,6 +82,7 @@ public class ALogService extends ActorClassBase {
/* state IDs */
public static final int STATE_closed = 2;
public static final int STATE_opened = 3;
+ public static final int STATE_MAX = 4;
/* transition chains */
public static final int CHAIN_TRANS_INITIAL_TO__closed = 1;
@@ -202,7 +203,12 @@ public class ALogService extends ActorClassBase {
* @param state - the state which is entered
* @return - the ID of the final leaf state
*/
- private int enterHistory(int state, boolean skip_entry) {
+ private int enterHistory(int state) {
+ boolean skip_entry = false;
+ if (state >= STATE_MAX) {
+ state = state - STATE_MAX;
+ skip_entry = true;
+ }
while (true) {
switch (state) {
case STATE_closed:
@@ -226,7 +232,7 @@ public class ALogService extends ActorClassBase {
public void executeInitTransition() {
int chain = CHAIN_TRANS_INITIAL_TO__closed;
int next = executeTransitionChain(chain, null, null);
- next = enterHistory(next, false);
+ next = enterHistory(next);
setState(next);
}
@@ -277,14 +283,11 @@ public class ALogService extends ActorClassBase {
}
if (chain != NOT_CAUGHT) {
exitTo(getState(), catching_state);
- int next = executeTransitionChain(chain, ifitem, generic_data);
- boolean skip_entry = false;
- if(next < 0){
- next = -next;
- skip_entry = true;
+ {
+ int next = executeTransitionChain(chain, ifitem, generic_data);
+ next = enterHistory(next);
+ setState(next);
}
- next = enterHistory(next, skip_entry);
- setState(next);
}
}
};
diff --git a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpClient.java b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpClient.java
index c9cb4ab09..ee6a2bd22 100644
--- a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpClient.java
+++ b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpClient.java
@@ -52,16 +52,16 @@ public class ATcpClient extends ActorClassBase {
/*--------------------- end user code ---------------------*/
//--------------------- ports
- protected PTcpPayloadPort PayloadPort = null;
protected PTcpControlPort ControlPort = null;
+ protected PTcpPayloadPort PayloadPort = null;
//--------------------- saps
//--------------------- services
//--------------------- interface item IDs
- public static final int IFITEM_PayloadPort = 2;
public static final int IFITEM_ControlPort = 1;
+ public static final int IFITEM_PayloadPort = 2;
/*--------------------- attributes ---------------------*/
int lastError;
@@ -84,8 +84,8 @@ public class ATcpClient extends ActorClassBase {
this.setLastError(0);
// own ports
- PayloadPort = new PTcpPayloadPort(this, "PayloadPort", IFITEM_PayloadPort);
ControlPort = new PTcpControlPort(this, "ControlPort", IFITEM_ControlPort);
+ PayloadPort = new PTcpPayloadPort(this, "PayloadPort", IFITEM_PayloadPort);
// own saps
@@ -107,12 +107,12 @@ public class ATcpClient extends ActorClassBase {
//--------------------- port getters
- public PTcpPayloadPort getPayloadPort (){
- return this.PayloadPort;
- }
public PTcpControlPort getControlPort (){
return this.ControlPort;
}
+ public PTcpPayloadPort getPayloadPort (){
+ return this.PayloadPort;
+ }
//--------------------- lifecycle functions
public void stop(){
@@ -125,6 +125,7 @@ public class ATcpClient extends ActorClassBase {
public static final int STATE_closed = 2;
public static final int STATE_opened = 3;
public static final int STATE_error = 4;
+ public static final int STATE_MAX = 5;
/* transition chains */
public static final int CHAIN_TRANS_INITIAL_TO__closed = 1;
@@ -274,7 +275,12 @@ public class ATcpClient extends ActorClassBase {
* @param state - the state which is entered
* @return - the ID of the final leaf state
*/
- private int enterHistory(int state, boolean skip_entry) {
+ private int enterHistory(int state) {
+ boolean skip_entry = false;
+ if (state >= STATE_MAX) {
+ state = state - STATE_MAX;
+ skip_entry = true;
+ }
while (true) {
switch (state) {
case STATE_closed:
@@ -301,7 +307,7 @@ public class ATcpClient extends ActorClassBase {
public void executeInitTransition() {
int chain = CHAIN_TRANS_INITIAL_TO__closed;
int next = executeTransitionChain(chain, null, null);
- next = enterHistory(next, false);
+ next = enterHistory(next);
setState(next);
}
@@ -354,14 +360,11 @@ public class ATcpClient extends ActorClassBase {
}
if (chain != NOT_CAUGHT) {
exitTo(getState(), catching_state);
- int next = executeTransitionChain(chain, ifitem, generic_data);
- boolean skip_entry = false;
- if(next < 0){
- next = -next;
- skip_entry = true;
+ {
+ int next = executeTransitionChain(chain, ifitem, generic_data);
+ next = enterHistory(next);
+ setState(next);
}
- next = enterHistory(next, skip_entry);
- setState(next);
}
}
};
diff --git a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpServer.java b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpServer.java
index f6622531e..0b4518efe 100644
--- a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpServer.java
+++ b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/tcp/ATcpServer.java
@@ -88,16 +88,16 @@ public class ATcpServer extends ActorClassBase {
/*--------------------- end user code ---------------------*/
//--------------------- ports
- protected PTcpPayloadPort PayloadPort = null;
protected PTcpControlPort ControlPort = null;
+ protected PTcpPayloadPort PayloadPort = null;
//--------------------- saps
//--------------------- services
//--------------------- interface item IDs
- public static final int IFITEM_PayloadPort = 2;
public static final int IFITEM_ControlPort = 1;
+ public static final int IFITEM_PayloadPort = 2;
/*--------------------- attributes ---------------------*/
int lastError;
@@ -122,8 +122,8 @@ public class ATcpServer extends ActorClassBase {
this.setPayloadPortReplocation(0);
// own ports
- PayloadPort = new PTcpPayloadPort(this, "PayloadPort", IFITEM_PayloadPort);
ControlPort = new PTcpControlPort(this, "ControlPort", IFITEM_ControlPort);
+ PayloadPort = new PTcpPayloadPort(this, "PayloadPort", IFITEM_PayloadPort);
// own saps
@@ -153,12 +153,12 @@ public class ATcpServer extends ActorClassBase {
//--------------------- port getters
- public PTcpPayloadPort getPayloadPort (){
- return this.PayloadPort;
- }
public PTcpControlPort getControlPort (){
return this.ControlPort;
}
+ public PTcpPayloadPort getPayloadPort (){
+ return this.PayloadPort;
+ }
//--------------------- lifecycle functions
public void stop(){
@@ -171,6 +171,7 @@ public class ATcpServer extends ActorClassBase {
public static final int STATE_closed = 2;
public static final int STATE_opened = 3;
public static final int STATE_error = 4;
+ public static final int STATE_MAX = 5;
/* transition chains */
public static final int CHAIN_TRANS_INITIAL_TO__closed = 1;
@@ -315,7 +316,12 @@ public class ATcpServer extends ActorClassBase {
* @param state - the state which is entered
* @return - the ID of the final leaf state
*/
- private int enterHistory(int state, boolean skip_entry) {
+ private int enterHistory(int state) {
+ boolean skip_entry = false;
+ if (state >= STATE_MAX) {
+ state = state - STATE_MAX;
+ skip_entry = true;
+ }
while (true) {
switch (state) {
case STATE_closed:
@@ -342,7 +348,7 @@ public class ATcpServer extends ActorClassBase {
public void executeInitTransition() {
int chain = CHAIN_TRANS_INITIAL_TO__closed;
int next = executeTransitionChain(chain, null, null);
- next = enterHistory(next, false);
+ next = enterHistory(next);
setState(next);
}
@@ -395,14 +401,11 @@ public class ATcpServer extends ActorClassBase {
}
if (chain != NOT_CAUGHT) {
exitTo(getState(), catching_state);
- int next = executeTransitionChain(chain, ifitem, generic_data);
- boolean skip_entry = false;
- if(next < 0){
- next = -next;
- skip_entry = true;
+ {
+ int next = executeTransitionChain(chain, ifitem, generic_data);
+ next = enterHistory(next);
+ setState(next);
}
- next = enterHistory(next, skip_entry);
- setState(next);
}
}
};
diff --git a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/ATimingService.java b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/ATimingService.java
index 3a42d30d4..f0f58ef63 100644
--- a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/ATimingService.java
+++ b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/ATimingService.java
@@ -74,6 +74,7 @@ public class ATimingService extends ActorClassBase {
/* state IDs */
public static final int STATE_Operational = 2;
+ public static final int STATE_MAX = 3;
/* transition chains */
public static final int CHAIN_TRANS_INITIAL_TO__Operational = 1;
@@ -189,7 +190,12 @@ public class ATimingService extends ActorClassBase {
* @param state - the state which is entered
* @return - the ID of the final leaf state
*/
- private int enterHistory(int state, boolean skip_entry) {
+ private int enterHistory(int state) {
+ boolean skip_entry = false;
+ if (state >= STATE_MAX) {
+ state = state - STATE_MAX;
+ skip_entry = true;
+ }
while (true) {
switch (state) {
case STATE_Operational:
@@ -211,7 +217,7 @@ public class ATimingService extends ActorClassBase {
public void executeInitTransition() {
int chain = CHAIN_TRANS_INITIAL_TO__Operational;
int next = executeTransitionChain(chain, null, null);
- next = enterHistory(next, false);
+ next = enterHistory(next);
setState(next);
}
@@ -255,14 +261,11 @@ public class ATimingService extends ActorClassBase {
}
if (chain != NOT_CAUGHT) {
exitTo(getState(), catching_state);
- int next = executeTransitionChain(chain, ifitem, generic_data);
- boolean skip_entry = false;
- if(next < 0){
- next = -next;
- skip_entry = true;
+ {
+ int next = executeTransitionChain(chain, ifitem, generic_data);
+ next = enterHistory(next);
+ setState(next);
}
- next = enterHistory(next, skip_entry);
- setState(next);
}
}
};
diff --git a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/PTimer.java b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/PTimer.java
index 96dafea22..fcd9ffaf0 100644
--- a/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/PTimer.java
+++ b/runtime/org.eclipse.etrice.modellib.java/src-gen/room/basic/service/timing/PTimer.java
@@ -18,29 +18,35 @@ public class PTimer {
// message IDs
public static final int MSG_MIN = 0;
public static final int OUT_timeout = 1;
- public static final int OUT_internalTimeout = 2;
- public static final int IN_kill = 3;
- public static final int IN_internalStartTimer = 4;
- public static final int IN_internalStartTimeout = 5;
- public static final int MSG_MAX = 6;
+ public static final int OUT_internalTimer = 2;
+ public static final int OUT_internalTimeout = 3;
+ public static final int IN_kill = 4;
+ public static final int IN_internalStartTimer = 5;
+ public static final int IN_internalStartTimeout = 6;
+ public static final int MSG_MAX = 7;
/*--------------------- begin user code ---------------------*/
static protected class FireTimeoutTask extends TimerTask {
-
+
private int time;
private int id;
+ private boolean periodic;
private PTimerPort port;
- public FireTimeoutTask(int time, int id, PTimerPort port) {
+ public FireTimeoutTask(int time, int id, boolean periodic, PTimerPort port) {
this.time = time;
this.id = id;
+ this.periodic = periodic;
this.port = port;
}
@Override
public void run() {
TimerData td = new TimerData(0,id);
- port.internalTimeout(td);
+ if (periodic)
+ port.internalTimer(td);
+ else
+ port.internalTimeout(td);
}
public int getTime() {
@@ -54,7 +60,7 @@ public class PTimer {
/*--------------------- end user code ---------------------*/
- private static String messageStrings[] = {"MIN", "timeout","internalTimeout", "kill","internalStartTimer","internalStartTimeout","MAX"};
+ private static String messageStrings[] = {"MIN", "timeout","internalTimer","internalTimeout", "kill","internalStartTimer","internalStartTimeout","MAX"};
public String getMessageString(int msg_id) {
if (msg_id<MSG_MIN || msg_id>MSG_MAX+1){
@@ -95,7 +101,7 @@ public class PTimer {
EventWithDataMessage dataMsg = (EventWithDataMessage) msg;
TimerData td = (TimerData)dataMsg.getData();
- task = new FireTimeoutTask(td.time, td.id, this);
+ task = new FireTimeoutTask(td.time, td.id, true, this);
getActor().receiveEvent(this, IN_internalStartTimer, td);
}
break;
@@ -104,7 +110,7 @@ public class PTimer {
EventWithDataMessage dataMsg = (EventWithDataMessage) msg;
TimerData td = (TimerData)dataMsg.getData();
- task = new FireTimeoutTask(td.time, td.id, this);
+ task = new FireTimeoutTask(td.time, td.id, false, this);
getActor().receiveEvent(this, IN_internalStartTimeout, td);
}
break;
@@ -136,6 +142,13 @@ public class PTimer {
if (getPeerAddress()!=null)
getPeerMsgReceiver().receive(new EventMessage(getPeerAddress(), OUT_timeout));
}
+ private void internalTimer(TimerData td) {
+ if (getPeerAddress()!=null)
+ getPeerMsgReceiver().receive(new EventWithDataMessage(getPeerAddress(), OUT_internalTimer, td.deepCopy()));
+ }
+ public void internalTimer(int time, int id) {
+ internalTimer(new TimerData(time, id));
+ }
private void internalTimeout(TimerData td) {
if (getPeerAddress()!=null)
getPeerMsgReceiver().receive(new EventWithDataMessage(getPeerAddress(), OUT_internalTimeout, td.deepCopy()));
@@ -174,6 +187,11 @@ public class PTimer {
get(i).timeout();
}
}
+ private void internalTimer(TimerData td){
+ for (int i=0; i<getReplication(); ++i) {
+ get(i).internalTimer( td);
+ }
+ }
private void internalTimeout(TimerData td){
for (int i=0; i<getReplication(); ++i) {
get(i).internalTimeout( td);
@@ -204,6 +222,16 @@ public class PTimer {
EventMessage msg = (EventMessage) m;
if (0 < msg.getEvtId() && msg.getEvtId() < MSG_MAX) {
switch (msg.getEvtId()) {
+ case OUT_internalTimer:
+ {
+ //conjugate PortClass handle timer
+ EventWithDataMessage dataMsg = (EventWithDataMessage) msg;
+ TimerData td = (TimerData) dataMsg.getData();
+ if (active && td.getId()==currentId) {
+ getActor().receiveEvent(this, OUT_timeout, null);
+ }
+ }
+ break;
case OUT_internalTimeout:
{
//conjugate PortClass handle timeout

Back to the top