From 69fd8c17deac9c42407b6e669c7b44133c5f08ab Mon Sep 17 00:00:00 2001
From: Cristian Galperti <cristian.galperti@epfl.ch>
Date: Wed, 19 Jun 2019 14:51:18 +0200
Subject: [PATCH] wageven cfg file on single bus function

---
 code/classes/SCDclass_expcode.m         | 21 +++++----
 code/classes/SCDclass_mdsobjcontainer.m | 57 +++++++++++++++++++++++++
 code/classes/SCDclass_mdswg.m           | 35 ++++++++++++++-
 code/classes/SCDclass_mdswgsigarray1.m  |  1 +
 code/classes/SCDclass_mdswgsigsingle.m  |  1 +
 5 files changed, 104 insertions(+), 11 deletions(-)

diff --git a/code/classes/SCDclass_expcode.m b/code/classes/SCDclass_expcode.m
index a13f581..98a12c6 100644
--- a/code/classes/SCDclass_expcode.m
+++ b/code/classes/SCDclass_expcode.m
@@ -506,7 +506,7 @@ classdef SCDclass_expcode
           end
         end
         
-        function printMARTe2config(obj, shot, varargin)   
+        function printMARTe2parconfig(obj, shot, varargin)   
             p=inputParser;
             % if a model name is given, operations will be performed
             % only on it, otherwise they will be performed on all
@@ -519,16 +519,19 @@ classdef SCDclass_expcode
             else
                 obj.mdscontainer.modeltogenerate=p.Results.model;
             end
-            
-            
             obj.mdscontainer.printMARTe2parconfig(shot);
-            
-            fprintf("+MDSWavegens = {\n");
-            fprintf("   Class = MDSWavegens\n");
-            fprintf("   Shot = %d\n",shot);
-            obj.mdscontainer.printMARTe2wgconfig(shot);
+        end
+        
+        function printMARTe2wgbusconfig(obj, shot, ddname, busname, frequency)
+            fprintf("+MDSWavegen_%s = {\n", busname);
+            fprintf(" Class = MDSWavegen\n");
+            fprintf(" Shot = %d\n",shot);
+            fprintf(" Frequency = %.2f\n",frequency);
+            dim=obj.mdscontainer.printMARTe2wgbusconfig(shot, ddname, busname);       
+            fprintf(" Signals = {\n");
+            fprintf("   wavegen_%s = { Type = float32 NumberOfElements = %d }\n", busname, dim ); 
+            fprintf(" }\n");
             fprintf("}\n");
-            
         end
         
     end
diff --git a/code/classes/SCDclass_mdsobjcontainer.m b/code/classes/SCDclass_mdsobjcontainer.m
index eecc2ce..94ae621 100644
--- a/code/classes/SCDclass_mdsobjcontainer.m
+++ b/code/classes/SCDclass_mdsobjcontainer.m
@@ -305,5 +305,62 @@ classdef SCDclass_mdsobjcontainer
             end
           end
         end
+                
+        function overalldim = printMARTe2wgbusconfig(obj, shot, ddname, busname)
+            dd=SCDconf_getdatadict(ddname);
+            bus=dd.getEntry(busname).getValue;
+            nelems=numel(bus.Elements);
+            server='';
+            tree='';
+            dimension=0;
+            
+            for elem=1:nelems
+                signame=bus.Elements(elem).Name;
+                found=false;
+                for wgs=1:obj.numwavegens
+                    %signame
+                    %obj.mdswavegens(wgs).gettarget
+                    if(strcmp(obj.mdswavegens(wgs).gettarget,signame))
+                        found=true;
+                        break;
+                    end
+                end
+                if(~found)
+                    error('SCDclass_mdsobjcontainer:wgnotfound','Signal %s not found in configured wavegens objects', signame);
+                else
+                    actserver=obj.mdswavegens(wgs).getMDSserver;
+                    acttree=obj.mdswavegens(wgs).getMDStree;
+                    
+                    if(~strcmp(actserver,server) || ~strcmp(acttree,tree))
+                        if(~strcmp(server,'') || ~strcmp(tree,''))
+                            error('SCDclass_mdsobjcontainer:multipleconnections','multiple MDS+ connections/trees not supported within the same wavegen generator');
+                        else
+                            server=actserver;
+                            tree=acttree;
+                            fprintf(' Server=%s\n', server);
+                            fprintf(' Tree=%s\n', tree)
+                        end
+                    end
+                    
+                    entrystring=obj.mdswavegens(wgs).genMARTe2entry(shot);
+                    fprintf(' %s\n', entrystring);
+                    dimension=dimension+bus.Elements(elem).Dimensions;
+                    
+                end
+            end
+        
+            overalldim=dimension;
+        
+        end
+        
+        function iorder = getWavegensServerTreeOrder(obj)
+          % find server-tree order of wavegens
+          mdsservertree = cell(numel(obj.mdswavegens),2);
+          for ii=1:numel(obj.mdswavegens)
+            mdsservertree{ii,1} = obj.mdswavegens(ii).getMDSserver;
+            mdsservertree{ii,2} = obj.mdswavegens(ii).getMDStree;
+          end
+          [~,iorder] = sortrows(mdsservertree);
+        end
     end
 end
diff --git a/code/classes/SCDclass_mdswg.m b/code/classes/SCDclass_mdswg.m
index 6ea9b0a..ab92770 100644
--- a/code/classes/SCDclass_mdswg.m
+++ b/code/classes/SCDclass_mdswg.m
@@ -16,6 +16,7 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
         modelname           % name of the Simulink model using the parameter
         getcommand          % full command for getting the value (callablSCDalgo_f4ealgoe by matlab eval)
         classname           % class name for logging
+        marteclassname      % class name for generating MARTe2 cfg file
         cparser             % constructor parameters parser
         
         timebasestart       % timebase start time variable
@@ -100,14 +101,41 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
 
         function entrystring = genMARTe2entrycommon(obj, shot)
             %entrystring = ['+' obj.wavegentarget ' = { Class=' obj.classname ' Path=' obj.tdiexpr ];
-            entrystring = sprintf('+%-50s = { Class=%-30s Path=%-40s',obj.wavegentarget,obj.classname,obj.tdiexpr);
-
+            entrystring = sprintf('+%-50s = { Class=%-30s Path=%-40s',obj.wavegentarget,obj.marteclassname,obj.genMARTe2MDStdiexpression);
         end
         
         function name=getmodelname(obj)
             name=obj.modelname;
         end
         
+        function [mdsserver] = getMDSserver(obj)
+          mdsserver = obj.mdsserver;
+        end
+        
+        function [mdstree] = getMDStree(obj)
+          mdstree = obj.mdstree;
+        end
+        
+        function str=gettarget(obj)
+           str = obj.wavegentarget; 
+        end
+       
+        function str = genMARTe2MDStdiexpression(obj)
+            % Duplicate first backslash
+%             if(obj.tdiexprused(1)=='\' && not(obj.tdiexprused(2)=='\'))
+%                 martetdi=['\' obj.tdiexprused];
+%             else
+%                 martetdi=obj.tdiexprused;
+%             end
+            % Duplicate backslashes
+            %martetdi=strrep(obj.tdiexpr, '\', '\\');
+            martetdi=obj.tdiexpr;
+            %substitute every " with '
+            martetdi=strrep(martetdi, '"', '''');
+            %put double string quota
+            martetdi=['"' martetdi '"'];
+            str=martetdi;
+        end
     end
     
     
@@ -127,6 +155,9 @@ classdef SCDclass_mdswg < matlab.mixin.Heterogeneous
         
         % Generate C++ code 
         %gencode(obj)
+       
+        % Generate MARTe2 configuration entry
+        entrystring = genMARTe2entry(obj, shot)
         
         % Prints the parameter info summary
         printinfo(obj)
diff --git a/code/classes/SCDclass_mdswgsigarray1.m b/code/classes/SCDclass_mdswgsigarray1.m
index ca8db74..1d58fc6 100644
--- a/code/classes/SCDclass_mdswgsigarray1.m
+++ b/code/classes/SCDclass_mdswgsigarray1.m
@@ -38,6 +38,7 @@ classdef SCDclass_mdswgsigarray1 < SCDclass_mdswg
             obj.deststopidx=dstinterval(end);
 
             obj.classname=mfilename;        
+            obj.marteclassname='MDSWgSigArray1';
         end
        
     end
diff --git a/code/classes/SCDclass_mdswgsigsingle.m b/code/classes/SCDclass_mdswgsigsingle.m
index dd50710..d204baa 100644
--- a/code/classes/SCDclass_mdswgsigsingle.m
+++ b/code/classes/SCDclass_mdswgsigsingle.m
@@ -25,6 +25,7 @@ classdef SCDclass_mdswgsigsingle < SCDclass_mdswg
             obj.destidx=obj.cparser.Results.destindex;
             
             obj.classname=mfilename;
+            obj.marteclassname='MDSWgSigSingle';
         end
        
     end
-- 
GitLab