From 1dc1ac83d84691eef3547852e922b5e12c63d9ba Mon Sep 17 00:00:00 2001
From: Andrea Enrici <andrea.enrici@nokia.com>
Date: Thu, 16 Apr 2015 14:07:14 +0000
Subject: [PATCH] completed the correction of errors. It compiles. But CP
 routines have been commented.

---
 .../ctranslator/AdaifOperationMEC.java        |  4 +-
 src/tmltranslator/ctranslator/CwaMEC.java     |  3 +-
 src/tmltranslator/ctranslator/CwlMEC.java     |  3 +-
 src/tmltranslator/ctranslator/CwmMEC.java     |  3 +-
 src/tmltranslator/ctranslator/CwpMEC.java     |  3 +-
 src/tmltranslator/ctranslator/FftMEC.java     |  3 +-
 .../ctranslator/IntlOperationMEC.java         |  7 ++--
 .../ctranslator/MappOperationMEC.java         |  9 ++--
 src/tmltranslator/ctranslator/SumMEC.java     |  3 +-
 .../ctranslator/TMLCCodeGeneration.java       | 42 +++++++++++++------
 10 files changed, 53 insertions(+), 27 deletions(-)

diff --git a/src/tmltranslator/ctranslator/AdaifOperationMEC.java b/src/tmltranslator/ctranslator/AdaifOperationMEC.java
index 6c408ee3a7..de3433c2e3 100644
--- a/src/tmltranslator/ctranslator/AdaifOperationMEC.java
+++ b/src/tmltranslator/ctranslator/AdaifOperationMEC.java
@@ -54,7 +54,9 @@ public class AdaifOperationMEC extends OperationMEC	{
 
 	public AdaifOperationMEC( String ctxName, String ID0, String OD0 )	{
 		name = "AdaifOperationMEC";
-		exec_code = "adaif_do(&" + ctxName + ");" + CR;
+		exec_code = TAB + "int status;" + CR + TAB +
+								"adaif_wait(&" + ctxName + ");" + CR + TAB +
+								"status = adaif_wait(&" + ctxName + ");" + CR;
 	
 		init_code =
 			"void init_" + ctxName.split("_ctx")[0] + "( void )\t{" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwaMEC.java b/src/tmltranslator/ctranslator/CwaMEC.java
index 1f9869bf77..77ba345ea1 100644
--- a/src/tmltranslator/ctranslator/CwaMEC.java
+++ b/src/tmltranslator/ctranslator/CwaMEC.java
@@ -55,6 +55,7 @@ public class CwaMEC extends FepOperationMEC	{
 
 		name = "Component Wise Addition MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_l(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -66,7 +67,7 @@ public class CwaMEC extends FepOperationMEC	{
 			"fep_set_bz(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&"+ _ctxName + ");" + CR;
+			"status = fep_do(&"+ _ctxName + ");" + CR;
 		
 		init_code ="/***** INIT "+ _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_"+ _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwlMEC.java b/src/tmltranslator/ctranslator/CwlMEC.java
index 8a72180968..7a3e32185c 100755
--- a/src/tmltranslator/ctranslator/CwlMEC.java
+++ b/src/tmltranslator/ctranslator/CwlMEC.java
@@ -55,6 +55,7 @@ public class CwlMEC extends FepOperationMEC	{
 
 		name = "Component Wise Lookup MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -63,7 +64,7 @@ public class CwlMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 	
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwmMEC.java b/src/tmltranslator/ctranslator/CwmMEC.java
index ca5a9b4365..d131740c11 100755
--- a/src/tmltranslator/ctranslator/CwmMEC.java
+++ b/src/tmltranslator/ctranslator/CwmMEC.java
@@ -55,6 +55,7 @@ public class CwmMEC extends FepOperationMEC	{
 
 		name = "Component Wise Multiplication MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR +
@@ -63,7 +64,7 @@ public class CwmMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR +
 			"/*start execution*/" + CR +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 	
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwpMEC.java b/src/tmltranslator/ctranslator/CwpMEC.java
index 14147a0c6a..057f0b534a 100755
--- a/src/tmltranslator/ctranslator/CwpMEC.java
+++ b/src/tmltranslator/ctranslator/CwpMEC.java
@@ -55,6 +55,7 @@ public class CwpMEC extends FepOperationMEC	{
 
 		name = "Component Wise Product MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -63,7 +64,7 @@ public class CwpMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 	
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/FftMEC.java b/src/tmltranslator/ctranslator/FftMEC.java
index 6d517ee9a2..88f8daee9b 100644
--- a/src/tmltranslator/ctranslator/FftMEC.java
+++ b/src/tmltranslator/ctranslator/FftMEC.java
@@ -54,6 +54,7 @@ public class FftMEC extends FepOperationMEC	{
 	public FftMEC( String _ctxName, String inSignalName, String outSignalName )	{
 		name = "Fast Fourier Transform MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -62,7 +63,7 @@ public class FftMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 		
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/IntlOperationMEC.java b/src/tmltranslator/ctranslator/IntlOperationMEC.java
index 869907379d..948d63b484 100644
--- a/src/tmltranslator/ctranslator/IntlOperationMEC.java
+++ b/src/tmltranslator/ctranslator/IntlOperationMEC.java
@@ -53,9 +53,10 @@ public class IntlOperationMEC extends OperationMEC	{
 
 	public IntlOperationMEC( String ctxName, String ID0, String OD0 )	{
 		name = "InterleaverOperationMEC";
-		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
-			"/*start execution*/" + CR + TAB +
-			"intl_do(&" + ctxName + ");" + CR;
+		exec_code = TAB + "/*start execution*/" + CR + TAB +
+								"int status;" + CR + TAB +
+								"intl_start(&" + ctxName + ");" + CR + TAB +
+								"status = intl_wait(&" + ctxName + ");" + CR;
 		
 		init_code ="/***** INIT " + ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/MappOperationMEC.java b/src/tmltranslator/ctranslator/MappOperationMEC.java
index 595a50df21..df1aab4c35 100644
--- a/src/tmltranslator/ctranslator/MappOperationMEC.java
+++ b/src/tmltranslator/ctranslator/MappOperationMEC.java
@@ -47,16 +47,15 @@
 package tmltranslator.ctranslator;;
 
 import java.util.*;
-//import Ctranslator.*;
 
 public class MappOperationMEC extends OperationMEC	{
 
-
 	public MappOperationMEC( String ctxName, String ID0, String OD0 )	{
 		name = "MapperOperationMEC";
-		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
-			"/*start execution*/" + CR + TAB +
-			"mapper_do(&" + ctxName + ");" + CR;
+		exec_code = TAB + CR + TAB + "/*start execution*/" + CR + TAB +
+								"int status;" + CR + TAB +
+								"mapper_start(&" + ctxName + ");" + CR + TAB +
+								"status = mapper_wait(&" + ctxName + ");" + CR;
 		
 		init_code ="/***** INIT " + ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/SumMEC.java b/src/tmltranslator/ctranslator/SumMEC.java
index 225c69a030..ddf2f2df1c 100644
--- a/src/tmltranslator/ctranslator/SumMEC.java
+++ b/src/tmltranslator/ctranslator/SumMEC.java
@@ -53,9 +53,10 @@ public class SumMEC extends FepOperationMEC	{
 	public SumMEC( String _ctxName, String inSignalName, String outSignalName )	{
 		name = "Sum MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 		
 		init_code = 
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
index fb895e6207..e1073c4fb9 100755
--- a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
+++ b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
@@ -696,10 +696,10 @@ public class TMLCCodeGeneration	{
 							"#include <embb/mapper.h>" + CR +
 							"#include <embb/adaif.h>" + CR +
 							"#include <embb/memory.h>" + CR2 +
-							"char fep_mss[0x10000];" + CR +
-							"char adaif_mss[0x10000];" + CR +
-							"char intl_mss[0x10000];" + CR +
-							"char mapper_mss[0x10000];" + CR2;
+							"extern char fep_mss[];" + CR +
+							"extern char adaif_mss[];" + CR +
+							"extern char intl_mss[];" + CR +
+							"extern char mapper_mss[];" + CR2;
 		return s;
 	}
 
@@ -809,6 +809,14 @@ public class TMLCCodeGeneration	{
 		for( Signal sig: signalsList )	{
 			s.append( sig.getName() + "," + CR );
 		}
+		s.append( postexList.get(0).getName() + "," + CR );
+		/*for( Operation op: operationsList )	{
+			if( op.isPostex() )	{
+				TraceManager.addDev( "OPERATION: " + op.getName() );
+				TraceManager.addDev( "\t\tinSignal = " + op.getInSignals().get(0).getName() );
+			}
+		}
+		System.exit(0);*/
 		s.append( "NUM_SIGS };" + CR2 + "enum ops_enu	{" + CR );
 
 		for( Operation op: operationsList )	{
@@ -908,18 +916,20 @@ public class TMLCCodeGeneration	{
 
 		for( Operation op: operationsList )	{
 			if( op.getType() == Operation.SDR )	{
-				programString.append( generateSDROperation( op, op.getSDRTasks().get( Operation.X_TASK ), op.getSDRTasks().get( Operation.F_TASK ) ) );
+				programString.append( generateSDROperation( op ) );
 			}
 		}
 	}
 
-	private String generateSDROperation( Operation op, TMLTask xTask, TMLTask fTask )	{
+	private String generateSDROperation( Operation op )	{
 		
 		//For SDR operations the xTask is used to retrieve the mapped unit
 		String signalOutName = "";
 		String signalInName = "";
-		String ctxName = op.getContextName();
 		StringBuffer code = new StringBuffer();
+		String ctxName = op.getContextName();
+		TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );	
+		TMLTask fTask =	op.getSDRTasks().get( Operation.F_TASK );
 
 		OperationMEC xTaskOperation = xTask.getOperationMEC();
 
@@ -930,7 +940,10 @@ public class TMLCCodeGeneration	{
 			signalInName += sig.getName();
 		}
 
-		code.append( "int op_" + op.getName() + "()\t{" + CR + getTaskAttributes( fTask ) + CR );
+		code.append( "int op_" + op.getName() + "()\t{" + CR /*+ getTaskAttributes( fTask )*/ + CR );
+		if( op.isPrex() )	{
+			code.append( TAB + "int status = 0;" + CR );
+		}
 
 		//Mark input signals as false
 		for( Signal sig: op.getInSignals() )	{
@@ -1067,6 +1080,7 @@ public class TMLCCodeGeneration	{
 			attributes = tmlcplib.getAssignedAttributes();
 			String name = tmlcplib.getName().split("::")[0];
 			programString.append( "int op_" + name + "()\t{" + CR );
+			programString.append( TAB + "int status = 0;" + CR );
 			
 			for( Signal sig: dt.getInSignals() )	{
 				programString.append( TAB + "sig[ " + sig.getName() + " ].f = false;" + CR );
@@ -1075,14 +1089,14 @@ public class TMLCCodeGeneration	{
 			TraceManager.addDev( "CPMEC: " + cpMEC + "\n" + attributes.toString() );
 			if( cpMEC instanceof CpuMemoryCopyMEC )	{
 				CpuMemoryCopyMEC mec = new CpuMemoryCopyMEC( ctxName, "", "", "", "" );
-				programString.append( mec.getExecCode() );
+				programString.append( "/*" + mec.getExecCode() + "*/" );
 			}
 			if( cpMEC instanceof SingleDmaMEC )	{
 				destinationAddress = attributes.get( SingleDmaMEC.destinationAddressIndex );
 				sourceAddress = attributes.get( SingleDmaMEC.sourceAddressIndex );
 				counter = attributes.get( SingleDmaMEC.counterIndex );
 				SingleDmaMEC mec = new SingleDmaMEC( ctxName, destinationAddress, sourceAddress, counter );
-				programString.append( mec.getExecCode() );
+				programString.append( "/*" + mec.getExecCode() + "*/" );
 			}
 			if( cpMEC instanceof DoubleDmaMEC )	{
 				destinationAddress1 = attributes.get( DoubleDmaMEC.destinationAddress1Index );
@@ -1092,7 +1106,7 @@ public class TMLCCodeGeneration	{
 				sourceAddress2 = attributes.get( DoubleDmaMEC.sourceAddress2Index );
 				counter2 = attributes.get( DoubleDmaMEC.counter2Index );
 				DoubleDmaMEC mec = new DoubleDmaMEC( ctxName, destinationAddress1, sourceAddress1, counter1, destinationAddress2, sourceAddress2, counter2 );
-				programString.append( mec.getExecCode() );
+				programString.append( "/*" + mec.getExecCode() + "*/" );
 			}
 
 			for( Signal sig: dt.getOutSignals() )	{
@@ -1171,6 +1185,10 @@ public class TMLCCodeGeneration	{
 		String inSignalName, outSignalName;
 		initFileString.append( "#include \"" + applicationName + ".h\"" + CR2 );
 		initFileString.append( "/**** variables ****/" + CR2 );		
+		initFileString.append( "char fep_mss[0x10000];" + CR );
+		initFileString.append( "char adaif_mss[0x10000];" + CR );
+		initFileString.append( "char intl_mss[0x10000];" + CR );
+		initFileString.append( "char mapper_mss[0x10000];" + CR );
 		initFileString.append( buffersAndInstructionsDeclaration( false ) + CR2 );
 		generateCodeToInitializeBuffers();
 		generateCodeToInitializeSignals();
@@ -1245,7 +1263,7 @@ public class TMLCCodeGeneration	{
 
 		generateInitRoutinesForCPs();
 
-		initFileString.append( "/**** init contexts ****/" + CR + "void init_operations_context(void)\t{" + CR );
+		initFileString.append( "/**** init contexts ****/" + CR + "void init_operations(void)\t{" + CR );
 		for( Operation op: operationsList )	{
 			if( op.getType() == Operation.SDR )	{
 				TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );
-- 
GitLab