From 6523848fb54b88a7090350bf9087e9b3eda4933d Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Tue, 25 Jun 2024 17:17:57 +0200
Subject: [PATCH] Update on generation of the number of samples in R/W when
 dealing with sec. pat. in diplodocus

---
 .../tomappingsystemc2/MappedSystemCTask.java  | 33 ++++++++++++++-----
 .../ui/ActivityDiagram2TMLTranslator.java     |  6 ++--
 src/main/java/ui/MainGUI.java                 |  3 ++
 3 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
index 1069857f6a..dc25711b72 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
@@ -699,18 +699,26 @@ public class MappedSystemCTask {
             cmdName = "_read" + currElem.getID();
             hcode += "TMLReadCommand " + cmdName + SCCR;
             TMLReadChannel rCommand = (TMLReadChannel) currElem;
-            if (isIntValue(rCommand.getNbOfSamples()))
+            String nbOfSamples = rCommand.getNbOfSamples();
+            if (rCommand.getSecurityPattern() != null) {
+                nbOfSamples = "( " + nbOfSamples + ") + " + rCommand.getSecurityPattern().getOverhead();
+            }
+            if (isIntValue(nbOfSamples))
                 //initCommand+= "," + cmdName + "("+currElem.getID()+",this,0," + rCommand.getChannel(0).getExtendedName() + "," + rCommand.getChannel(0).getSize() + "*" + rCommand.getNbOfSamples() + ")"+CR;
-                initCommand += "," + cmdName + "(" + currElem.getID() + ",this,0," + rCommand.getChannel(0).getExtendedName() + "," + getFormattedLiveVarStr(currElem) + "," + rCommand.getNbOfSamples() + ")" + CR;
+                initCommand += "," + cmdName + "(" + currElem.getID() + ",this,0," + rCommand.getChannel(0).getExtendedName() + ","
+                        + getFormattedLiveVarStr(currElem) + "," + nbOfSamples + ")" + CR;
 
             else
                 //initCommand+= "," + cmdName + "("+currElem.getID()+",this," + makeCommandLenFunc(cmdName, rCommand.getChannel(0).getSize() + "*(" + rCommand.getNbOfSamples()+")",null) + "," + rCommand.getChannel(0).getExtendedName() + ")"+CR;
-                initCommand += "," + cmdName + "(" + currElem.getID() + ",this," + makeCommandLenFunc(cmdName, rCommand.getNbOfSamples(), null) + "," + rCommand.getChannel(0).getExtendedName() + "," + getFormattedLiveVarStr(currElem) + ")" + CR;
-            nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false, retElement, null) + "))" + SCCR;
+                initCommand += "," + cmdName + "(" + currElem.getID() + ",this," + makeCommandLenFunc(cmdName, nbOfSamples,
+                        null) + "," + rCommand.getChannel(0).getExtendedName() + "," + getFormattedLiveVarStr(currElem) + ")" + CR;
+            nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false, retElement,
+                    null) + "))" + SCCR;
 
         } else if (currElem instanceof TMLWriteChannel) {
             String channels;
             TMLWriteChannel wCommand = (TMLWriteChannel) currElem;
+            String nbOfSamples = wCommand.getNbOfSamples();
             if (wCommand.getNbOfChannels() > 1) {
                 if (ChannelMappedOnSameHW(wCommand)) {
                     if (debug) TraceManager.addDev("Checking WriteMult with multicast\n");
@@ -728,7 +736,11 @@ public class MappedSystemCTask {
                         TMLWriteChannel newWrite = new TMLWriteChannel("WriteMult", null);
                         if (i == 0) firstWrite = newWrite;
                         newWrite.addChannel(wCommand.getChannel(i));
-                        newWrite.setNbOfSamples(wCommand.getNbOfSamples());
+
+                        if (wCommand.getSecurityPattern() != null) {
+                            nbOfSamples = "( " + nbOfSamples + ") + " + wCommand.getSecurityPattern().getOverhead();
+                        }
+                        newWrite.setNbOfSamples(nbOfSamples);
                         if (prevWrite != null) prevWrite.addNext(newWrite);
                         prevWrite = newWrite;
                     }
@@ -740,11 +752,14 @@ public class MappedSystemCTask {
                 hcode += "TMLWriteCommand " + cmdName + SCCR;
                 channels = wCommand.getChannel(0).getExtendedName();
             }
-            if (isIntValue(wCommand.getNbOfSamples()))
-                initCommand += "," + cmdName + "(" + currElem.getID() + ",this,0," + channels + "," + getFormattedLiveVarStr(currElem) + "," + wCommand.getNbOfSamples() + ")" + CR;
+            if (isIntValue(nbOfSamples))
+                initCommand += "," + cmdName + "(" + currElem.getID() + ",this,0," + channels + "," + getFormattedLiveVarStr(currElem) + "," + nbOfSamples +
+                        ")" + CR;
             else
-                initCommand += "," + cmdName + "(" + currElem.getID() + ",this," + makeCommandLenFunc(cmdName, wCommand.getNbOfSamples(), null) + "," + channels + "," + getFormattedLiveVarStr(currElem) + ")" + CR;
-            nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false, retElement, null) + "))" + SCCR;
+                initCommand += "," + cmdName + "(" + currElem.getID() + ",this," + makeCommandLenFunc(cmdName, nbOfSamples, null) + ","
+                        + channels + "," + getFormattedLiveVarStr(currElem) + ")" + CR;
+            nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false,
+                    retElement, null) + "))" + SCCR;
 
         } else if (currElem instanceof TMLSendEvent) {
             //if (debug) TraceManager.addDev("Checking Send\n");
diff --git a/src/main/java/ui/ActivityDiagram2TMLTranslator.java b/src/main/java/ui/ActivityDiagram2TMLTranslator.java
index c1dee03406..c5531f9112 100644
--- a/src/main/java/ui/ActivityDiagram2TMLTranslator.java
+++ b/src/main/java/ui/ActivityDiagram2TMLTranslator.java
@@ -399,7 +399,8 @@ public class ActivityDiagram2TMLTranslator {
                                 //cur = cur+ add;
 
                                 //tmlreadchannel.setNbOfSamples(Integer.toString(cur));
-                                tmlreadchannel.setNbOfSamples(curS + " + " + addS);
+                                //tmlreadchannel.setNbOfSamples(curS + " + " + addS);
+                                tmlreadchannel.setNbOfSamples(curS);
                             } else if (!((TMLADReadChannel) tgc).getSecurityContext().isEmpty()) {
                                 //Throw error for missing security pattern
                                 UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Security Pattern " + ((TMLADReadChannel) tgc).getSecurityContext() + " not found");
@@ -800,7 +801,8 @@ public class ActivityDiagram2TMLTranslator {
                                 //cur = cur + add;
                                 //tmlwritechannel.setNbOfSamples(Integer.toString(cur));
                                 //tmlwritechannel.setNbOfSamples(att.getName());
-                                tmlwritechannel.setNbOfSamples(curS + " + " + addS);
+                                //tmlwritechannel.setNbOfSamples(curS + " + " + addS);
+                                tmlwritechannel.setNbOfSamples(curS);
                             } else if (!((TMLADWriteChannel) tgc).getSecurityContext().isEmpty()) {
                                 //Throw error for missing security pattern
                                 UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR,
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index b55c6ff311..983fe20948 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -1910,6 +1910,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
     }
 
 
+
     public void actionDrawAvatar(boolean useOriginalValuesFirst) {
         AvatarSpecification as = gtm.getAvatarSpecification();
         if (as != null) {
@@ -3615,6 +3616,8 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
         }
     }
 
+
+
     public void makeLotosFile() {
         String s = file.getAbsolutePath();
         int l = s.length();
-- 
GitLab