From 3938c0f0a3641cbdc82b4127d2e14e690823eb04 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Wed, 3 Jul 2019 16:43:33 +0200
Subject: [PATCH] Adding support for params in diplo simulation

---
 modeling/DIPLODOCUS/SmartCardProtocol.xml              |  2 +-
 simulators/c++2/src_simulator/TMLTransaction.cpp       |  4 ++--
 simulators/c++2/src_simulator/TMLTransaction.h         |  3 +++
 simulators/c++2/src_simulator/app/TMLCommand.h         |  3 +++
 simulators/c++2/src_simulator/app/TMLSendCommand.cpp   |  4 ++--
 simulators/c++2/src_simulator/app/TMLWaitCommand.cpp   |  2 +-
 .../tomappingsystemc2/MappedSystemCTask.java           | 10 ++++++++--
 7 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/modeling/DIPLODOCUS/SmartCardProtocol.xml b/modeling/DIPLODOCUS/SmartCardProtocol.xml
index bb9d530f19..9ac4be0480 100755
--- a/modeling/DIPLODOCUS/SmartCardProtocol.xml
+++ b/modeling/DIPLODOCUS/SmartCardProtocol.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<TURTLEGMODELING version="1.0beta" ANIMATE_INTERACTIVE_SIMULATION="true" ACTIVATE_PENALTIES="false" UPDATE_INFORMATION_DIPLO_SIM="false" ANIMATE_WITH_INFO_DIPLO_SIM="true" OPEN_DIAG_DIPLO_SIM="false">
+<TURTLEGMODELING version="1.0beta" ANIMATE_INTERACTIVE_SIMULATION="false" ACTIVATE_PENALTIES="false" UPDATE_INFORMATION_DIPLO_SIM="false" ANIMATE_WITH_INFO_DIPLO_SIM="true" OPEN_DIAG_DIPLO_SIM="false">
 
 <Modeling type="TML Component Design" nameTab="AppC" tabs="TML Component Task Diagram$Application$TCPIP$Timer$InterfaceDevice$SmartCard" >
 <TMLComponentTaskDiagramPanel name="TML Component Task Diagram" minX="0" maxX="2724" minY="0" maxY="916" channels="true" events="true" requests="true" zoom="1.0000000000000018" >
diff --git a/simulators/c++2/src_simulator/TMLTransaction.cpp b/simulators/c++2/src_simulator/TMLTransaction.cpp
index c78a08f79f..66f2d39c8a 100755
--- a/simulators/c++2/src_simulator/TMLTransaction.cpp
+++ b/simulators/c++2/src_simulator/TMLTransaction.cpp
@@ -74,7 +74,7 @@ std::string TMLTransaction::toString() const{
   std::ostringstream outp;
   //std::cout << "kernel:transaction: toString" << std::endl;
   //std::cout << "kernel:transaction: toString" << _command->toString() << std::endl;
-  outp << _command->toString() << std::endl << "Transaction runnable:" << _runnableTime << " len:" << _length << " start:" << _startTime << " vLength:" << _virtualLength;
+  outp << _command->toString() << std::endl << "Transaction runnable:" << _runnableTime << " len:" << _length << " start:" << _startTime << " vLength:" << _virtualLength << " params:" << lastParams ;
   if (_channel!=0) outp << " Ch: " << _channel->toShortString();
   return outp.str();
 }
@@ -84,7 +84,7 @@ std::string TMLTransaction::toShortString() const{
   if (_command==0)
     outp << "System State ID: " <<  _virtualLength;
   else{
-    outp << _command->toShortString() << " t:" << _startTime << " l:" << _length << " (vl:"<<  _virtualLength << ")";
+    outp << _command->toShortString() << " t:" << _startTime << " l:" << _length << " (vl:"<<  _virtualLength << ")" << " params:" << lastParams ;
     if (_channel!=0) outp << " Ch: " << _channel->toShortString();
   }
   return outp.str();
diff --git a/simulators/c++2/src_simulator/TMLTransaction.h b/simulators/c++2/src_simulator/TMLTransaction.h
index a4a3df15b4..d5bcadbab9 100644
--- a/simulators/c++2/src_simulator/TMLTransaction.h
+++ b/simulators/c++2/src_simulator/TMLTransaction.h
@@ -260,6 +260,9 @@ class TMLTransaction {
   inline bool getEndState () {return _endState;}
   void toXML(std::ostringstream& glob, int deviceID, std::string deviceName, ID uniqueID) const;
 
+  // Params of the transaction
+  std::string lastParams;
+
 
  protected:
   ///Time when the transaction became runnable
diff --git a/simulators/c++2/src_simulator/app/TMLCommand.h b/simulators/c++2/src_simulator/app/TMLCommand.h
index 7b8c83d9d3..ded37d2ae8 100755
--- a/simulators/c++2/src_simulator/app/TMLCommand.h
+++ b/simulators/c++2/src_simulator/app/TMLCommand.h
@@ -78,6 +78,8 @@ public:
 	///Updates the inner state of the command as well as the state of all dependent objects (channel, bus,...)
 	virtual void execute()=0;
 	///Assigns a value to the pointer referencing the array of next commands
+
+	
 	/**
 	\param iNextCommand Pointer to an array of pointers to the next commands
 	*/
@@ -92,6 +94,7 @@ public:
 	\return Pointer to the current transaction
 	*/
 	inline TMLTransaction* getCurrTransaction() const {return _currTransaction;}
+	
 	///Returns a pointer to the task which could be unblocked by the command
 	/**
 	\param iIndex Index of the task
diff --git a/simulators/c++2/src_simulator/app/TMLSendCommand.cpp b/simulators/c++2/src_simulator/app/TMLSendCommand.cpp
index ad0cd76ce2..e46f427181 100644
--- a/simulators/c++2/src_simulator/app/TMLSendCommand.cpp
+++ b/simulators/c++2/src_simulator/app/TMLSendCommand.cpp
@@ -72,14 +72,14 @@ TMLCommand* TMLSendCommand::prepareNextTransaction(){
 
 std::string TMLSendCommand::toString() const{
 	std::ostringstream outp;
-	outp << "Send in " << TMLCommand::toString() << " " << _channel->toString() << " params=" << lastParams;
+	outp << "Send in " << TMLCommand::toString() << " " << _channel->toString();
 	return outp.str();
 }
 
 std::string TMLSendCommand::toShortString() const{
   //  std::cout << "TMLSendCommand::short string params:" << lastParams.str() << "\n";
 	std::ostringstream outp;
-	outp << _task->toString() << ": Send " << _channel->toString() << " params:" << lastParams;
+	outp << _task->toString() << ": Send " << _channel->toString();
 	return outp.str();
 }
 
diff --git a/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp b/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp
index eb1990c113..f09894e557 100644
--- a/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp
+++ b/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp
@@ -77,6 +77,6 @@ std::string TMLWaitCommand::toString() const{
 
 std::string TMLWaitCommand::toShortString() const{
 	std::ostringstream outp;
-	outp << _task->toString() << ": Wait " << _channel->toShortString() << " params:" << lastParams;
+	outp << _task->toString() << ": Wait " << _channel->toShortString();
 	return outp.str();
 }
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
index 91c188cd34..79c27f52e2 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
@@ -812,8 +812,11 @@ public class MappedSystemCTask {
                             }
                         }
                         functions += " << \")\"" + SCCR;
-                        //functions += "if(" + cmdName + ".myTransaction != NULL) " +  cmdName + ".myTransaction->lastParams  = ss.str()" + SCCR + 
+                        //functions += "if(" + cmdName + ".myTransaction != NULL) " +  cmdName + ".myTransaction->lastParams  = ss.str()" + SCCR +
                         // "\n";
+                        functions += "if(" + cmdName + ".getCurrTransaction() != NULL) " + cmdName + ".getCurrTransaction()->lastParams = ss.str" +
+                                "()" +
+                                SCCR + "\n";
                         functions += "return 0" + SCCR + "\n\n}";
                     }
                     nextCommand += ",(TMLCommand*)" + makeCommands(currElem.getNextElement(i), true, retElement, null);
@@ -944,7 +947,8 @@ public class MappedSystemCTask {
                     }
                 }
                 functions += " << \")\"" + SCCR;
-                //functions += "if(" + cmdName + ".myTransaction != NULL) " + cmdName + ".myTransaction->lastParams = ss.str()" + SCCR + "\n";
+                functions += "if(" + cmdName + ".getCurrTransaction() != NULL) " + cmdName + ".getCurrTransaction()->lastParams = ss.str()" +
+                        SCCR + "\n";
                 functions += "return 0" + SCCR;
 
             } else {
@@ -964,6 +968,8 @@ public class MappedSystemCTask {
                 }
                 functions += " << \")\"" + SCCR;
                 //functions += "if(" + cmdName + ".myTransaction != NULL) " + cmdName + ".myTransaction->lastParams  = ss.str()" + SCCR + "\n";
+                functions += "if(" + cmdName + ".getCurrTransaction() != NULL) " + cmdName + ".getCurrTransaction()->lastParams = ss.str()" +
+                        SCCR + "\n";
                 functions += "return new SizedParameter<ParamType," + nbOfParams + ">(" + concatParams + ")" + SCCR;
             }
             functions += "}\n\n";
-- 
GitLab