From f1db3a0a260aeffef9bbd4521a7d6b17fe876e97 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Fri, 25 Mar 2022 13:34:33 +0100
Subject: [PATCH] Update sim code generation pour TMLDelay

---
 .../src_simulator/app/TMLDelayCommand.cpp     |  3 ++-
 simulators/c++2/src_simulator/definitions.h   |  2 +-
 .../tomappingsystemc2/MappedSystemCTask.java  | 19 +++++++++++--------
 .../ui/avatarsmd/AvatarSMDSendSignal.java     |  8 ++++----
 4 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
index f7369c8c41..ce22bd8fea 100644
--- a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
+++ b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
@@ -68,7 +68,7 @@ TMLCommand* TMLDelayCommand::prepareNextTransaction(){
 	}
 
 	if (_progress==0){
-	  (_task->*_actionFunc)();
+	  _length = (_task->*_actionFunc)();
 //    _execTimes++;  this will recognize delay transaction one more time so remove it
     		if (_length==0){
     			//std::cout << "ExeciCommand len==0 " << std::endl;
@@ -98,6 +98,7 @@ std::string TMLDelayCommand::toString() const{
         outp << ": IdleDL in "  << TMLCommand::toString();
     return outp.str();
 }
+
 std::string TMLDelayCommand::toShortString() const{
 	std::ostringstream outp;
     if(_isActiveDelay)
diff --git a/simulators/c++2/src_simulator/definitions.h b/simulators/c++2/src_simulator/definitions.h
index d0337f64a1..9492ae163b 100644
--- a/simulators/c++2/src_simulator/definitions.h
+++ b/simulators/c++2/src_simulator/definitions.h
@@ -684,7 +684,7 @@ typedef std::deque<Parameter* > ParamQueue;
 ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand)
 typedef unsigned int (TMLTask::*CondFuncPointer) ();
 ///Type of member function pointer used to indicate a function encapsulating an action (for TMLActionCommand)
-typedef void (TMLTask::*ActionFuncPointer) ();
+typedef int (TMLTask::*ActionFuncPointer) ();
 ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand)
 typedef TMLTime (TMLTask::*LengthFuncPointer) ();
 ///Type of pointer to indicate a function encapsulating a TEPE condition
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
index 83f12fd03d..fdd982c60d 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
@@ -557,19 +557,21 @@ public class MappedSystemCTask {
                 comment = action;
                 action += "\nif (tmpDelayxy==0) tmpDelayxy=1;\n";
                 if (delay.getMinDelay().equals(delay.getMaxDelay())) {
-                    if (!delay.getActiveDelay()){
-                        action += "_endLastTransaction+=tmpDelayxy"; // Take all delay totally idle for x units of time
+                    if (delay.getActiveDelay()){
+                        //action += "_endLastTransaction+=tmpDelayxy;"; // Take all delay totally idle for x units of time
+                        action += "return tmpDelayxy;";
                     } else {
-                        action += "_endLastTransaction+=0"; //consumes cycles
+                        action += "_endLastTransaction+=0;\nreturn 1;"; //consumes cycles
                     }
 
                     delayLen = delay.getMaxDelay() + "*" + masterClockFreq + delay.getMasterClockFactor();
                 } else {
                     action += "TMLTime tmpDelayxx = " + delay.getMinDelay() + "*" + masterClockFreq + delay.getMasterClockFactor() + ";\nif (tmpDelayxx==0) tmpDelayxx=1;\n";
-                    if (!delay.getActiveDelay()){
-                        action += "_endLastTransaction+= myrand(tmpDelayxx,tmpDelayxy)"; // Take all delay totally idle for x units of time
+                    if (delay.getActiveDelay()){
+                        //action += "_endLastTransaction+= myrand(tmpDelayxx,tmpDelayxy)"; // Take all delay totally idle for x units of time
+                        action += "return myrand(tmpDelayxx,tmpDelayxy)";
                     } else {
-                        action += "_endLastTransaction+=0"; //consumes cycles
+                        action += "_endLastTransaction+=0;\nreturn 1;"; //consumes cycles
                     }
                     java.util.Random r = new  java.util.Random();
                     delayLen = String.valueOf(r.nextInt(Integer.valueOf(delay.getMaxDelay())-Integer.valueOf(delay.getMinDelay())) + Integer.valueOf(delay.getMinDelay())) + "*" + masterClockFreq + delay.getMasterClockFactor();
@@ -587,7 +589,8 @@ public class MappedSystemCTask {
                 hcode += "TMLDelayCommand " + cmdName + SCCR;
                 initCommand += "," + cmdName + "(" + idString + ",this,"+ delayLen +",(ActionFuncPointer)&" + reference + "::" + cmdName + "_func, " + getFormattedLiveVarStr(currElem) + ", " + delay.getActiveDelay() + ")" + CR;
                 nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false, retElement, null) + "));\n";
-                functions += "void " + reference + "::" + cmdName + "_func(){\n#ifdef ADD_COMMENTS\naddComment(new Comment(_endLastTransaction,0," + commentNum + "));\n#endif\n" + modifyString(addSemicolonIfNecessary(action)) + CR;
+                functions += "TMLTime " + reference + "::" + cmdName + "_func(){\n#ifdef ADD_COMMENTS\naddComment(new Comment" +
+                        "(_endLastTransaction,0," + commentNum + "));\n#endif\n" + modifyString(addSemicolonIfNecessary(action)) + CR;
                 //functions+="return 0"+ SCCR;
 //                functions += "std::ostringstream ss" + SCCR + "\n";
 //                functions += "if(" + cmdName + ".getCurrTransaction() != NULL) " + cmdName + ".getCurrTransaction()->lastParams = ss.str()" +
@@ -595,7 +598,7 @@ public class MappedSystemCTask {
                 functions += "}" + CR2;
                 commentText += "_comment[" + commentNum + "]=std::string(\"Delay " + comment + "\");\n";
                 commentNum++;
-                functionSig += "void " + cmdName + "_func()" + SCCR;
+                functionSig += "TMLTime " + cmdName + "_func()" + SCCR;
             }
 
         } else if (currElem instanceof TMLExecI) {
diff --git a/src/main/java/ui/avatarsmd/AvatarSMDSendSignal.java b/src/main/java/ui/avatarsmd/AvatarSMDSendSignal.java
index 5d4d11d8de..89957ff7a0 100644
--- a/src/main/java/ui/avatarsmd/AvatarSMDSendSignal.java
+++ b/src/main/java/ui/avatarsmd/AvatarSMDSendSignal.java
@@ -74,10 +74,10 @@ public class AvatarSMDSendSignal extends AvatarSMDBasicCanBeDisabledComponent /*
 
 	private ConcurrentHashMap<String, String> latencyVals;
 
-	protected int latencyX=30;
-	protected int latencyY=25;
-	protected int textWidth=10;
-	protected int textHeight=20;
+	protected int latencyX = 30;
+	protected int latencyY = 25;
+	protected int textWidth = 10;
+	protected int textHeight = 20;
 
     protected int stateOfError = 0; // Not yet checked
 
-- 
GitLab