diff --git a/RTFParallella/docs/BTF Trace Framework on RTFParallella.pdf b/RTFParallella/docs/BTF Trace Framework on RTFParallella.pdf
new file mode 100644
index 0000000..5f72d9f
--- /dev/null
+++ b/RTFParallella/docs/BTF Trace Framework on RTFParallella.pdf
Binary files differ
diff --git a/RTFParallella/port_patch.patch b/RTFParallella/port_patch.patch
index 95e1b4b..e81e5b8 100644
--- a/RTFParallella/port_patch.patch
+++ b/RTFParallella/port_patch.patch
@@ -351,8 +351,8 @@
 > 	switch (interrupt_mode) {
 > 	case E_TIMER0_INT:
 > 		vSetupTimer();
-> 		updateTick();
 > 		xTaskIncrementTick();
+>               updateTick();
 > 		vTaskSwitchContext();
 > 		break;
 > 	case E_SW_EXCEPTION: //triggered extrenally for error injection. Must be that high prority
diff --git a/RTFParallella/src/parallella/AmaltheaConverter.c b/RTFParallella/src/parallella/AmaltheaConverter.c
index fa880e2..d894ac6 100755
--- a/RTFParallella/src/parallella/AmaltheaConverter.c
+++ b/RTFParallella/src/parallella/AmaltheaConverter.c
@@ -11,66 +11,99 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 #include "AmaltheaConverter.h"
+#include "debugFlags.h"
+#include "trace_utils_BTF.h"
 
 #include "FreeRTOS.h"
 #include "task.h"
 #include <stdarg.h>
-#include "debugFlags.h"
 
 
-
-
-AmaltheaTask createAmaltheaTask(void *taskHandler,void *cInHandler,void *cOutHandler,unsigned int period,unsigned int deadline, unsigned int WCET){
-	if (WCET >= period){
-		AmaltheaTask retValNull = {0,0,NULL,0,0,0,NULL,NULL};
-		return retValNull;
-	}else{
-		AmaltheaTask retVal = {0,0,taskHandler,WCET,deadline,period,cInHandler,cOutHandler};
-		return retVal;
-	}
+/**
+ * Generating Amalthea task model
+ */
+AmaltheaTask createAmaltheaTask(void *taskHandler,void *cInHandler,void *cOutHandler,
+        unsigned int period,unsigned int deadline, unsigned int WCET,
+        unsigned int src_id, unsigned int src_instance, unsigned int task_id, unsigned int task_instance)
+{
+    if (WCET >= period)
+    {
+        AmaltheaTask retValNull = {0, 0, 0, 0, NULL, 0, 0, 0, NULL, NULL};
+        return retValNull;
+    }else
+    {
+        AmaltheaTask retVal = {src_id, src_instance, task_id, task_instance,
+                taskHandler, WCET, deadline, period, cInHandler, cOutHandler};
+        return retVal;
+    }
 }
 
-unsigned int calculateStackSize(int labelBitCount, int labelCount){
-	return ((labelBitCount*labelCount)/PLATFORM_WORD_LENGTH);
+
+
+/**
+ * This function returns the additional stack size (in words) needed for the task to handle its labels
+ *
+ */
+
+unsigned int calculateStackSize(int labelBitCount, int labelCount)
+{
+    return ((labelBitCount * labelCount) / PLATFORM_WORD_LENGTH);
 }
 
-void createRTOSTask(AmaltheaTask* task, int priority, int argCount, ...){
-	//cycle through the stack arguments and add the needed numbers to the stack
-	int stack_size = 0;
-	for (int i=3;i<=argCount+2;i+=2){
-		stack_size = calculateStackSize(i,i+1);
-	}
-	//make sure the stack size is at least big enough to run the task.
-	stack_size += configMINIMAL_STACK_SIZE;
-	//create the RTOS task with the generalized form
-	xTaskCreate(generalizedRTOSTask	,"Task"	,stack_size,	&(*task)	,priority,NULL);
+
+/**
+ * Create the RTOS task that represents a given Amalthea task.
+ */
+void createRTOSTask(AmaltheaTask* task, int priority, int argCount, ...)
+{
+    /* cycle through the stack arguments and add the needed numbers to the stack */
+    int stack_size = 0;
+    /* make sure the stack size is at least big enough to run the task. */
+    stack_size += configMINIMAL_STACK_SIZE;
+    /* create the RTOS task with the generalized form */
+    xTaskCreate((TaskFunction_t)generalizedRTOSTask, "Task", stack_size, &(*task), priority, NULL);
 }
 
 
 #ifdef use_LET_COMM_SEMANTICS
 void generalizedRTOSTask(AmaltheaTask task){
-	TickType_t xLastWakeTime = xTaskGetTickCount();
-	//task.cInHandler();
-	for (;;){
-		//execute cIn
-		task.cInHandler();
-		task.taskHandler();
-		vTaskDelayUntil( &xLastWakeTime, task.period);
-		task.cOutHandler();
-	}
+    TickType_t xLastWakeTime = xTaskGetTickCount();
+    //task.cInHandler();
+    for (;;){
+        //execute cIn
+        task.cInHandler();
+        task.taskHandler();
+        vTaskDelayUntil( &xLastWakeTime, task.period);
+        task.cOutHandler();
+    }
 }
 #else
-
+/**
+ * This RTOS task invokes the task handlers and realizes periodic task execution according to
+ * Amalthea model
+ */
 void generalizedRTOSTask(AmaltheaTask task){
-	TickType_t xLastWakeTime = xTaskGetTickCount();
-	//task.cInHandler();
-	for (;;){
-		//execute cIn
-		task.cInHandler();
-		task.taskHandler();
-		task.cOutHandler();
-		vTaskDelayUntil( &xLastWakeTime, task.period);
-	}
+    TickType_t xLastWakeTime = xTaskGetTickCount();
+    for (;;)
+    {
+        /* CDGen specific code changes. It will be made consistent in future. */
+#ifndef CDGEN_BTF_TRACE
+        traceTaskEvent(task.src_id, task.src_instance, TASK_EVENT, task.task_id,
+                                task.task_instance, PROCESS_START, 0);
+        task.cInHandler();
+        task.taskHandler(task.task_id, task.task_instance);
+        task.cOutHandler();
+        traceTaskEvent(task.src_id, task.src_instance, TASK_EVENT, task.task_id,
+                                task.task_instance, PROCESS_TERMINATE, 0);
+        vTaskDelayUntil( &xLastWakeTime, task.period);
+        task.task_instance++;
+#else
+        task.cInHandler();
+        task.taskHandler(task.src_id, task.src_instance);
+        task.cOutHandler();
+        vTaskDelayUntil( &xLastWakeTime, task.period);
+#endif
+    }
 }
 
 #endif
diff --git a/RTFParallella/src/parallella/AmaltheaConverter.h b/RTFParallella/src/parallella/AmaltheaConverter.h
index 1f41f05..8acc51b 100755
--- a/RTFParallella/src/parallella/AmaltheaConverter.h
+++ b/RTFParallella/src/parallella/AmaltheaConverter.h
@@ -14,65 +14,102 @@
 #ifndef SRC_PARALLELLA_AMALTHEACONVERTER_H_
 #define SRC_PARALLELLA_AMALTHEACONVERTER_H_
 
-#define PLATFORM_WORD_LENGTH 32
+/**
+ * @file AmaltheaConverter.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 17 April 2020
+ * @brief This file declares and implements function to generate Amalthea task model. The
+ * functions defined in this file are used to generate the Amalthea Task model and
+ * create a generalized RTOS task which executes periodically in infinite loop over FreeRTOS.
+ *
+ */
 
-#define numTasks 3
+
+#include "RTFParallellaConfig.h"
+
+#define PLATFORM_WORD_LENGTH 32          /**< Not is used in current implementation. Defines the platform word size */
+
+#define numTasks 3                       /**< Defines number of tasks. Not is current use*/
 
 /**
  * Structure to hold tasks according to amalthea model
  */
-typedef struct{
-	unsigned isDone;
-	unsigned isReady;
-	void(* taskHandler)();
-	unsigned executionTime;//in ticks
-	unsigned deadline;		//in ticks
-	unsigned period;		//in ticks
-	void(* cInHandler)();
-	void(* cOutHandler)();
+typedef struct AmaltheaTask_t
+{
+    unsigned int src_id;                                     /**< Source ID */
+    unsigned int src_instance;                               /**< Source Instance */
+    unsigned int task_id;                                    /**< Task ID */
+    unsigned int task_instance;                              /**< Task Instance */
+    void(* taskHandler)(int  src_id, int src_instance);      /**< Task handler */
+    unsigned int executionTime;                              /**< Worst case execution time*/
+    unsigned int deadline;                                   /**< Deadline of the task*/
+    unsigned int period;                                     /**< Period of the task */
+    void(* cInHandler)();                                    /**< cIn handler of the task */
+    void(* cOutHandler)();                                   /**< cOut handler of the task */
 }AmaltheaTask;
 
 
-/**
- * communication semantics of tasks
- * if use_LET_COMM_SEMANTICS is defined, the tasks will behave in LET semantics else it will use implicit by default
- */
 //#define use_LET_COMM_SEMANTICS
 
-AmaltheaTask createAmaltheaTask(void *taskHandler,void *cInHandler,void *cOutHandler,unsigned int period,unsigned int deadline, unsigned int WCET);
 
 /**
- *	Create the RTOS task that represents a given Amalthea task.
- *	This function can have multiple arguments for all label types used by the task and the number of labels of each type.
+ * @brief Generating Amalthea task model
  *
- *	Arguments:
- *	task			:	pointer to the AmaltheaTask struct
- *	priority		:	priority of the task (according to RMS, lowesrt perio has highest priority)
- *	argCount		:	number of different types of labels used by this task
- *	label_type_size :	size (in bits) of label type.
- *	label_type_count:	number of labels associated with that type.
+ * The function takes the input arguments and generates the Amalthea
+ * task model which is used to create the RTOS tasks.
  *
+ * Arguments:
+ * @param[in]     taskHandler      : Amalthea task handler
+ * @param[in]     cInHandler       : Amalthea cIn handler
+ * @param[in]     cOutHandler      : Amalthea cOut handler
+ * @param[in]     period           : Time period of the task
+ * @param[in]     deadline         : Deadline of the task
+ * @param[in]     WCET             : Worst case execution time of the task
+ * @param[in]     src_id           : Source ID of the tasks
+ * @param[in]     src_instance     : Source Instance of the task
+ * @param[in]     task_id          : Task ID
+ * @param[in]     task_instance    : Task Instance
  *
+ * @return : Amalthea task model
+ */
+AmaltheaTask createAmaltheaTask(void *taskHandler, void *cInHandler, void *cOutHandler,
+        unsigned int period, unsigned int deadline, unsigned int WCET,
+        unsigned int src_id, unsigned int src_instance, unsigned int task_id, unsigned int task_instance);
+
+/**
+ * @brief Create the RTOS task that represents a given Amalthea task.
+ *
+ * This function can have multiple arguments for all label types used by the task and the number of labels of each type.
+ *
+ * @param[in]   task            :    pointer to the AmaltheaTask struct
+ * @param[in]   priority        :    priority of the task (according to RMS, lowesrt perio has highest priority)
+ * @param[in]   argCount        :    number of different types of labels used by this task
+ * @param[in]   label_type_size :    size (in bits) of label type.
+ * @param[in]   label_type_count:    number of labels associated with that type.
+ *
+ *    @return : void
  */
 void createRTOSTask(AmaltheaTask* task, int priority, int argCount, ...);
 
 /**
- * This function returns the additional stack size (in words) needed for the task to andle its labels
+ * @brief This function returns the additional stack size (in words) needed for the task to handle its labels
  *
- * Arguments:
- * labelBitCount	:	label size in bits
- * labelCount		:	number of labels
+ * @param[in] labelBitCount    :    label size in bits
+ * @param[in] labelCount       :    number of labels
+ *
+ * @return : stack size
  *
  */
 unsigned int calculateStackSize(int labelBitCount, int labelCount);
 
 /**
  *
- *This RTOS task invokes the task handlers and realizes periodic task execution according to
+ *@brief This RTOS task invokes the task handlers and realizes periodic task execution according to
  * Amalthea model
  *
- * Arguments:
- * task		:	instance of AmaltheaTask structure to be invoked
+ * @param[in] task        :    instance of AmaltheaTask structure to be invoked
+ *
+ * @return : void
  *
  */
 void generalizedRTOSTask(AmaltheaTask task);
diff --git a/RTFParallella/src/parallella/Doxyfile b/RTFParallella/src/parallella/Doxyfile
new file mode 100644
index 0000000..772d69a
--- /dev/null
+++ b/RTFParallella/src/parallella/Doxyfile
@@ -0,0 +1,2494 @@
+# Doxyfile 1.8.13
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "BTF Trace Framework on RTFParallella"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "Extending the RTFParallella framework to support BTF trace functionality"
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../../documentation/
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = YES
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = ./
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.pyw \
+                         *.f90 \
+                         *.f95 \
+                         *.f03 \
+                         *.f08 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = YES
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = YES
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: YES.
+
+HAVE_DOT               = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
diff --git a/RTFParallella/src/parallella/FreeRTOSConfig.h b/RTFParallella/src/parallella/FreeRTOSConfig.h
index d8514d6..38a3425 100755
--- a/RTFParallella/src/parallella/FreeRTOSConfig.h
+++ b/RTFParallella/src/parallella/FreeRTOSConfig.h
@@ -12,45 +12,54 @@
  *******************************************************************************/
 #ifndef FREERTOS_CONFIG_H
 #define FREERTOS_CONFIG_H
+/**
+ * @file FreeRTOSConfig.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 15 April,  2020
+ * @brief This file declares the macros and structures used on FreeRTOS Configuration.
+ *
+ */
+
+#include "RTFParallellaConfig.h"
 
 
-#define configCALL_STACK_SIZE	0x50
+#define configCALL_STACK_SIZE              0x50
 
-#define configUSE_PREEMPTION		1
-#define configUSE_TIME_SLICING  	0
+#define configUSE_PREEMPTION                  1
+#define configUSE_TIME_SLICING                0
 
-#define configUSE_IDLE_HOOK			0
-#define configUSE_TICK_HOOK			0
-#define configCPU_CLOCK_HZ			( ( unsigned long ) 700000000 )
-#define configTICK_RATE_HZ			( ( TickType_t ) 1000 )
-#define configMAX_PRIORITIES		( 5 )
-#define configMINIMAL_STACK_SIZE	( ( unsigned short ) 0x200) //512 words
-#define configTOTAL_HEAP_SIZE		( (size_t ) ( 10450 ) )
-#define configMAX_TASK_NAME_LEN		( 128 )
-#define configUSE_TRACE_FACILITY	0
-#define configUSE_16_BIT_TICKS		1
-#define configIDLE_SHOULD_YIELD		0
+#define configUSE_IDLE_HOOK                   0
+#define configUSE_TICK_HOOK                   0
+#define configCPU_CLOCK_HZ                    ( ( unsigned long ) 700000000 )
+#define configTICK_RATE_HZ                    ( ( TickType_t ) execution_time_scale )
+#define configMAX_PRIORITIES                  ( 5 )
+#define configMINIMAL_STACK_SIZE              ( ( unsigned short ) 112) //256 words
+#define configTOTAL_HEAP_SIZE                 ( (size_t ) ( 10240) )
+#define configMAX_TASK_NAME_LEN               ( 48 )
+#define configUSE_TRACE_FACILITY              0
+#define configUSE_16_BIT_TICKS                1
+#define configIDLE_SHOULD_YIELD               0
 
 
 
-#define configUSE_ALTERNATIVE_API  0
+#define configUSE_ALTERNATIVE_API             0
 
 /* Co-routine definitions. */
-#define configUSE_CO_ROUTINES 		0
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+#define configUSE_CO_ROUTINES                 0
+#define configMAX_CO_ROUTINE_PRIORITIES       ( 2 )
 
 /* Set the following definitions to 1 to include the API function, or zero
 to exclude the API function. */
 
-#define INCLUDE_vTaskPrioritySet		0
-#define INCLUDE_uxTaskPriorityGet		0
-#define INCLUDE_vTaskDelete				0
-#define INCLUDE_vTaskCleanUpResources	0
-#define INCLUDE_vTaskSuspend			1
-#define INCLUDE_vTaskDelayUntil			1
-#define INCLUDE_vTaskDelay              1
-#define INCLUDE_xTaskGetCurrentTaskHandle 1
-#define INCLUDE_pcTaskGetTaskName       1
+#define INCLUDE_vTaskPrioritySet              0
+#define INCLUDE_uxTaskPriorityGet             0
+#define INCLUDE_vTaskDelete                   0
+#define INCLUDE_vTaskCleanUpResources         0
+#define INCLUDE_vTaskSuspend                  1
+#define INCLUDE_vTaskDelayUntil               1
+#define INCLUDE_vTaskDelay                    1
+#define INCLUDE_xTaskGetCurrentTaskHandle     1
+#define INCLUDE_pcTaskGetTaskName             1
 
 #define C2C_MSG_TYPE int
 
diff --git a/RTFParallella/src/parallella/Makefile b/RTFParallella/src/parallella/Makefile
index db1f694..60a76f3 100755
--- a/RTFParallella/src/parallella/Makefile
+++ b/RTFParallella/src/parallella/Makefile
@@ -1,14 +1,14 @@
 EPIPHANY_HOME=/opt/adapteva/esdk
 #host compiler path
-LCC=/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
+LCC=/opt/linaro/bin/arm-linux-gnueabihf-gcc
 #device compiler path
 CC=e-gcc
 #FreeRTOS dependencies
 CFLAGS=-I.
 FREERTOSSRC=../../RTFP_RTOS_KERNEL_PATCHED/FreeRTOS/Source
 INCLUDES= -g -I$(FREERTOSSRC)/include -I$(FREERTOSSRC)/portable/GCC/Epiphany -I.
-DEPS = $(FREERTOSSRC)/portable/GCC/Epiphany/portmacro.h Makefile FreeRTOSConfig.h c2c.h debugFlags.h AmaltheaConverter.h taskCode.h ParallellaUtils.h
-DEPSHOST = c2c.h debugFlags.h AmaltheaConverter.h shared_comms.h model_enumerations.h
+DEPS = $(FREERTOSSRC)/portable/GCC/Epiphany/portmacro.h Makefile RTFParallellaConfig.h FreeRTOSConfig.h c2c.h debugFlags.h AmaltheaConverter.h taskCode.h ParallellaUtils.h trace_utils_BTF.h
+DEPSHOST = RTFParallellaConfig.h model_enumerations.h host_utils.h trace_utils_BTF.h
 #Epiphany SDK dependencies
 ESDK=${EPIPHANY_HOME}
 ELIBS=${ESDK}/tools/host.armv7l/lib
@@ -34,9 +34,9 @@
 
 #host target
 armcode: armcode.c $(DEPSHOST) 
-	$(LCC) $< -o $@  host_utils.c model_enumerations.c -I ${EINCS} -L ${ELIBS} -lpal -le-hal -le-loader -lpthread 
+	$(LCC) $< -o $@  host_utils.c model_enumerations.c trace_utils_BTF.c -I ${EINCS} -L ${ELIBS} -lpal -le-hal -le-loader -lpthread 
 host_main_example1: host_main_example1.c $(DEPSHOST) 
-	$(LCC) $< -o $@  host_utils.c model_enumerations.c -I ${EINCS} -L ${ELIBS} -lpal -le-hal -le-loader -lpthread 
+	$(LCC) $< -o $@ host_utils.c model_enumerations.c trace_utils_BTF.c -I ${EINCS} -L ${ELIBS} -lpal -le-hal -le-loader -lpthread 
 
 #clean target
 clean:
diff --git a/RTFParallella/src/parallella/ParallellaUtils.c b/RTFParallella/src/parallella/ParallellaUtils.c
index ae8f393..34efac7 100755
--- a/RTFParallella/src/parallella/ParallellaUtils.c
+++ b/RTFParallella/src/parallella/ParallellaUtils.c
@@ -12,15 +12,26 @@
  *******************************************************************************/
 
 #include "ParallellaUtils.h"
+#include "debugFlags.h"
+#include "RTFParallellaConfig.h"
+
 
 void sleepTimerMs(int ticks, int taskNum){
-	updateDebugFlag(ticks*10);
-	int i;
-	for (i=0;i<ticks;i++){
-		taskENTER_CRITICAL();
-		traceRunningTask(taskNum);
-		e_wait(E_CTIMER_0,_1MS);
-		taskEXIT_CRITICAL();
-	}
+    updateDebugFlag(ticks * 10);
+    int clock_cycle = (configCPU_CLOCK_HZ / execution_time_scale);
+    int tick_count;
+    int ts = get_time_scale_factor();
+    int no_of_ticks = ts * ticks;
+    int is_signal_sent = 0;
+    for (tick_count = 0;tick_count < no_of_ticks; tick_count++)
+    {
+        if(is_signal_sent == 0){
+            signalHost();
+            is_signal_sent = 1;
+        }
+        taskENTER_CRITICAL();
+        e_wait(E_CTIMER_0,clock_cycle);
+        taskEXIT_CRITICAL();
+    }
 }
 
diff --git a/RTFParallella/src/parallella/ParallellaUtils.h b/RTFParallella/src/parallella/ParallellaUtils.h
index 5cc2d7f..5cf4c5c 100755
--- a/RTFParallella/src/parallella/ParallellaUtils.h
+++ b/RTFParallella/src/parallella/ParallellaUtils.h
@@ -14,9 +14,17 @@
 #ifndef SRC_PARALLELLA_PARALLELLAUTILS_H_
 #define SRC_PARALLELLA_PARALLELLAUTILS_H_
 
-#include "debugFlags.h"
+/**
+ * @file ParallellaUtils.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 20 May 2020
+ * @brief This file declares the sleep timer function to simulate the time taken by each task to complete
+ * its processing on the hardware core.
+ *
+ */
+
 #include "e_lib.h"
-//freeRTOS imports
+/* FreeRTOS imports */
 #include "FreeRTOS.h"
 #include "task.h"
 #include "queue.h"
@@ -26,12 +34,15 @@
 #define _1US 700
 
 /**
- * sleep for a multiple of milliseconds
+ * @brief Sleep for a multiple of milliseconds
  *
- * Arguments:
- * ticks		:	number of milliseconds to sleep
- * taskNum		:	index of task invoking this function (used for tracing during sleep)
+ * It makes the task to sleep for the provided millisecond. This is used to simulate the computation
+ * time taken by the task in a real scenario.
  *
+ * @param[in] ticks        :    number of milliseconds to sleep
+ * @param[in] taskNum      :    index of task invoking this function (used for tracing during sleep)
+ *
+ * @return : void
  */
 void sleepTimerMs(int ticks,int taskNum);
 
diff --git a/RTFParallella/src/parallella/RTFParallellaConfig.h b/RTFParallella/src/parallella/RTFParallellaConfig.h
new file mode 100644
index 0000000..a0b2bed
--- /dev/null
+++ b/RTFParallella/src/parallella/RTFParallellaConfig.h
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ *   Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ *   This program and the accompanying materials are made
+ *   available under the terms of the Eclipse Public License 2.0
+ *   which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ *   SPDX-License-Identifier: EPL-2.0
+ *
+ *   Contributors:
+ *        Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_RTFPARALLELLACONFIG_H_
+#define SRC_PARALLELLA_RTFPARALLELLACONFIG_H_
+
+/**
+ * @file RTFParallellaConfig.h
+ * @author Anand Prakash
+ * @date 19 June 2020
+ * @brief This file declares the macros and structures used on Epiphany core to get the trace information,
+ *
+ */
+
+
+/* Shared DRAM start address*/
+#define SHARED_DRAM_START_ADDRESS                      0x8E000000
+
+/* Shared dram start address offset corresponds to 0x8F000000 global address */
+#define SHARED_DRAM_START_OFFSET                       0x01000000
+
+/* The Shared DRAM section as seen by the Epiphany core */
+#define SHARED_DRAM_SECTION                            (SHARED_DRAM_START_ADDRESS + SHARED_DRAM_START_OFFSET)
+
+/* Allocate 4KB of shared DRAM for data exchange between host and epiphany cores */
+#define SHARED_DRAM_SIZE                               0x00002000
+
+#define RTF_DEBUG_TRACE_COUNT                                  10
+
+/* First five address is used by FreeRTOS porting on Epiphany on shared dram see port.c file. */
+#define INPUT_TIMESCALE_OFFSET                                 20
+
+#define SHARED_BTF_DATA_OFFSET                         (INPUT_TIMESCALE_OFFSET + 4)
+
+#define SHARED_LABEL_OFFSET                                0x1000
+
+#define BTF_TRACE_BUFFER_SIZE                                   8
+
+#define GLOBAL_SHARED_LABEL_OFFSET                      sizeof(btf_trace_info)
+
+
+/* Shared label count */
+#define SHM_LABEL_COUNT                                         10
+
+#define DSHM_LABEL_CORE_OFFSET                                  10
+
+/* Start buffer address on epiphany core to store the RTF trace info. */
+#define ECORE_RTF_BUFFER_ADDR                                   0x7000
+
+#define DSHM_LABEL_EPI_CORE_OFFSET                              0x7040
+
+
+
+#define MUTEX_ROW        1
+#define MUTEX_COL        0
+#define RING_BUFFER_SIZE 6
+
+
+extern unsigned int execution_time_scale;
+
+
+
+/**
+ * Structure to ensure proper synchronization between host and epiphany cores
+ * and also within epiphany cores.
+ */
+typedef struct btf_trace_info_t
+{
+    int length;                            /**< To define the length of BTF packets to be read */
+    unsigned int offset;                    /**< Defines the offset location in memory area */
+    unsigned int core_id;                   /**< Epiphany core id */
+    unsigned int core_write;                /**< Read write operation between epiphany core and host */
+} btf_trace_info;
+
+
+
+/* Enum for entity type ID */
+typedef enum entity_id_t
+{
+    /* 0 to 15 entity ID is reserved for TASKS. */
+    IDLE_TASK_ID = 0,
+    TASK5MS0_ID,
+    TASK10MS0_ID,
+    TASK20MS0_ID,
+    TASK10MS1_ID,
+    TASK20MS1_ID,
+
+
+    /* 16 to 63 entity ID reserved for RUNNABLES */
+    RUNNABLE_HANDLER5MS0_ID = 16,
+    RUNNABLE_HANDLER10MS0_ID,
+    RUNNABLE_HANDLER20MS0_ID,
+    RUNNABLE_HANDLER10MS1_ID,
+    RUNNABLE_HANDLER20MS1_ID,
+
+    /* 64 to 256 reserved for LABELS */
+    SH_LABEL_A_ID = 64,
+    SH_LABEL_B_ID,
+    DSH_LABEL_A_ID,
+    DSH_LABEL_B_ID,
+
+    /* 256 to 264 reserved for HARDWARE */
+    HW_CORE0_ID = 256,
+    HW_CORE1_ID
+} entity_id;
+
+
+typedef enum {
+    UINT_8,                    /**< unsigned char type */
+    UINT_16,                   /**< unsigned short type */
+    UINT_32                    /**< unsigned int type */
+} TYPE;
+
+
+#endif /* SRC_PARALLELLA_RTFPARALLELLACONFIG_H_ */
diff --git a/RTFParallella/src/parallella/armcode.c b/RTFParallella/src/parallella/armcode.c
index 5f9cbd4..050fe2e 100755
--- a/RTFParallella/src/parallella/armcode.c
+++ b/RTFParallella/src/parallella/armcode.c
@@ -17,7 +17,9 @@
 #include <unistd.h>
 #include <e-hal.h> //hardware abstraction library
 #include <time.h>   /* Needed for struct timespec */
+#include <e-loader.h>
 
+#include "RTFParallellaConfig.h"
 #include "c2c.h"
 #include "debugFlags.h"
 #include "shared_comms.h"
@@ -25,24 +27,24 @@
 #include "model_enumerations.h"
 
 unsigned int shared_label_to_read[10];
-unsigned int shared_label_core_00[dstr_mem_sec_1_label_count];
-unsigned int shared_label_core_10[dstr_mem_sec_1_label_count];
+unsigned int shared_label_core_00[DSHM_SEC_LABEL_COUNT];
+unsigned int shared_label_core_10[DSHM_SEC_LABEL_COUNT];
 
 int main()
 {
 	int label_enable_count_core0 = 0;
 	printf("RTFP demo host code\n");
 	//setup visualization config for the first core
-	unsigned index_array1[dstr_mem_sec_1_label_count];
-	unsigned index_array1_prv_val[dstr_mem_sec_1_label_count];
-	array_init(index_array1,dstr_mem_sec_1_label_count);
-	array_init(index_array1_prv_val,dstr_mem_sec_1_label_count);
+	unsigned index_array1[DSHM_SEC_LABEL_COUNT];
+	unsigned index_array1_prv_val[DSHM_SEC_LABEL_COUNT];
+	array_init(index_array1,DSHM_SEC_LABEL_COUNT);
+	array_init(index_array1_prv_val,DSHM_SEC_LABEL_COUNT);
 	LabelVisual core1 = get_user_input(index_array1);
 	//setup visualization config for the first core
-	unsigned index_array2[dstr_mem_sec_1_label_count];
-	unsigned index_array2_prv_val[dstr_mem_sec_1_label_count];
-	array_init(index_array2,dstr_mem_sec_1_label_count);
-	array_init(index_array2_prv_val,dstr_mem_sec_1_label_count);
+	unsigned index_array2[DSHM_SEC_LABEL_COUNT];
+	unsigned index_array2_prv_val[DSHM_SEC_LABEL_COUNT];
+	array_init(index_array2,DSHM_SEC_LABEL_COUNT);
+	array_init(index_array2_prv_val,DSHM_SEC_LABEL_COUNT);
 	LabelVisual core2 = get_user_input(index_array2);
 	//steup visualization for shared memeory
 	unsigned index_array_DRAM[shared_mem_section1_label_count];
@@ -124,9 +126,9 @@
 	for (pollLoopCounter=0;pollLoopCounter<=40;pollLoopCounter++){
 		message[3] = 0;
 		e_read(&dev,0,0,addr, &message, sizeof(message));
-		e_read(&dev,0,0,dstr_mem_offset_sec_1, &shared_label_core_00, sizeof(shared_label_core_00));
+		e_read(&dev,0,0,DSHM_LABEL_EPI_CORE_OFFSET, &shared_label_core_00, sizeof(shared_label_core_00));
 		e_read(&dev,1,0,addr, &message2, sizeof(message2));
-		e_read(&dev,1,0,dstr_mem_offset_sec_1, &shared_label_core_10, sizeof(shared_label_core_10));
+		e_read(&dev,1,0,DSHM_LABEL_EPI_CORE_OFFSET, &shared_label_core_10, sizeof(shared_label_core_10));
 		e_read(&emem,0,0,0x00, &shared_label_to_read, 10*sizeof(unsigned int));
 		if (message[8]!= message2[8] ){
 			//fprintf(stderr,"NIS->");
diff --git a/RTFParallella/src/parallella/c2c.c b/RTFParallella/src/parallella/c2c.c
index 28122d4..d1cb256 100755
--- a/RTFParallella/src/parallella/c2c.c
+++ b/RTFParallella/src/parallella/c2c.c
@@ -11,128 +11,114 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 
+
+#include "RTFParallellaConfig.h"
 #include "c2c.h"
 
-#include "e-lib.h"
+unsigned int *outbuf_dstr_shared[SHM_LABEL_COUNT];
 
-dstr_mem_sec_1_label_type *outbuf_dstr_shared[10];
-//e_mem_t emem_dst[16];
-int core_write_mutex=0;
-
-void shared_labels_init_core(){
-	//shared buffer in core memory
-	outbuf_dstr_shared[0] = (dstr_mem_sec_1_label_type *) dstr_mem_offset_sec_1;
-	/*for (int i=1;i<dstr_mem_sec_1_label_count;i++){
-		outbuf_dstr_shared[i] = outbuf_dstr_shared[i-1] + 1;
-	}
-	outbuf_dstr_shared[1] = outbuf_dstr_shared[0] + 1;
-	outbuf_dstr_shared[2] = outbuf_dstr_shared[1] + 1;
-	outbuf_dstr_shared[3] = outbuf_dstr_shared[2] + 1;
-	outbuf_dstr_shared[4] = outbuf_dstr_shared[3] + 1;
-	outbuf_dstr_shared[5] = outbuf_dstr_shared[4] + 1;
-	outbuf_dstr_shared[6] = outbuf_dstr_shared[5] + 1;
-	outbuf_dstr_shared[7] = outbuf_dstr_shared[6] + 1;
-	outbuf_dstr_shared[8] = outbuf_dstr_shared[7] + 1;*/
-	//initialize buffer
-	int i;
-	for (i=0;i<9;i++){
-		*outbuf_dstr_shared[i] =0;
-	}
-	/*int emem;
-	//define distributed memory section in Epi range
-	e_alloc(&emem[1], dstr_mem_offset_sec_1 , sizeof(outbuf_dstr_shared));*/
-
-}
-
-uint8_t shared_label_write_core	(unsigned row,unsigned col,int label_indx,int payload){
-	unsigned int *addr;
-	unsigned int* addr_base;
-	addr_base = get_base_address_core(row,col);
-	addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)outbuf_dstr_shared[label_indx]);
-	*addr = payload;
+/**
+ * Provide the epiphany memory section based on the offset data.
+ */
+unsigned int *allocate_epiphany_memory(unsigned int offset)
+{
+    unsigned int *epi_core_addr = 0;
+    /* Ensure that the start address is 0x7000 at data bank 3 of each core */
+    unsigned int *epi_core_buffer = (unsigned int *)ECORE_RTF_BUFFER_ADDR;
+    /* Add offset to get the address */
+    epi_core_addr = (epi_core_buffer + offset);
+    return (unsigned int *)epi_core_addr;
 }
 
 
-void DSHM_section_init(DSHM_section sec){
-	unsigned int *addr;
-	unsigned int* addr_base;
-	addr_base = get_base_address_core(sec.row,sec.col);
-	addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)sec.base_addr);
-	for (int i = 0;i<sec.label_count;i++){
-		addr[i] = 256;
-	}
+/**
+ * Initiate the shared label section, this function will assign addresses to labels in a section,
+ * and initialize those labels to 0
+ */
+void shared_labels_init_core(void){
+    /* shared buffer in core memory */
+    outbuf_dstr_shared[0] = (unsigned int *) DSHM_LABEL_EPI_CORE_OFFSET;
+    /* initialize buffer */
+    int index;
+    for (index = 0; index < SHM_LABEL_COUNT; index++){
+        *outbuf_dstr_shared[index] = 0;
+    }
+
 }
 
 
-uint8_t write_DSHM_section	(DSHM_section sec,int label_indx,int payload){
-	unsigned int *addr;
-	unsigned int* addr_base;
-	addr_base = get_base_address_core(sec.row,sec.col);
-	addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)sec.base_addr);
-	addr[label_indx] = payload;
-}
-
-unsigned int read_DSHM_section (DSHM_section sec, int label_indx){
-	unsigned int *addr;
-	unsigned int* addr_base;
-	addr_base = get_base_address_core(sec.row,sec.col);
-	addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)sec.base_addr);
-	return addr[label_indx];
+/**
+ * Write a value to a label in a distributed shared memory section
+ */
+void shared_label_write_core (unsigned row,unsigned col,int label_indx,int payload)
+{
+    unsigned int *addr;
+    unsigned int* addr_base;
+    addr_base = (unsigned int *)get_base_address_core(row,col);
+    addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)outbuf_dstr_shared[label_indx]);
+    *addr = payload;
 }
 
 
-
-
-
-unsigned int shared_label_read_core (unsigned row, unsigned col, int label_indx){
-	unsigned int *addr;
-	unsigned int* addr_base;
-	addr_base = get_base_address_core(row,col);
-	addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)outbuf_dstr_shared[label_indx]);
-	return addr;
+/**
+ * Initialize the distributed shared label section.
+ */
+void DSHM_section_init(DSHM_section sec)
+{
+    unsigned int *addr;
+    unsigned int* addr_base;
+    addr_base = (unsigned int *)get_base_address_core(sec.row,sec.col);
+    addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)sec.base_addr);
+    for (int i = 0;i<sec.label_count;i++){
+        addr[i] = 0;
+    }
 }
 
 
-unsigned int get_base_address_core(int row, int col){
-	if(row ==0 ){
-		if (col == 0){
-			return 0x80800000;
-		} else if (col ==1){
-			return 0x80900000;
-		}else if (col == 2){
-			return 0x80A00000;
-		}else if (col == 3){
-			return 0x80B00000;
-		}
-	} else if(row ==1 ){
-		if (col == 0){
-			return 0x84800000;
-		} else if (col ==1){
-			return 0x84900000;
-		}else if (col == 2){
-			return 0x84A00000;
-		}else if (col == 3){
-			return 0x84B00000;
-		}
-	} else if(row ==2 ){
-		if (col == 0){
-			return 0x88800000;
-		} else if (col ==1){
-			return 0x88900000;
-		}else if (col == 2){
-			return 0x88A00000;
-		}else if (col == 3){
-			return 0x88B00000;
-		}
-	} else if(row ==3 ){
-		if (col == 0){
-			return 0x8C800000;
-		} else if (col ==1){
-			return 0x8C900000;
-		}else if (col == 2){
-			return 0x8CA00000;
-		}else if (col == 3){
-			return 0x8CB00000;
-		}
-	}
+/**
+ * Write data to a specific label in a distributed shared memory section
+ */
+void write_DSHM_section (DSHM_section sec,int label_indx,int payload)
+{
+    unsigned int *addr;
+    unsigned int* addr_base;
+    addr_base = (unsigned int *)get_base_address_core(sec.row,sec.col);
+    addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)sec.base_addr);
+    addr[label_indx] = payload;
+}
+
+/**
+ * Read data from a specific label in a distributed shared memory section
+ */
+unsigned int read_DSHM_section (DSHM_section sec, int label_indx)
+{
+    unsigned int *addr;
+    unsigned int* addr_base;
+    addr_base = (unsigned int *)get_base_address_core(sec.row,sec.col);
+    addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)sec.base_addr);
+    return addr[label_indx];
+}
+
+
+/**
+ * Read a value of a label in a distributed shared memory section.
+ */
+unsigned int shared_label_read_core (unsigned row, unsigned col, int label_indx)
+{
+    unsigned int *addr;
+    unsigned int* addr_base;
+    addr_base = (unsigned int *)get_base_address_core(row,col);
+    addr = (unsigned int*) ((unsigned ) addr_base | (unsigned)outbuf_dstr_shared[label_indx]);
+    return (unsigned int)*addr;
+}
+
+/**
+ * Get the absolute base memory address of a core.
+ */
+unsigned int get_base_address_core(int row, int col)
+{
+    uint32_t base_addr = 0x80800000;
+    uint32_t col_shift = (uint32_t)((col << 20) | 0);
+    uint32_t row_shift = (uint32_t)(((row * 4) << 24) | 0);
+    return (base_addr | col_shift | row_shift);
 }
diff --git a/RTFParallella/src/parallella/c2c.h b/RTFParallella/src/parallella/c2c.h
index 4477816..908617f 100755
--- a/RTFParallella/src/parallella/c2c.h
+++ b/RTFParallella/src/parallella/c2c.h
@@ -14,124 +14,147 @@
 #ifndef C2C_H
 #define C2C_H
 
+/**
+ * @file c2c.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 17 April 2020
+ * @brief This file declares and implements function to communicate between epiphany cores. The
+ * functions defined in this file are used for reading from and writing data in the epiphany
+ * cores.
+ */
 
 #include <stdint.h>
 #include "shared_comms.h"
-#define dstr_mem_offset_sec_1 			0x4000
-#define dstr_mem_sec_1_label_count		10
-#define dstr_mem_sec_1_label_type		unsigned int
 
 
+#define DSHM_SEC_LABEL_COUNT            10
+
 
 /**
  * defines a distributed shared memory section
  *
- * Fields:
- * row		: the row of target core on Epi chip
- * col		: the column of target core on Epi chip
- * base_addr: address of the first label in the section
- * label_count: number of labels in the section
- * sec_type: data type of the section (size of labels in the section)
- *
  */
-struct{
-	unsigned 		row;
-	unsigned 		col;
-	unsigned int 	base_addr;
-	unsigned 		label_count;
-	TYPE			sec_type;
-}typedef DSHM_section;
+typedef struct DSHM_section_t {
+    unsigned         row;             /**< the row of target core on Epi chip */
+    unsigned         col;             /**< the column of target core on Epi chip */
+    unsigned int     base_addr;       /**< address of the first label in the section */
+    unsigned         label_count;     /**< number of labels in the section */
+    TYPE             sec_type;        /**< data type of the section (size of labels in the section) */
+} DSHM_section;
+
 
 /**
- * Initiate the shared label section, this funcion will assign addresses to labels in a section,
+ * @brief Provide the epiphany memory section based on the offset data.
+ *
+ *
+ * The epiphany memory section is defined in data bank 3 of each core and
+ * start at address 0x7000. The address is returned based on the offset to
+ * 0x7000 of each core.
+ * This buffer is assigned to stored the RTF parallella legacy trace info. Data bank
+ * 3 is used to store the information on each epiphany core. It starts at 0x7000 offset
+ * on each epiphany core. Any change in this buffer addressing must be followed with
+ * the correct offset set in host application to get the correct values.
+ *
+ * @param[in] offset : Offset to the epiphany start memory of 0x7000
+ *
+ * @return : Pointer to the Epiphany address.
+ *
+ */
+unsigned int *allocate_epiphany_memory(unsigned int offset);
+
+/**
+ * @brief Initiate the shared label section, this function will assign addresses to labels in a section,
  * and initialize those labels to 0
  *
- * Arguments:
+ * @return : void
  *
  */
-void shared_labels_init_core();
+void shared_labels_init_core(void);
 
 /**
- * write a value to a label in a distributed shared memory section
+ * @brief Write a value to a label in a distributed shared memory section
  *
- * Arguments:
- * row			:	absolute row number of the core
- * col			:	absolute column number of the core
- * label_indx	:	index of the target shared label
- * payload		:	value to write
+ * @param[in]  row            :    absolute row number of the core
+ * @param[in]  col            :    absolute column number of the core
+ * @param[in]  label_indx     :    index of the target shared label
+ * @param[in]  payload        :    value to write
+ *
+ * @return : void
  *
  */
-uint8_t shared_label_write_core	(unsigned row,unsigned col,int label_indx,int payload);
+void shared_label_write_core    (unsigned row,unsigned col,int label_indx,int payload);
 
 
 /**
- * read a value of a label in a distributed shared memory section
+ * @brief Read a value of a label in a distributed shared memory section
  *
- * Arguments:
- * row			:	absolute row number of the core
- * col			:	absolute column number of the core
- * label_indx	:	index of the target shared label
+ * @param[in] row            :    absolute row number of the core
+ * @param[in] col            :    absolute column number of the core
+ * @param[in] label_indx     :    index of the target shared label
+ *
+ * @return : Shared label value at the provided label_indx
  *
  */
 unsigned int shared_label_read_core(unsigned row, unsigned col, int label_indx);
 
 /**
- * get the absolute base memory address of a core
+ * @brief Get the absolute base memory address of a core.
  *
- * Arguments:
- * row			:	absolute row number of the core
- * col			:	absolute column number of the core
+ * Get he global memory address of the provided epiphany row id and
+ * column id.
  *
+ * @param[in] row            :    absolute row number of the core
+ * @param[in] col            :    absolute column number of the core
+ *
+ * @return : Global memory address of the Epiphany core.
  */
 unsigned int get_base_address_core(int row, int col);
 
 
 
 /**
+ * @brief Initialize the distributed shared label section.
+ *
  * Initiate the distributed shared label section, this function will assign addresses to labels in a section,
  * and initialize those labels to the value of 256
  *
- * Arguments:
- * sec	:	structure of type DSHM_section containing
- * 			details of the the distributed shared memory section to be initiated
+ * @param[in] sec    :    structure of type DSHM_section containing
+ *                       details of the the distributed shared memory section to be initiated
  *
  */
 void DSHM_section_init(DSHM_section sec);
 
 /**
- * Read data from a specific label in a ditributed shared memory section
+ * @brief Read data from a specific label in a distributed shared memory section
+ *
  * This function will read one full label but the result will
  * be cast into unsigned int (4 bytes on this platform)
- *
  * Segmentation fault will occur for addresses outside the shared_dram section of the system
  * check RTFP documentation for details.
  *
- * Arguments:
- * sec			:	struct of the section to be read
- * label_indx	:	index of requested label
+ * @param[in] sec            :    struct of the section to be read
+ * @param[in] label_indx     :    index of requested label
  *
- * Return:
- * value of requested label in a distributed shared memory section
- *
+ * @return : value of requested label in a distributed shared memory section
  *
  */
 unsigned int read_DSHM_section (DSHM_section sec, int label_indx);
 
 /**
- * Write data to a specific label in a distributed shared memory section
+ * @brief Write data to a specific label in a distributed shared memory section
+ *
  * This function will write one full label but the value will
  * be given as int (4 bytes on this platform) to avoid overflow issues
- *
  * Segmentation fault will occur for addresses outside the shared_dram section of the system
  * check RTFP documentation for details.
  *
- * Arguments:
- * sec			:	struct of the section to be written to
- * label_indx	:	index of requested label
- * payload		:	value to be written (will be cast into data type of target label)
+ * @param[in] sec            :    struct of the section to be written to
+ * @param[in] label_indx     :    index of requested label
+ * @param[in] payload        :    value to be written (will be cast into data type of target label)
  *
+ * @return : void
  */
-uint8_t write_DSHM_section	(DSHM_section sec,int label_indx,int payload);
+void write_DSHM_section    (DSHM_section sec,int label_indx,int payload);
 
 
 #endif
diff --git a/RTFParallella/src/parallella/core0_main.c b/RTFParallella/src/parallella/core0_main.c
index 8b60191..5f765c2 100755
--- a/RTFParallella/src/parallella/core0_main.c
+++ b/RTFParallella/src/parallella/core0_main.c
@@ -11,48 +11,45 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 
-//epiphany imports
+
+/* Epiphany imports */
 #include <stdlib.h>
+#include "e_lib.h"
 
 #include "AmaltheaConverter.h"
-#include "c2c.h"
 #include "debugFlags.h"
 #include "shared_comms.h"
 #include "taskCode.h"
 #include "label_man_core0.h"
-#include "e_lib.h"
-//freeRTOS imports
+#include "RTFParallellaConfig.h"
+
+/* FreeRTOS imports */
 #include "FreeRTOS.h"
 #include "task.h"
 #include "queue.h"
-//utility imports
-unsigned int* global_shm_sec_ptr;
 
 //---------------------------------------------
 int main(void) {
-	//initialize output buffer for debug messages
-	outbuf_init();
-	//shared_labels_init();
-	init_mem_sections();
-	shared_labels_init_core();
-	//SHM_section sec1 = {0x01001000,4};
-	/*unsigned int *x;
-	x = shm_section_init(sec1);
-	global_shm_sec_ptr = x;
-	int y;
-	y = read_shm_section(global_shm_sec_ptr,0);
-	write_shm_section(global_shm_sec_ptr,5,y + 10);*/
-	//create Amalthea task objects
-	AmaltheaTask t5ms =  createAmaltheaTask(handler5ms,cIn5ms,cOut5ms,5,5,2);
-	AmaltheaTask t10ms = createAmaltheaTask(handler10ms,cIn10ms,cOut10ms,10,10,3);
-	AmaltheaTask t20ms = createAmaltheaTask(handler20ms,cIn20ms,cOut20ms,20,20,5);
-	//create RTOS task from templates
-	createRTOSTask(&t5ms,3,0);
-	createRTOSTask(&t10ms,2,0);
-	createRTOSTask(&t20ms,1,0);
-	//start RTOS scheduler
-	vTaskStartScheduler();
-	return EXIT_SUCCESS;
+    /* initialize output buffer for debug messages */
+    init_btf_mem_section();
+    init_task_trace_buffer();
+    int ts = get_time_scale_factor();
+    init_mem_sections();
+    shared_labels_init_core();
+    AmaltheaTask t5ms =  createAmaltheaTask(handler5ms ,cIn5ms ,cOut5ms,
+            5 * ts, 5 * ts, 3 * ts, HW_CORE0_ID, 0, TASK5MS0_ID, 1);
+    AmaltheaTask t10ms = createAmaltheaTask(handler10ms, cIn10ms, cOut10ms,
+            10 * ts, 10 * ts, 4 * ts, HW_CORE0_ID, 0, TASK10MS0_ID, 1);
+    AmaltheaTask t20ms = createAmaltheaTask(handler20ms, cIn20ms, cOut20ms,
+            20 * ts,20 * ts, 6 * ts, HW_CORE0_ID, 0, TASK20MS0_ID, 1);
+    /* create RTOS task from templates */
+    createRTOSTask(&t5ms, 3, 0);
+    createRTOSTask(&t10ms, 2, 0);
+    createRTOSTask(&t20ms, 1, 0);
+    /* start RTOS scheduler */
+    vTaskStartScheduler();
+    return EXIT_SUCCESS;
 }
-//---------------------------------------------
-//end of file
+
+
+
diff --git a/RTFParallella/src/parallella/core1_main.c b/RTFParallella/src/parallella/core1_main.c
index da8c2f4..79427ea 100755
--- a/RTFParallella/src/parallella/core1_main.c
+++ b/RTFParallella/src/parallella/core1_main.c
@@ -14,32 +14,38 @@
 //epiphany imports
 #include <stdlib.h>
 
+#include "e_lib.h"
+
 #include "AmaltheaConverter.h"
-#include "c2c.h"
 #include "debugFlags.h"
 #include "shared_comms.h"
 #include "taskCode.h"
-#include "e_lib.h"
+#include "RTFParallellaConfig.h"
+
 #include "label_man_core0.h"
-//freeRTOS imports
+/* FreeRTOS imports */
 #include "FreeRTOS.h"
 #include "task.h"
 #include "queue.h"
-//utility imports
-//---------------------------------------------
+
+
 int main(void) {
-	//initialize output buffer for debug messages
-	outbuf_init();
-	init_mem_sections();
-	shared_labels_init_core();
-	//create Amalthea task objects
-	AmaltheaTask t20ms = createAmaltheaTask(handler10msCore2,cIn10msCore2,cOut10msCore2,10,10,7);
-	AmaltheaTask t40ms = createAmaltheaTask(handler20msCore2,cIn20msCore2,cOut20msCore2,20,20,10);
-	//create RTOS task from templates
-	createRTOSTask(&t20ms,2,0);
-	createRTOSTask(&t40ms,1,0);
-	vTaskStartScheduler();
-	return EXIT_SUCCESS;
+    /* Initialize output buffer for debug messages */
+    init_btf_mem_section();
+    init_task_trace_buffer();
+    int ts = get_time_scale_factor();
+    init_mem_sections();
+    shared_labels_init_core();
+    /* create Amalthea task objects */
+    AmaltheaTask t20ms = createAmaltheaTask(handler10msCore2, cIn10msCore2, cOut10msCore2,
+            10 * ts, 10 * ts, 7 * ts, HW_CORE1_ID, 0, TASK10MS1_ID, 1);
+    AmaltheaTask t40ms = createAmaltheaTask(handler20msCore2, cIn20msCore2, cOut20msCore2,
+            20 * ts, 20 * ts, 12 * ts, HW_CORE1_ID, 0, TASK20MS1_ID, 1);
+    /* create RTOS task from templates */
+    createRTOSTask(&t20ms, 2, 0);
+    createRTOSTask(&t40ms, 1, 0);
+    /* start RTOS scheduler */
+    vTaskStartScheduler();
+    return EXIT_SUCCESS;
 }
-//---------------------------------------------
-//end of file
+
diff --git a/RTFParallella/src/parallella/debugFlags.c b/RTFParallella/src/parallella/debugFlags.c
index bcafe14..a9ed2bb 100755
--- a/RTFParallella/src/parallella/debugFlags.c
+++ b/RTFParallella/src/parallella/debugFlags.c
@@ -11,63 +11,172 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 
+
+#include <e-lib.h>
+#include "RTFParallellaConfig.h"
 #include "debugFlags.h"
+#include "c2c.h"
+#include "shared_comms.h"
+#include "trace_utils_BTF.h"
 
 #include "FreeRTOS.h"
 #include "task.h"
 
+/**< Mutex declaration for synchronization within cores */
+static e_mutex_t m;
 
-unsigned int *outbuf[10];
+/**< This buffer is used to store the legacy RTF trace. */
+static unsigned int *core_buffer;
+
+/* Variable to set the clock cycle per tick. */
+unsigned int execution_time_scale;
+
+/**< Time scale factor per tick */
+static unsigned int scale_factor;
+
+static unsigned int tick_count;
+
+static unsigned char buffer_offset;
+
+static unsigned int *btf_info;
+
+static btf_trace_info *btf_data;
+
+unsigned int get_time_scale_factor(void)
+{
+    return (scale_factor > 0 ) ? scale_factor : 1;
+}
+
+/**
+ * Gets the execution time from the global memory. The global assigned address in shared
+ * memory is 0x8F000014. The shared DRAM buffer starts at 0x8F000000. The first 20 bytes
+ * is used by the port.c file in FreeRTOS to store some interrupt information.
+ */
+static void get_execution_time_scale(void)
+{
+    /* 1000 corresponds to 1 ms which is considered as max resolution */
+    uint32_t max_resolution = 1000;
+    unsigned int* time_scale = (unsigned int *)(SHARED_DRAM_START_ADDRESS |
+                                                SHARED_DRAM_START_OFFSET  |
+                                                INPUT_TIMESCALE_OFFSET);
+    scale_factor = ( max_resolution / time_scale[0] );
+    execution_time_scale = ( scale_factor * max_resolution );
+}
+
+
+void init_btf_mem_section(void)
+{
+    unsigned int offset = SHARED_BTF_DATA_OFFSET/sizeof(int);
+    unsigned int btf_offset = (sizeof(btf_trace_info) / sizeof(int)) + offset;
+    btf_data = (btf_trace_info *)allocate_shared_memory(offset);
+    btf_info = (unsigned int *)allocate_shared_memory(btf_offset);
+}
 
 /*
  * initialize output buffer with the addresses to array elements
  */
-void outbuf_init(void ){
-	//This will be the same on each core
-	//debug interface in shared memory
-	outbuf[0] = (unsigned int *) cnt_address;
-	outbuf[1] = outbuf[0] + 1;
-	outbuf[2] = outbuf[1] + 1;
-	outbuf[3] = outbuf[2] + 1;
-	outbuf[4] = outbuf[3] + 1;
-	outbuf[5] = outbuf[4] + 1;
-	outbuf[6] = outbuf[5] + 1;
-	outbuf[7] = outbuf[6] + 1;
-	outbuf[8] = outbuf[7] + 1;
-	*outbuf[1] = 200;
-	//initialize buffer
-	int i;
-	//timer1init();
-	for (i=0;i<9;i++){
-		*outbuf[i] =0;
-	}
+void init_task_trace_buffer(void )
+{
+    get_execution_time_scale();
+    /* Initialize buffer */
+    int index;
+    /* The core buffer starts at the 0th offset of memory bank 3 of each core */
+    core_buffer = allocate_epiphany_memory(0);
+    /* The first 10 values are used to store the legacy RTF information. */
+    for (index = 0;index < RTF_DEBUG_TRACE_COUNT; index++)
+    {
+        core_buffer[index] = 0;
+    }
 }
 
-void traceRunningTask(unsigned taskNum){
-	*outbuf[RUNNINGTASK_FLAG] = taskNum;
+void traceRunningTask(unsigned taskNum)
+{
+    core_buffer[RUNNINGTASK_FLAG] = taskNum;
 }
 
-void traceTaskPasses(unsigned taskNum, int currentPasses){
-	if (taskNum == 1){
-		*outbuf[TASK1_FLAG] = currentPasses;
-	}else if (taskNum == 2){
-		*outbuf[TASK2_FLAG] = currentPasses;
-	}else if (taskNum == 3){
-		*outbuf[TASK3_FLAG] = currentPasses;
-	}
+void traceTaskPasses(unsigned taskNum, int currentPasses)
+{
+    if (taskNum == 1)
+    {
+        core_buffer[TASK1_FLAG] = currentPasses;
+    }
+    else if (taskNum == 2)
+    {
+        core_buffer[TASK2_FLAG] = currentPasses;
+    }
+    else if (taskNum == 3)
+    {
+        core_buffer[TASK3_FLAG] = currentPasses;
+    }
 }
 
-void updateTick(void){
-	*outbuf[TICK_FLAG] = xTaskGetTickCount();
+void updateTick(void)
+{
+    tick_count = xTaskGetTickCount();
+    core_buffer[TICK_FLAG] = tick_count;
 }
 
-void updateDebugFlag(int debugMessage){
-	*outbuf[DEBUG_FLAG] = debugMessage;
+void updateDebugFlag(int debugMessage)
+{
+    core_buffer[DEBUG_FLAG] = debugMessage;
 }
 
 
+/** Signal the host to read the BTF trace metadata */
+void signalHost(void)
+{
+    btf_trace_info btf_data_info;
+    unsigned int active_row = (e_get_coreid() ^ 0x808) >> 6;
+    e_mutex_lock(MUTEX_ROW, MUTEX_COL, &m);
+    do{
+        e_dma_copy(&btf_data_info, btf_data, sizeof(btf_trace_info));
+    }while(btf_data_info.core_write == 1);
+    btf_data_info.offset = BTF_TRACE_BUFFER_SIZE * (active_row * RING_BUFFER_SIZE);
+    btf_data_info.core_id = active_row;
+    btf_data_info.length = buffer_offset;
+    btf_data_info.core_write = 1;
+    e_dma_copy(btf_data, &btf_data_info, sizeof(btf_trace_info));
+    e_mutex_unlock(MUTEX_ROW, MUTEX_COL, &m);
+    buffer_offset = 0;
+}
 
 
+/* Dump the BTF trace event */
+void traceTaskEvent(int srcID, int srcInstance, btf_trace_event_type type,
+        int taskId, int taskInstance, btf_trace_event_name event_name, int data)
+{
+    unsigned char active_row = 0;
+    unsigned short offset = 0;
+    unsigned char index = 0;
+    unsigned int * trace_buf_addr = NULL;
+    btf_trace_data trace;
 
+    if((type == TASK_EVENT) && (event_name == PROCESS_TERMINATE))
+    {
+        traceRunningTask(0);
+    }
+    else if ((type == TASK_EVENT) && (event_name == PROCESS_START))
+    {
+        traceRunningTask(taskId);
+    }
+
+    active_row = (e_get_coreid() ^ 0x808) >> 6;
+    index = buffer_offset % RING_BUFFER_SIZE;
+    if (index == 0){
+        buffer_offset = 0;
+    }
+    offset = BTF_TRACE_BUFFER_SIZE * ((active_row * RING_BUFFER_SIZE) + index) ;
+    buffer_offset++;
+    trace_buf_addr = btf_info + offset;
+    trace.ticks = tick_count;
+    trace.srcId = srcID;
+    trace.srcInstance = srcInstance;
+    trace.eventTypeId = type;
+    trace.taskId = taskId;
+    trace.taskInstance = taskInstance;
+    trace.eventState = event_name;
+    trace.data = data;
+    e_dma_copy(trace_buf_addr, &trace, sizeof(btf_trace_data));
+}
 
 
diff --git a/RTFParallella/src/parallella/debugFlags.h b/RTFParallella/src/parallella/debugFlags.h
index 9db71ec..d9a56b5 100755
--- a/RTFParallella/src/parallella/debugFlags.h
+++ b/RTFParallella/src/parallella/debugFlags.h
@@ -14,59 +14,142 @@
 #ifndef SRC_PARALLELLA_DEBUGFLAGS_H_
 #define SRC_PARALLELLA_DEBUGFLAGS_H_
 
-#define cnt_address 	0x3000
-
-#define TASK1_FLAG			2
-#define TASK2_FLAG 			0
-#define TASK3_FLAG 			4
-#define TASK4_FLAG			0
-#define TASK5_FLAG			4
-#define RUNNINGTASK_FLAG 	6
-#define DEBUG_FLAG 			7
-#define TICK_FLAG			8
-
 /**
- * initialize output buffer in core memory
- *
- * Arguments:
+ * @file debugFlags.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 10 April 2020
+ * @brief This file declares the debug trace of the application running on Epiphany core.The
+ * debug trace consists in two forms. One is the visual form which is the legacy
+ * RTFParallella trace and can be seen while executing the application on Adapteva Parallella.
+ * The other is the BTF trace dump which can be viewed on Eclipse Trace Compass.
  *
  */
-void outbuf_init(void );
+
+#include "trace_utils_BTF.h"
+
+#define cnt_address     0x3000
+
+#define TASK1_FLAG             2
+#define TASK2_FLAG             0
+#define TASK3_FLAG             4
+#define TASK4_FLAG             0
+#define TASK5_FLAG             4
+#define RUNNINGTASK_FLAG       6
+#define DEBUG_FLAG             7
+#define TICK_FLAG              8
+
+
+#define BTF_TRACE_BUFFER_SIZE  8
+
+
 
 /**
- * write the index of the running task to output buffer
+ * @brief Get the time scaling factor for tick count
  *
- * Arguments:
- * taskNum			:	index of the task
+ *
+ * @return : Scale factor
+ *
+ */
+unsigned int get_time_scale_factor(void);
+
+/**
+ * @brief Initialize memory section for storing BTR trace data and metadata
+ *
+ * The function does not take any arguments. It initializes the BTF memory section
+ * from the shared memory area.
+ * @return : void
+ *
+ */
+
+void init_btf_mem_section(void);
+
+/**
+ * @brief Initialize output buffer in core memory
+ *
+ * The function initializes the epiphany core memory section for dumping the legacy
+ * RTParallella trace.
+ *
+ * @return : void
+ *
+ *
+ */
+void init_task_trace_buffer(void );
+
+/**
+ * @brief Write the index of the running task to output buffer
+ *
+ * The function writes the ID of the current task in execution to the Epiphany core memory
+ *
+ * @param[in] taskNum            :    index of the task
+ *
+ * @return : void
  *
  */
 void traceRunningTask(unsigned taskNum);
 
 /**
- * write the task instance (job) to output buffer
+ * @brief write the task instance (job) to output buffer
  *
- * Arguments:
- * taskNum			:	index of the task
- * currentPasses	:	instance of task (job number)
+ * The function writes the task instance number  of the current task in
+ * execution to the Epiphany core memory.
+ *
+ * @param[in] taskNum            :    index of the task
+ * @param[in] currentPasses    :    instance of task (job number)
  *
  */
 void traceTaskPasses(unsigned taskNum, int currentPasses);
 
 /**
- * update RTOS tick value in output buffer
+ * @brief Update RTOS tick value in output buffer
  *
- * Arguments:
+ * @return : void
  *
  */
 void updateTick(void);
 
 /**
- * Write a custom value to the output buffer for code coverage debugging
+ * @brief Write a custom value to the output buffer for code coverage debugging
  *
- * Arguments:
- * debugMessage			:	message to be written
  *
+ * @param[in] debugMessage            :    message to be written
+ *
+ *@return : void
  */
 void updateDebugFlag(int debugMessage);
 
+
+/**
+ * @brief Signal the host core to read the memory.
+ *
+ * The function locks the shared memory address using the epiphany mutex implementation.
+ * It waits until wait the host core processor has read the data.
+ * It then dumps the BTF trace metadata to the shared memory and and unlock the mutex.
+ * DMA channel 1 is used to dump the trace metadata.
+ *
+ * @return : void
+ *
+ */
+void signalHost(void);
+
+
+/**
+ * @brief Write the BTF trace data
+ *
+ * The function dumps the BTF trace data to the shared memory..
+ * DMA channel 1 is used to dump the trace data.
+ *
+ * @param[in] srcID          : Source ID of the task.
+ * @param[in] srcInstance    : Source instance of the task.
+ * @param[in] type           : Event type.
+ * @param[in] taskId         : Task Id.
+ * @param[in] taskInstance   : Task instance.
+ * @param[in] event_name     : Name of the event.
+ * @param[in] data           : Notes or shared label value
+ *
+ * @return : void
+ *
+ */
+void traceTaskEvent(int srcID, int srcInstance, btf_trace_event_type type,
+        int taskId, int taskInstance, btf_trace_event_name event_name, int data);
+
 #endif /* SRC_PARALLELLA_DEBUGFLAGS_H_ */
diff --git a/RTFParallella/src/parallella/host_main_example1.c b/RTFParallella/src/parallella/host_main_example1.c
index 060b795..f62179d 100644
--- a/RTFParallella/src/parallella/host_main_example1.c
+++ b/RTFParallella/src/parallella/host_main_example1.c
@@ -11,129 +11,314 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
-#include <e-hal.h> //hardware abstraction library
+#include <stddef.h>
 #include <time.h>   /* Needed for struct timespec */
+#include <e-hal.h>  /* hardware abstraction library */
+#include <e-loader.h>
 
-#include "c2c.h"
-#include "debugFlags.h"
-#include "shared_comms.h"
+#include "RTFParallellaConfig.h"
 #include "host_utils.h"
 #include "model_enumerations.h"
+#include "trace_utils_BTF.h"
 
-unsigned int shared_label_to_read[10];
-unsigned int shared_label_core_00[dstr_mem_sec_1_label_count];
-unsigned int shared_label_core_10[dstr_mem_sec_1_label_count];
-unsigned int shared_label_core[core_count][dstr_mem_sec_1_label_count];
-int main()
+#define CHUNK_SIZE 4096
+char file_buffer[CHUNK_SIZE + 256];
+static int buffer_count = 0 ;
+
+
+unsigned int shared_label_to_read[SHM_LABEL_COUNT];
+unsigned int shared_label_core_00[DSHM_SEC_LABEL_COUNT];
+unsigned int shared_label_core_10[DSHM_SEC_LABEL_COUNT];
+unsigned int shared_label_core[EXEC_CORE_COUNT][DSHM_SEC_LABEL_COUNT];
+unsigned int shared_dram_start_address = SHARED_DRAM_START_OFFSET;
+
+
+
+static void construct_btf_trace_header(FILE *stream)
 {
-	int label_enable_count_core0 = 0;
-	unsigned labelVisual_perCore[core_count][DSHM_visible_label_count];
-	unsigned int prv_val_preCore[core_count][DSHM_visible_label_count];
-	for (int i=0;i<core_count;i++){
-		get_visible_label_index(labelVisual_perCore[i],MEM_TYPE_DSHM);
-	}
-	unsigned labelVisual_SHM[SHM_visible_label_count];
-	unsigned int prv_val_SHM[SHM_visible_label_count];
-	get_visible_label_index(labelVisual_SHM,MEM_TYPE_SHM);
-	for (int i=0;i<core_count;i++){
-		printf ("@%d : ",i);
-		for (int j=0;j<DSHM_visible_label_count;j++){
-			printf("L%d ",labelVisual_perCore[i][j]);
-		}
-		printf("\n");
-	}
-	fprintf(stderr,"===========================================================================\n");
-	fprintf(stderr,"      |   Tasks being executed  | observed labels values |\n");
-	fprintf(stderr,"%6s|%12s|%12s|"," tick ","   Core 1   ","   Core 2   ");
-	for (int i=0;i<core_count;i++){
-		print_legend_enum(DSHM_visible_label_count,labelVisual_perCore[i],MEM_TYPE_DSHM);
-	}
-	print_legend_enum(SHM_visible_label_count,labelVisual_SHM,MEM_TYPE_SHM);
-	fprintf(stderr,"\n");
-	fprintf(stderr,"===========================================================================\n");
-	//counters for row and column, cored id and loop counter
-	unsigned   row_loop,col_loop;
-	// this will contain the epiphany platform configuration
-	e_platform_t epiphany;
-	e_epiphany_t dev;
-	e_return_stat_t result;
-	unsigned int message[9];
-	unsigned int message2[9];
-	int loop;
-	int addr;
-	e_mem_t emem;
-	e_init(NULL);
-	/*
-	 * reserve shared mem sections
-	 * one section for each shared label in the model
-	 * shared mem address space starts at 0x0100_0000
-	 * and ends at 0x3FFF_FFFF
-	 *
-	 */
-	e_alloc(&emem, shared_mem_section , sizeof(shared_label_to_read));
-	e_reset_system(); // reset the epiphnay chip
-	e_get_platform_info(&epiphany);//gets the configuration info for the parallella platofrm
-	//debug flag
-	//------------------------------------------------
-	//one core within the parallella work group is 1 x 1 i.e single core
-	e_open(&dev,0,0,2,1); //2 rows one column rectangle size 2*1
-	//reset the group
-	e_reset_group(&dev);
-	e_return_stat_t result1;
-	e_return_stat_t result2;
-	//load the group
-	result1 =  e_load("core0_main.elf",&dev,0,0,E_FALSE);
-	result2 =  e_load("core1_main.elf",&dev,1,0,E_FALSE);
-	if (result1 != E_OK || result2 != E_OK){
-		fprintf(stderr,"Error Loading the Epiphany Application 1 %i\n", result);
-	}
-	e_start_group(&dev);
-	addr = cnt_address;
-	int pollLoopCounter = 0;
-	unsigned int chainLatencyEndIndicator = 0;
-	unsigned int chainLatencyStartIndicator = 10e6;
-	unsigned int lat1 = 0;
-	char buffer1[label_str_len];
-	array_init(buffer1,label_str_len);
-	char buffer2[label_str_len];
-	array_init(buffer2,label_str_len);
-
-
-	int prev1,prev2,prev3;
-	for (pollLoopCounter=0;pollLoopCounter<=40;pollLoopCounter++){
-		message[3] = 0;
-		e_read(&dev,0,0,addr, &message, sizeof(message));
-		e_read(&dev,0,0,dstr_mem_offset_sec_1, &shared_label_core[0], sizeof(shared_label_core_00));
-		e_read(&dev,1,0,addr, &message2, sizeof(message2));
-		e_read(&dev,1,0,dstr_mem_offset_sec_1, &shared_label_core[1], sizeof(shared_label_core_10));
-		e_read(&emem,0,0,0x00, &shared_label_to_read, sizeof(unsigned int));
-		if (message[8]!= message2[8] ){
-			//fprintf(stderr,"NIS->");
-		}
-		get_task_name(message[6],buffer1);
-		get_task_name(message2[6],buffer2);
-		fprintf(stderr," %4d | %10s | %10s | ",message[8]+1,buffer1,buffer2);
-		for (int i=0;i<core_count;i++){
-			user_config_print_values_auto(DSHM_visible_label_count,labelVisual_perCore[i],shared_label_core[i],prv_val_preCore[i]);
-		}
-		for (int i=0;i<10;i++){
-			fprintf(stderr," %3d |",shared_label_to_read[i]);
-		}
-
-		//user_config_print_values_auto(SHM_visible_label_count,labelVisual_SHM,shared_label_to_read,prv_val_SHM);
-		fprintf(stderr,"\n");
-		nsleep(1);
-	}
-	fprintf(stderr,"----------------------------------------------\n");
-	e_close(&dev);
-	e_finalize();
-	//----------------------------------------------------------------------------
-	//----------------------------------------------------------------------------
-	fprintf(stderr,"RFTP demo complete \n ");
-	return 0;
+    write_btf_trace_header_config(stream);
+    write_btf_trace_header_entity_type(stream, TASK_EVENT);
+    write_btf_trace_header_entity_type(stream, RUNNABLE_EVENT);
+    write_btf_trace_header_entity_type(stream, SIGNAL_EVENT);
+    generate_task_entity_table();
+    generate_runnable_entity_table();
+    generate_signal_entity_table();
+    generate_hw_entity_table();
+    write_btf_trace_header_entity_table(stream);
+    write_btf_trace_header_entity_type_table(stream);
 }
 
+
+static void parse_trace_data(FILE *trace)
+{
+    FILE *fp_temp = NULL;
+    unsigned int trace_data[BTF_TRACE_BUFFER_SIZE];
+    unsigned int active_row;
+    if (trace == NULL )
+    {
+        return;
+    }
+    fp_temp = fopen((const char *)"temp.txt", "r");
+    if (fp_temp == NULL)
+    {
+        exit(1);
+    }
+    while( fscanf(fp_temp, "%d %d %d %d %d %d %d %d %d\n"
+                    , &active_row, &trace_data[0], &trace_data[1], &trace_data[2],
+                    &trace_data[3], &trace_data[4], &trace_data[5], &trace_data[6],
+                    &trace_data[7]) != EOF )
+    {
+        write_btf_trace_data(trace, active_row, trace_data);
+    }
+    if (fp_temp != NULL)
+    {
+        fclose(fp_temp);
+        fp_temp = NULL;
+    }
+    remove("temp.txt");
+}
+
+/* Entry point of the application running on the HOST Core. */
+int main(int argc, char *argv[])
+{
+    /* This will contain the epiphany platform configuration */
+    e_platform_t epiphany;
+    e_epiphany_t dev;
+    e_mem_t emem;
+    unsigned int ecore0[RTF_DEBUG_TRACE_COUNT] = {0};
+    unsigned int ecore1[RTF_DEBUG_TRACE_COUNT] = {0};
+    unsigned int labelVisual_perCore[EXEC_CORE_COUNT][DSHM_VISIBLE_LABEL_COUNT] = {{0, 0}, {0, 0}};
+    unsigned int prv_val_preCore[EXEC_CORE_COUNT][DSHM_VISIBLE_LABEL_COUNT] = {{0, 0}, {0, 0}};
+    unsigned int labelVisual_SHM[SHM_VISIBLE_LABEL_COUNT] = {0};
+    unsigned int prv_val_SHM[SHM_VISIBLE_LABEL_COUNT] = {0};
+    int index = 0;
+    btf_trace_info trace_info;
+
+    trace_info.length = 0;
+    trace_info.core_write = 0;
+    trace_info.offset = 0;
+    trace_info.core_id = 0;
+
+    /* File pointer to store the BTF data which will be used for
+     * further processing. The file generated will be deleted after the processing is done */
+    FILE *fp_temp = NULL;
+    /* File pointer to store the  BTF trace file */
+    FILE *fp_to_trace = NULL;
+    int scale_factor = parse_btf_trace_arguments(argc, argv);
+    char trace_file_path[512] = {0};
+    get_btf_trace_file_path(trace_file_path);
+    if (strlen((const char *)trace_file_path) != 0)
+    {
+        fp_to_trace = fopen((const char *)trace_file_path, "w+");
+        if (fp_to_trace == NULL)
+        {
+            fprintf(stderr,"Output redirected to stderr\n");
+            fp_to_trace = stderr;
+        }
+    }
+    else
+    {
+        fprintf(stderr,"Output redirected to stderr\n");
+        fp_to_trace = stderr;
+    }
+    construct_btf_trace_header(fp_to_trace);
+
+    fp_temp = fopen((const char *)"temp.txt", "w+");
+    if (fp_temp == NULL)
+    {
+        exit(0);
+    }
+
+    for (index = 0;index < EXEC_CORE_COUNT; index++)
+    {
+        /* Get the visible label index per core for epiphany device */
+        get_visible_label_index(labelVisual_perCore[index],MEM_TYPE_DSHM);
+    }
+
+    /* Get the visible label index for the variables stored in shared memory */
+    get_visible_label_index(labelVisual_SHM,MEM_TYPE_SHM);
+
+    for (index = 0;index < EXEC_CORE_COUNT; index++)
+    {
+        printf ("@%d : ",index);
+        for (int count = 0; count < DSHM_VISIBLE_LABEL_COUNT; count++)
+        {
+            printf("L%d ",labelVisual_perCore[index][count]);
+        }
+        printf("\n");
+    }
+
+    fprintf(stderr,"======================================================================="
+                    "=======================================================================\n");
+    fprintf(stderr,"        |   Tasks being executed  |                                 "
+            "      observed labels values                                          |\n");
+    fprintf(stderr,"%8s|%12s|%12s|"," tick ","   Core 1   ","   Core 2   ");
+    for (index = 0;index < EXEC_CORE_COUNT;index++)
+    {
+        /* Get the device shared Label name*/
+        print_legend_enum(DSHM_VISIBLE_LABEL_COUNT, labelVisual_perCore[index], MEM_TYPE_DSHM);
+    }
+
+    /* Get the shared label name */
+    print_legend_enum(SHM_VISIBLE_LABEL_COUNT + 2, labelVisual_SHM, MEM_TYPE_SHM);
+    fprintf(stderr,"\n");
+    fprintf(stderr,"======================================================================="
+                    "=======================================================================\n");
+
+    e_init(NULL);
+
+    /* Reserve the memory for the data in the shared dram region to be shared between
+     * host and epiphany core. The dram offset starts at 0x01000000 which corresponds
+     * to the global address as 0x8F000000. */
+    if (E_OK != e_alloc(&emem, (unsigned int)shared_dram_start_address , SHARED_DRAM_SIZE))
+    {
+        fprintf(stderr, "Error in reserving the shared dram buffer\n");
+    }
+
+
+    /* Reset the system and get the platform information. */
+    e_reset_system();
+    e_get_platform_info(&epiphany);
+
+    /* one core within the parallella work group is 1 x 1 i.e single core
+     * 2 rows one column rectangle size 2*1.
+     */
+    e_open(&dev,0,0,2,1);
+    /* reset the group */
+    e_reset_group(&dev);
+    /* load the group */
+    if (E_OK != e_load("core0_main.elf", &dev, 0, 0, E_FALSE))
+    {
+        fprintf(stderr,"Error Loading the Epiphany Application on core with row=0 and col=0\n");
+    }
+    if (E_OK != e_load("core1_main.elf", &dev, 1, 0, E_FALSE))
+    {
+        fprintf(stderr,"Error Loading the Epiphany Application on core with row=1 and col=0\n");
+    }
+    /* Write the time unit used for the configuration of the clock cycle per tick */
+    if (sizeof(int) != e_write(&emem, 0, 0, INPUT_TIMESCALE_OFFSET, &scale_factor, sizeof(int)))
+    {
+        fprintf(stderr, "Error in writing to the shared dram buffer\n");
+    }
+
+    /* Write the initialized trace buffer values to the shared memory */
+    if (sizeof(btf_trace_info) != e_write(&emem, 0, 0, SHARED_BTF_DATA_OFFSET, &trace_info,
+            sizeof(btf_trace_info)))
+    {
+        fprintf(stderr, "Error in writing to the shared dram buffer\n");
+    }
+
+    e_start_group(&dev);
+    int pollLoopCounter = 0;
+    char buffer1[LABEL_STRLEN] = {0};
+    char buffer2[LABEL_STRLEN] = {0};
+
+    unsigned int btf_trace[BTF_TRACE_BUFFER_SIZE * 6] = {0};
+    unsigned int core_id = 0;
+    unsigned char btf_data_index = 0;
+    unsigned int btf_data_start_offset = (SHARED_BTF_DATA_OFFSET + sizeof(btf_trace_info));
+    /* Create a new temp file for storing the trace data */
+    /* Loop over some random number, can be replaced with an infinite loop */
+    for (pollLoopCounter = 0; pollLoopCounter <= 100000; pollLoopCounter++)
+    {
+        e_read(&emem, 0, 0, SHARED_BTF_DATA_OFFSET , &trace_info, sizeof(btf_trace_info));
+        if (trace_info.core_write == 1)
+        {
+            e_read(&emem, 0, 0, SHARED_BTF_DATA_OFFSET , &trace_info, sizeof(btf_trace_info));
+#if 0
+            fprintf(stdout, "%d %d %d %d\n", trace_info.core_id, trace_info.length, trace_info.offset, trace_info.core_write);
+            trace_info.core_write = 0;
+            e_write(&emem, 0, 0, SHARED_BTF_DATA_OFFSET + offsetof(btf_trace_info, core_write),
+                    &trace_info.core_write, sizeof(int));
+#else
+            e_read(&emem, 0, 0, (btf_data_start_offset + (trace_info.offset * sizeof(int))),
+                                &btf_trace, BTF_TRACE_BUFFER_SIZE * sizeof(int) * trace_info.length);
+
+
+            for(btf_data_index = 0; btf_data_index < trace_info.length; btf_data_index++)
+            {
+                uint16_t offset = btf_data_index * BTF_TRACE_BUFFER_SIZE;
+                buffer_count += sprintf( &file_buffer[buffer_count], "%d %d %d %d %d %d %d %d %d\n",
+                        trace_info.core_id, btf_trace[offset],
+                        btf_trace[offset + 1], btf_trace[offset+2], btf_trace[offset+3],
+                        btf_trace[offset+4], btf_trace[offset+5], btf_trace[offset+6],
+                        btf_trace[offset+7]);
+            }
+
+
+            if( buffer_count >= CHUNK_SIZE )
+            {
+                fwrite( file_buffer, buffer_count, 1, fp_temp ) ;
+                buffer_count = 0 ;
+            }
+
+            if (trace_info.core_id == 0)
+            {
+                e_read(&dev, 0, 0, ECORE_RTF_BUFFER_ADDR, ecore0, sizeof(ecore0));
+                e_read(&dev, 0, 0, DSHM_LABEL_EPI_CORE_OFFSET, &shared_label_core[0],
+                                    sizeof(shared_label_core_00));
+            }
+            else
+            {
+                e_read(&dev, 1, 0, ECORE_RTF_BUFFER_ADDR, ecore1, sizeof(ecore1));
+                e_read(&dev, 1, 0, DSHM_LABEL_EPI_CORE_OFFSET, &shared_label_core[1],
+                                    sizeof(shared_label_core_10));
+            }
+            e_read(&emem, 0, 0, 0x1000 , shared_label_to_read, sizeof(shared_label_to_read));
+            trace_info.core_write = 0;
+            e_write(&emem, 0, 0, SHARED_BTF_DATA_OFFSET + offsetof(btf_trace_info, core_write),
+                    &trace_info.core_write, sizeof(int));
+            if((ecore1[6] != 0) || (ecore0[6] != 0))
+            {
+                get_task_name(ecore0[6],buffer1);
+                get_task_name(ecore1[6],buffer2);
+
+                fprintf(stderr," %6d | %10s | %10s | ", ((ecore0[8] * scale_factor)), buffer1, buffer2);
+
+                for (index = 0; index < EXEC_CORE_COUNT; index++)
+                {
+                   user_config_print_values_auto(DSHM_VISIBLE_LABEL_COUNT,
+                            labelVisual_perCore[index], shared_label_core[index], prv_val_preCore[index]);
+                }
+
+                for (index = 0; index < (SHM_VISIBLE_LABEL_COUNT + 2); index++)
+                {
+                    fprintf(stderr," %10d |",shared_label_to_read[index]);
+                }
+                fprintf(stderr,"\n");
+            }
+#endif
+        }
+    }
+    // Write remainder
+    if( buffer_count > 0 )
+    {
+        fwrite( file_buffer, buffer_count, 1, fp_temp );
+    }
+    fprintf(stderr,"----------------------------------------------\n");
+    if (fp_temp != NULL)
+    {
+        fclose(fp_temp);
+        fp_temp = NULL;
+    }
+    /* Parse the trace data and store the trace file */
+    parse_trace_data(fp_to_trace);
+    if (fp_to_trace != NULL)
+    {
+        fclose(fp_to_trace);
+        fp_to_trace = NULL;
+    }
+
+    e_close(&dev);
+    e_finalize();
+    fprintf(stderr,"RFTP demo complete \n ");
+    return 0;
+}
+
+
+
diff --git a/RTFParallella/src/parallella/host_utils.c b/RTFParallella/src/parallella/host_utils.c
index 031cd96..364f9cc 100755
--- a/RTFParallella/src/parallella/host_utils.c
+++ b/RTFParallella/src/parallella/host_utils.c
@@ -13,115 +13,147 @@
 
 #include "host_utils.h"
 
-void array_init(unsigned array[],unsigned array_size){
-	for (int i=0;i<array_size;i++){
-		array[i] = 0;
-	}
+void array_init(unsigned array[],unsigned array_size)
+{
+    for (int index = 0; index < array_size; index++)
+    {
+        array[index] = 0;
+    }
 }
 
 
-void user_config_print_legend(LabelVisual core_config,unsigned array[]){
-	for (int i=0;i<core_config.num_visible_labels;i++){
-		fprintf(stderr,"(L,%u,%u,%u)|",core_config.row,core_config.col,array[i]);
-	}
+void user_config_print_legend(LabelVisual core_config,unsigned array[])
+{
+    for (int index = 0; index < core_config.num_visible_labels; index++)
+    {
+        fprintf(stderr,"(L,%u,%u,%u)|", core_config.row, core_config.col, array[index]);
+    }
 }
 
-void user_config_print_values(LabelVisual core_config,unsigned array[],unsigned int values_array[],unsigned int prv_val_array[]){
-	for(int i=0;i<core_config.num_visible_labels;i++){
-		int val_ind = array[i];
-		unsigned int val_to_print = values_array[val_ind];
-		if (val_to_print == prv_val_array[val_ind]){
-			fprintf(stderr,"  ----   |");
-		}else {
-			fprintf(stderr,"  %4d   |",val_to_print);
-			prv_val_array[val_ind] = val_to_print;
-		}
-
-	}
+void user_config_print_values(LabelVisual core_config,unsigned array[],
+        unsigned int values_array[],unsigned int prv_val_array[])
+{
+    for(int index = 0; index < core_config.num_visible_labels; index++)
+    {
+        int val_ind = array[index];
+        unsigned int val_to_print = values_array[val_ind];
+        if (val_to_print == prv_val_array[val_ind])
+        {
+            fprintf(stderr,"  ----   |");
+        }
+        else
+        {
+            fprintf(stderr,"  %4d   |",val_to_print);
+            prv_val_array[val_ind] = val_to_print;
+        }
+    }
 }
 
-LabelVisual get_user_input(unsigned indices[]){
-	unsigned row_in,col_in,label_num;
-	printf("Enter row and column of core to read ");
-	scanf("%u,%u",&row_in,&col_in);
-	printf("Enter number of visible labels");
-	scanf("%u",&label_num);
-	unsigned visible_label_array[label_num];
-	printf("Enter indices of labels\n");
-	for (int i=0;i<label_num;i++){
-		scanf("%u",&indices[i]);
-	}
-	LabelVisual retVal;
-	retVal.row = row_in;
-	retVal.col = col_in;
-	retVal.num_visible_labels = label_num;
-	return retVal;
+LabelVisual get_user_input(unsigned indices[])
+{
+    unsigned row_in,col_in,label_num;
+    printf("Enter row and column of core to read ");
+    scanf("%u,%u",&row_in,&col_in);
+    printf("Enter number of visible labels");
+    scanf("%u",&label_num);
+    unsigned visible_label_array[label_num];
+    printf("Enter indices of labels\n");
+    for (int index = 0; index < label_num; index++)
+    {
+        scanf("%u",&indices[index]);
+    }
+    LabelVisual retVal;
+    retVal.row = row_in;
+    retVal.col = col_in;
+    retVal.num_visible_labels = label_num;
+    return retVal;
 }
 
 
-void user_config_print_legend_auto(unsigned array_length,unsigned array[]){
-	for (int i=0;i<array_length;i++){
-		fprintf(stderr,"(F,%u)|",array[i]);
-	}
+void user_config_print_legend_auto(unsigned array_length,unsigned array[])
+{
+    for (int index = 0; index < array_length; index++)
+    {
+        fprintf(stderr,"(F,%u)|",array[index]);
+    }
 }
 
-void user_config_print_values_auto(unsigned visible_label_count,unsigned array[],unsigned int values_array[],unsigned int prv_val_array[]){
-	for(int i=0;i<visible_label_count;i++){
-		int val_ind = array[i];
-		unsigned int val_to_print = values_array[val_ind];
-		if (val_to_print == prv_val_array[val_ind]){
-			fprintf(stderr,"            |");
-		}else {
-			fprintf(stderr," %10d |",val_to_print);
-			prv_val_array[val_ind] = val_to_print;
-		}
-	}
+void user_config_print_values_auto(unsigned visible_label_count,unsigned array[],
+        unsigned int values_array[],unsigned int prv_val_array[])
+{
+    for(int index = 0; index < visible_label_count; index++)
+    {
+        int val_ind = array[index];
+        unsigned int val_to_print = values_array[val_ind];
+        if (val_to_print == prv_val_array[val_ind])
+        {
+            fprintf(stderr,"            |");
+        }
+        else
+        {
+            fprintf(stderr," %10d |",val_to_print);
+            prv_val_array[val_ind] = val_to_print;
+        }
+    }
 }
 
-unsigned get_user_input_DRAM(unsigned indices[]){
-	unsigned label_num;
-	printf("Enter number of visible labels( shared mem)");
-	scanf("%u",&label_num);
-	unsigned visible_label_array[label_num];
-	printf("Enter indices of labels\n");
-	for (int i=0;i<label_num;i++){
-		scanf("%u",&indices[i]);
-	}
-	return label_num;
+unsigned get_user_input_DRAM(unsigned indices[])
+{
+    unsigned label_num;
+    printf("Enter number of visible labels( shared mem)");
+    scanf("%u",&label_num);
+    unsigned visible_label_array[label_num];
+    printf("Enter indices of labels\n");
+    for (int index = 0; index < label_num; index++)
+    {
+        scanf("%u",&indices[index]);
+    }
+    return label_num;
 }
 
-void print_legend_enum (unsigned label_count,unsigned label_positions[], unsigned memory_type){
-	char buf[label_count*label_str_len];
-	for (int i=0;i<label_str_len;i++){
-		buf[i] = " ";
-	}
-	char small_buf[label_str_len];
-	//array_init(buf,label_str_len);
-	if (memory_type==MEM_TYPE_SHM){
-		for (int i=0;i<label_count;i++){
-			get_SHM_label_name(i,small_buf);
-			fprintf(stderr,"| %s ",small_buf);
-			//fflush(stderr);
-		}
-	} else {
-		for (int i=0;i<label_count;i++){
-			get_DSHM_label_name(i,small_buf);
-			fprintf(stderr,"| %s ", small_buf);
-		}
-	}
-	//fprintf(stderr,"%s",buf);
-	//fflush(stderr);
+void print_legend_enum (unsigned label_count,unsigned label_positions[], unsigned memory_type)
+{
+    char label_name[LABEL_STRLEN] = {0};
+    int index = 0;
+
+    if (memory_type == MEM_TYPE_SHM)
+    {
+        for (index = 0; index < label_count; index++)
+        {
+            /* Get the shared label name */
+            get_SHM_label_name(index,label_name);
+            fprintf(stderr," %s |",label_name);
+        }
+    }
+    else
+    {
+        for (index = 0; index < label_count; index++)
+        {
+            /* Get the distributed shared label name */
+            get_DSHM_label_name(index, label_name);
+            fprintf(stderr," %s |", label_name);
+        }
+    }
+    fflush(stderr);
 }
 
 
-int nsleep(long miliseconds){
+int nsleep(long miliseconds)
+{
    struct timespec req, rem;
-   if(miliseconds > 999){
-        req.tv_sec = (int)(miliseconds / 1000);                            /* Must be Non-Negative */
-        req.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000)) * 1000000; /* Must be in range of 0 to 999999999 */
-   } else {
-        req.tv_sec = 0;                         /* Must be Non-Negative */
-        req.tv_nsec = miliseconds * 1000000;    /* Must be in range of 0 to 999999999 */
+   if(miliseconds > 999)
+   {
+       /* Must be Non-Negative */
+        req.tv_sec = (int)(miliseconds / 1000000);
+        /* Must be in range of 0 to 999999999 */
+        req.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000000)) * 1000;
+   }
+   else
+   {
+       /* Must be Non-Negative */
+        req.tv_sec = 0;
+        /* Must be in range of 0 to 999999999 */
+        req.tv_nsec = miliseconds * 1000;
    }
    return nanosleep(&req , &rem);
 }
diff --git a/RTFParallella/src/parallella/host_utils.h b/RTFParallella/src/parallella/host_utils.h
index 140336d..bada957 100644
--- a/RTFParallella/src/parallella/host_utils.h
+++ b/RTFParallella/src/parallella/host_utils.h
@@ -11,6 +11,14 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 
+/**
+ * @file host_utils.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 24 May 2020
+ * @brief This file is used to define the utility functions for the host core application.
+ *
+ */
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -25,24 +33,15 @@
 
 #define READ_PRECISION_US 1000
 
-#define MEM_TYPE_SHM 	0
-#define MEM_TYPE_DSHM 	1
+#define MEM_TYPE_SHM     0
+#define MEM_TYPE_DSHM     1
 
-typedef struct{
-	unsigned row;
-	unsigned col;
-	unsigned num_visible_labels;
+typedef struct labelVisual_t {
+    unsigned row;                   /**< Row ID of the hardware core */
+    unsigned col;                   /**< Column ID of the hardware core */
+    unsigned num_visible_labels;    /**< Number of visual labels */
 }LabelVisual;
 
-/**
- * read a value of a label in a distributed shared memory section
- *
- * Arguments:
- * row			:	absolute row number of the core
- * col			:	absolute column number of the core
- * label_indx	:	index of the target shared label
- *
- */
 void array_init(unsigned array[],unsigned array_size);
 
 void user_config_print_legend(LabelVisual core_config,unsigned array[]);
diff --git a/RTFParallella/src/parallella/label_man_core0.c b/RTFParallella/src/parallella/label_man_core0.c
index 08bdbc2..c5087a6 100644
--- a/RTFParallella/src/parallella/label_man_core0.c
+++ b/RTFParallella/src/parallella/label_man_core0.c
@@ -10,49 +10,51 @@
  *     Contributors:
  *          Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
-
+#include "e-lib.h"
+#include "RTFParallellaConfig.h"
+#include "shared_comms.h"
+#include "c2c.h"
 #include "label_man_core0.h"
 
-//create shm sections' structs
-SHM_section sec1 = {0x01001000,10};
-DSHM_section sec1_core_00 = {0,0,0x4000,10};
-DSHM_section sec1_core_10 = {1,0,0x4000,10};
-
-
-//pointer declarations for shm sections accessed by this core
-unsigned int* sec1_global_pointer;
-unsigned int* sec2_global_pointer;
-
-//initialize shm sections and assign pointers
-
-void init_mem_sections(void){
-	sec1_global_pointer = shm_section_init(sec1);
-}
-
-
-void init_DSHM_sections(void){
-	DSHM_section_init(sec1_core_00);
-	DSHM_section_init(sec1_core_10);
-}
-
-
-
-//extern unsigned int shared_label1;
+DSHM_section sec1_core_00 = {0,0,DSHM_LABEL_EPI_CORE_OFFSET,10};
+DSHM_section sec1_core_10 = {1,0,DSHM_LABEL_EPI_CORE_OFFSET,10};
 
 int label5_10_00;
 
 int label5_10_00_copy1;
 
-int shared_label_1;
+int shared_label_1 = 0;
 int shared_label_2 = 97;
 int shared_label_10 = 0;
 
 extern int passes1;
 
+
+/* Pointer declaration for global shared memory section */
+static unsigned int* sec1_global_pointer;
+
+
+/*initialize shm sections and assign pointers */
+
+void init_mem_sections(void)
+{
+    sec1_global_pointer = allocate_shared_memory(SHARED_LABEL_OFFSET/sizeof(int));
+    for (int index = 0; index < SHM_LABEL_COUNT; index++)
+    {
+        sec1_global_pointer[index] = 0;
+    }
+}
+
+
+void init_DSHM_sections(void){
+    DSHM_section_init(sec1_core_00);
+    DSHM_section_init(sec1_core_10);
+}
+
 //-------
 void cIn5ms(){
-	label5_10_00_copy1 = label5_10_00;
-	shared_label_2 = 97 + passes1;
+    label5_10_00_copy1 = label5_10_00;
+    shared_label_2 = 97 + passes1;
 }
 void cIn10ms(){
 
@@ -62,32 +64,28 @@
 }
 
 void cIn10msCore2(){
-	shared_label_1 = read_DSHM_section(sec1_core_00,0);
-	//shared_label_1 = shared_label_read_core(1,0,0);
+    shared_label_1 = read_DSHM_section(sec1_core_00,0);
 }
 void cIn20msCore2(){
-	shared_label_10 = read_shm_section(sec1_global_pointer,0);
+    shared_label_10 = read_shm_section(sec1_global_pointer,0);
 }
 
 //-------
 void cOut5ms(){
-	label5_10_00 = label5_10_00_copy1;
-	write_DSHM_section(sec1_core_10,0,shared_label_2);
-	//shared_label_write_core(1,0,0,shared_label_2);
+    label5_10_00 = label5_10_00_copy1;
+    write_DSHM_section(sec1_core_10,0,shared_label_2);
 }
-void cOut10ms(){
-	write_shm_section(sec1_global_pointer,0,2);
-	//shared_label_write(0,2);
+void cOut10ms()
+{
+    write_shm_section(sec1_global_pointer,0,3);
 }
 void cOut20ms(){
 
 }
 void cOut10msCore2(){
-	shared_label_1++;
-	write_shm_section(sec1_global_pointer,1,shared_label_1);
-	//shared_label_write(1,shared_label_1);
+    shared_label_1++;
+    write_shm_section(sec1_global_pointer,1,shared_label_1);
 }
 void cOut20msCore2(){
-	write_shm_section(sec1_global_pointer,3,shared_label_10 + 1);
-	//shared_label_write(3,shared_label_10 + 1);
+    write_shm_section(sec1_global_pointer,2,shared_label_10 + 1);
 }
diff --git a/RTFParallella/src/parallella/label_man_core0.h b/RTFParallella/src/parallella/label_man_core0.h
index 54f6f11..0f910f9 100644
--- a/RTFParallella/src/parallella/label_man_core0.h
+++ b/RTFParallella/src/parallella/label_man_core0.h
@@ -14,8 +14,14 @@
 #ifndef SRC_PARALLELLA_LABEL_MAN_CORE0_H_
 #define SRC_PARALLELLA_LABEL_MAN_CORE0_H_
 
-#include "shared_comms.h"
-#include "c2c.h"
+/**
+ * @file label_man_core0.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 24 May 2020
+ * @brief This file is used to define the functions for implementing the cIn and cOut handler and
+ * reading and writing of shared and distributed labels and signals.
+ *
+ */
 
 #define num_unique_sections 1
 
diff --git a/RTFParallella/src/parallella/model_enumerations.c b/RTFParallella/src/parallella/model_enumerations.c
index dce7949..4746445 100644
--- a/RTFParallella/src/parallella/model_enumerations.c
+++ b/RTFParallella/src/parallella/model_enumerations.c
@@ -11,78 +11,178 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 
+
 #include "model_enumerations.h"
+#include "RTFParallellaConfig.h"
+#include "trace_utils_BTF.h"
 
 
-char SHM_sec1_enum [SHM_section1_label_count][label_str_len] =
+static const char SHM_sec1_enum [SHM_LABEL_COUNT][LABEL_STRLEN] =
 {
-  "sh_label_a",
-  "sh_label_b",
-  "sh_label_c",
-  "sh_label_d",
-  "sh_label_e",
-  "sh_label_f",
-  "sh_label_g",
-  "sh_label_h",
-  "sh_label_i",
-  "sh_label_j"
+    "sh_label_a",
+    "sh_label_b",
+    "sh_label_c",
+    "sh_label_d",
+    "sh_label_e",
+    "sh_label_f",
+    "sh_label_g",
+    "sh_label_h",
+    "sh_label_i",
+    "sh_label_j"
 };
 
-char DSHM_sec1_enum [DSHM_section1_label_count][label_str_len] =
+static const char DSHM_sec1_enum [DSHM_LABEL_COUNT][LABEL_STRLEN] =
 {
-  "DSH_labelA",
-  "DSH_labelB",
-  "DSH_labelC",
-  "DSH_labelD",
-  "DSH_labelE",
-  "DSH_labelF",
-  "DSH_labelG",
-  "DSH_labelH",
-  "DSH_labelI",
-  "DSH_labelJ"
+    "DSH_labelA",
+    "DSH_labelB",
+    "DSH_labelC",
+    "DSH_labelD",
+    "DSH_labelE",
+    "DSH_labelF",
+    "DSH_labelG",
+    "DSH_labelH",
+    "DSH_labelI",
+    "DSH_labelJ"
 };
 
-char task_enum [task_count +1][label_str_len] =
+static const char task_enum [][LABEL_STRLEN] =
 {
-  "[idle]",
-  "Task5ms0",
-  "Task10ms0",
-  "Task20ms0",
-  "Task10ms1",
-  "Task20ms1"
+    "[idle]",
+    "Task5ms0",
+    "Task10ms0",
+    "Task20ms0",
+    "Task10ms1",
+    "Task20ms1"
 };
 
-unsigned DSHM_visible_labels [DSHM_visible_label_count] = {0,1};
-unsigned SHM_visible_labels [SHM_visible_label_count] = {0,1};
+
+static const char runnable_enum[][LABEL_STRLEN] =
+{
+    "handler5ms",
+    "handler10ms",
+    "handler20ms",
+    "handler10msCore2",
+    "handler20msCore2",
+};
+
+static const char hw_enum[][LABEL_STRLEN] = {
+    "Core_0",
+    "Core_1"
+};
 
 
+static unsigned int DSHM_visible_labels [DSHM_VISIBLE_LABEL_COUNT] = {0,1};
+static unsigned int SHM_visible_labels [SHM_VISIBLE_LABEL_COUNT] = {0,1};
 
-void get_SHM_label_name (int index,char str[]){
-	for (int i=0;i<label_str_len;i++){
-		str[i] = SHM_sec1_enum[index][i];
-	}
+
+/**
+ * Get the string name of DRAM shared label
+ */
+void get_SHM_label_name (int index,char str[])
+{
+    for (int pos = 0; pos < LABEL_STRLEN; pos++)
+    {
+        str[pos] = SHM_sec1_enum[index][pos];
+    }
 }
 
-void get_DSHM_label_name(int index,char str[]){
-	for (int i=0;i<label_str_len;i++){
-		str[i] = DSHM_sec1_enum[index][i];
-	}
+
+
+/**
+ * Get the string name of distributed shared label (on a core)
+ */
+void get_DSHM_label_name(int index,char str[])
+{
+    for (int pos = 0; pos < LABEL_STRLEN; pos++)
+    {
+        str[pos] = DSHM_sec1_enum[index][pos];
+    }
 }
 
-void get_task_name(int index,char *str){
-	for (int i=0;i<label_str_len;i++){
-		str[i] = task_enum[index][i];
-	}
+
+/**
+ * Get the string name of the task being run
+ */
+void get_task_name(int index,char *str)
+{
+    for (int pos = 0; pos < LABEL_STRLEN; pos++)
+    {
+        str[pos] = task_enum[index][pos];
+    }
 }
 
-void get_visible_label_index(unsigned array[],unsigned mem_type){
-	if (mem_type==0){
-		for (int i=0; i<SHM_visible_label_count;i++){
-			array[i] = SHM_visible_labels[i];
-		}
-	}
-	for (int i=0; i<DSHM_visible_label_count;i++){
-		array[i] = DSHM_visible_labels[i];
-	}
+
+/**
+ * Get the indices of required labels to show in either shared memory or distributed shared memory
+ */
+void get_visible_label_index(unsigned array[],unsigned mem_type)
+{
+    int index = 0;
+    if (mem_type == 0)
+    {
+        for (index = 0; index < SHM_VISIBLE_LABEL_COUNT; index++)
+        {
+            array[index] = SHM_visible_labels[index];
+        }
+    }
+    for (index = 0;  index < DSHM_VISIBLE_LABEL_COUNT; index++)
+    {
+        array[index] = DSHM_visible_labels[index];
+    }
 }
 
+
+/**
+ * Generate the BTF trace entity entry for all the tasks
+ */
+
+void generate_task_entity_table(void)
+{
+    store_entity_entry(IDLE_TASK_ID, TASK_EVENT, task_enum[0]);
+    store_entity_entry(TASK5MS0_ID, TASK_EVENT, task_enum[1]);
+    store_entity_entry(TASK10MS0_ID, TASK_EVENT, task_enum[2]);
+    store_entity_entry(TASK20MS0_ID, TASK_EVENT, task_enum[3]);
+    store_entity_entry(TASK10MS1_ID, TASK_EVENT, task_enum[4]);
+    store_entity_entry(TASK20MS1_ID, TASK_EVENT, task_enum[5]);
+}
+
+
+
+/**
+ * Generate the BTF trace entity entry for all the runnables
+ */
+void generate_runnable_entity_table(void)
+{
+    store_entity_entry(RUNNABLE_HANDLER5MS0_ID, RUNNABLE_EVENT, runnable_enum[0]);
+    store_entity_entry(RUNNABLE_HANDLER10MS0_ID, RUNNABLE_EVENT, runnable_enum[1]);
+    store_entity_entry(RUNNABLE_HANDLER20MS0_ID, RUNNABLE_EVENT, runnable_enum[2]);
+    store_entity_entry(RUNNABLE_HANDLER10MS1_ID, RUNNABLE_EVENT, runnable_enum[3]);
+    store_entity_entry(RUNNABLE_HANDLER20MS1_ID, RUNNABLE_EVENT, runnable_enum[4]);
+}
+
+
+/**
+ * Generate the BTF trace entity entry for all the label/signal entities
+ */
+void generate_signal_entity_table(void)
+{
+    store_entity_entry(SH_LABEL_A_ID, SIGNAL_EVENT, SHM_sec1_enum[0]);
+    store_entity_entry(DSH_LABEL_B_ID, SIGNAL_EVENT, SHM_sec1_enum[1]);
+    store_entity_entry(DSH_LABEL_A_ID, SIGNAL_EVENT, DSHM_sec1_enum[0]);
+    store_entity_entry(DSH_LABEL_B_ID, SIGNAL_EVENT, DSHM_sec1_enum[1]);
+}
+
+
+/**
+ * Generate the BTF trace entity entry for all the hardware entities
+ */
+void generate_hw_entity_table(void)
+{
+    int index = 0;
+    int core_id = HW_CORE0_ID;
+    int hw_count = sizeof(hw_enum)/sizeof(hw_enum[0]);
+    for(index = 0; index < hw_count; index++) {
+        store_entity_entry(core_id, CORE_EVENT, hw_enum[index]);
+        core_id++;
+    }
+}
diff --git a/RTFParallella/src/parallella/model_enumerations.h b/RTFParallella/src/parallella/model_enumerations.h
index 5a32d0f..f99f143 100644
--- a/RTFParallella/src/parallella/model_enumerations.h
+++ b/RTFParallella/src/parallella/model_enumerations.h
@@ -14,56 +14,115 @@
 #ifndef SRC_PARALLELLA_MODEL_ENUMERATIONS_H_
 #define SRC_PARALLELLA_MODEL_ENUMERATIONS_H_
 
+/**
+ * @file model_enumerations.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 20 May 2020
+ * @brief This file declares and implements the entity table for BTF trace generation. It
+ * consists of functions used to store the entities in the tracing framework which is
+ * used to generate the BTF trace.
+ *
+ */
 
-#define	SHM_section1_label_count 	10
 
-#define	DSHM_section1_label_count	10
+#define SHM_LABEL_COUNT                   10
 
-#define label_str_len				10
+#define DSHM_LABEL_COUNT                  10
 
-#define task_count					5
+#define LABEL_STRLEN                      32
 
-#define core_count					2
+#define EXEC_TASK_COUNT                    5
 
-#define SHM_visible_label_count		2
+#define EXEC_CORE_COUNT                    2
 
-#define DSHM_visible_label_count	2
+#define SHM_VISIBLE_LABEL_COUNT            2
+
+#define DSHM_VISIBLE_LABEL_COUNT           2
 
 /**
- * Get the string name of DRAM shared label
+ * @brief Get the string name of DRAM shared label
  *
- * Arguments:
- * index			:	shared label index in the shared memory section
- * *str				:	pointer to buffer string that holds the name
+ * @param[in]     index            :    shared label index in the shared memory section
+ * @param[inout]  *str             :    pointer to buffer string that holds the name
+ *
+ * @return : void
  */
 void get_SHM_label_name (int index,char *str);
 
 /**
- * Get the string name of distributed shared label (on a core)
+ * @brief Get the string name of distributed shared label (on a core)
  *
- * Arguments:
- * index			:	shared label index in the memory section
- * *str				:	pointer to buffer string that holds the name
+ * @param[in]      index            :    shared label index in the memory section
+ * @param[inout]   *str             :    pointer to buffer string that holds the name
+ *
+ * @return : void
  */
 void get_DSHM_label_name(int index,char *str);
 
 /**
- * Get the string name of the task being run
+ * @brief Get the string name of the task being run
  *
- * Arguments:
- * index			:	task index in the task_enum array
- * *str				:	pointer to buffer string that holds the name
+ * @param[in]    index    :    task index in the task_enum array
+ * @param[inout] *str     :    pointer to buffer string that holds the name
+ *
+ * @return : void
  */
 void get_task_name(int index,char *str);
 
 /**
- * Get the indices of required labels to show in either shared memory or distributed shared memory
+ * @brief Get the indices of required labels to show in either shared memory or distributed shared memory
  *
- * Arguments:
- * array			:	array buffer that holds the indices
- * mem_type			:	the memory type of indices requested (MEM_TYPE_SHM or MEM_TYPE_DSHM)
+ * @param[inout]     array     :    array buffer that holds the indices
+ * @param[in]        mem_type  :    the memory type of indices requested (MEM_TYPE_SHM or MEM_TYPE_DSHM)
+ *
+ * @return : void
  */
 void get_visible_label_index(unsigned array[],unsigned mem_type);
 
 
+/**
+ * @brief Generate the BTF trace entity entry for all the tasks
+ *
+ * The function is used to store all the tasks entities
+ * used in the tasks execution on a heterogeneous platform which is used to
+ * generate the BTF header and data section.
+ *
+ * @return: void
+ */
+void generate_task_entity_table(void);
+
+/**
+ * @brief Generate the BTF trace entity entry for all the runnables
+ *
+ * The function is used to store all the runnable entities
+ * used in the tasks execution on a heterogeneous platform which is used to
+ * generate the BTF header and data section.
+ *
+ * @return: void
+ */
+void generate_runnable_entity_table(void);
+
+/**
+ * @brief Generate the BTF trace entity entry for all the label/signal entities
+ *
+ * The function is used to store all the shared and distributed label entities
+ * used in the tasks execution on a heterogeneous platform which is used to
+ * generate the BTF header and data section.
+ *
+ * @return: void
+ */
+void generate_signal_entity_table(void);
+
+/**
+ * @brief Generate the BTF trace entity entry for all the hardware entities
+ *
+ * The function is used to store all the hardware entities used in the tasks
+ * execution on a heterogeneous platform which is used to generate the BTF
+ * header and data section.
+ *
+ * @return: void
+ */
+void generate_hw_entity_table(void);
+
+
 #endif /* SRC_PARALLELLA_MODEL_ENUMERATIONS_H_ */
diff --git a/RTFParallella/src/parallella/shared_comms.c b/RTFParallella/src/parallella/shared_comms.c
index e6e6a75..1c62779 100755
--- a/RTFParallella/src/parallella/shared_comms.c
+++ b/RTFParallella/src/parallella/shared_comms.c
@@ -11,105 +11,114 @@
  *        Dortmund University of Applied Sciences and Arts - initial API and implementation
  *******************************************************************************/
 
+#include <e_lib.h>
 #include "shared_comms.h"
-#include "e-lib.h"
 
-typedef unsigned int e_label_size; // one word = 4 bytes = unsigned int
 
-unsigned int *outbuf_shared[SHM_DEFINED_SPACE]; //array for global section access API
+/**
+ * The function provides the pointer to the global address to the shared DRAM memory.
+ */
+unsigned int *allocate_shared_memory(unsigned int offset)
+{
+    unsigned int *dram_addr = 0;
+    /**
+     * The shared DRAM memory offset starts at 0x8F000018. This address space is accessible
+     * by the Epiphany cores as well as Host. The actual DRAM starts at 0x8F000000. The first
+     * 20 bytes are reserved by the FreeRTOS. The next 4 bytes is used to store the time scale.
+     * The next 44 bytes will be used to store the BTF trace information. The rest of the memory
+     * can be used for storing the shared labels.
+     */
+    unsigned int *shdram_start_addr = (unsigned int *)SHARED_DRAM_SECTION;
+    /* Add offset to get the address */
+    dram_addr = (shdram_start_addr + offset);
+    return (unsigned int *)dram_addr;
+}
 
-//The current SHM access API
+
+
+/**
+ * Function to initialize the shared memory area.
+ */
 void* shm_section_init (SHM_section sec){
-	unsigned size_in_bytes = 0;
-	typedef unsigned int* cast_type;
-	if (sec.sec_type == UINT_8){
-		typedef uint8_t* cast_type;
-		size_in_bytes = sec.label_count * sizeof(uint8_t);
-	}else if (sec.sec_type == UINT_16){
-		typedef uint16_t* cast_type;
-		size_in_bytes = sec.label_count * sizeof(uint16_t);
-	}else if (sec.sec_type == UINT_32){
-		typedef uint32_t* cast_type;
-		size_in_bytes = sec.label_count * sizeof(uint32_t);
-	}else{
-		size_in_bytes = sec.label_count * sizeof(unsigned int);
-	}
-	//check if section fits in shm_dram section of the memory
-	if ((sec.base_addr | size_in_bytes)<0x01000000 || (sec.base_addr | size_in_bytes)>=0x02000000){
-		//will cause segmentation fault in Epi!
-		updateDebugFlag(404);
-		return NULL;
-	}
-	cast_type retval;
-	retval = (cast_type ) (0x8e000000 | sec.base_addr);// assign to  the ABSOLUTE address of memory section
-	int i = 0;
-	for (i = 0;i<sec.label_count;i++){
-		retval[i] = 256;
-	}
-	return retval;
+    unsigned size_in_bytes = 0;
+    typedef unsigned int* cast_type;
+    if (sec.sec_type == UINT_8)
+    {
+        typedef uint8_t* cast_type;
+        size_in_bytes = sec.label_count * sizeof(uint8_t);
+    }
+    else if (sec.sec_type == UINT_16)
+    {
+        typedef uint16_t* cast_type;
+        size_in_bytes = sec.label_count * sizeof(uint16_t);
+    }
+    else if (sec.sec_type == UINT_32)
+    {
+        typedef uint32_t* cast_type;
+        size_in_bytes = sec.label_count * sizeof(uint32_t);
+    }
+    else
+    {
+        size_in_bytes = sec.label_count * sizeof(unsigned int);
+    }
+    /* check if section fits in shm_dram section of the memory */
+    if ((sec.base_addr | size_in_bytes) < 0x01000000 ||
+            (sec.base_addr | size_in_bytes) >= 0x02000000)
+    {
+        /* will cause segmentation fault in Epiphany */
+        return NULL;
+    }
+    cast_type retval;
+    /* assign to  the ABSOLUTE address of memory section */
+    retval = (cast_type ) (0x8e000000 | sec.base_addr);
+    int index = 0;
+    for (index = 0; index < sec.label_count; index++){
+        retval[index] = 0;
+    }
+    return retval;
 }
 
-int read_shm_section ( unsigned int* x, unsigned indx){
-	return (int) x[indx];
+
+/**
+ * Read data from a specific label in a shared memory section.
+ */
+int read_shm_section ( unsigned int* x, unsigned indx)
+{
+    return (int) x[indx];
 }
 
-void write_shm_section (unsigned int* x, unsigned indx, int payload){
-	x[indx] = payload;
+
+/**
+ * Write data to a specific label in a shared memory section.
+ */
+void write_shm_section (unsigned int* x, unsigned indx, int payload)
+{
+    x[indx] = payload;
 }
 
+
 /**
  * TODO use e_write/ e_read functions and DMA to constrain contention from different cores.
  */
-unsigned int shm_section_init_read (SHM_section sec,int index){
-	typedef unsigned int cast_type;
-	if (sec.sec_type == UINT_8){
-		typedef uint8_t cast_type;
-	}else if (sec.sec_type == UINT_16){
-		typedef uint16_t cast_type;
-	}else if (sec.sec_type == UINT_32){
-		typedef uint32_t cast_type;
-	}
-	unsigned int *retval;
-	e_write((void*)&e_emem_config, retval, 0, 0, (void *)0x01000000, sizeof(unsigned int));
-	return (unsigned int) retval;
+unsigned int shm_section_init_read (SHM_section sec,int index)
+{
+    unsigned int *retval;
+    typedef unsigned int cast_type;
+    if (sec.sec_type == UINT_8)
+    {
+        typedef uint8_t cast_type;
+    }
+    else if (sec.sec_type == UINT_16)
+    {
+        typedef uint16_t cast_type;
+    }
+    else if (sec.sec_type == UINT_32)
+    {
+        typedef uint32_t cast_type;
+    }
+
+    e_write((void*)&e_emem_config, retval, 0, 0, (void *)0x01000000, sizeof(unsigned int));
+    return (unsigned int) retval;
 }
 
-
-
-/**
- * obsolete utility functions
- * specific for global section access.
- *
- */
-
-
-void shared_labels_init(){
-	outbuf_shared[0] = (unsigned int *) (0x8e000000 | shared_mem_section);
-	for (int j = 1;j<SHM_DEFINED_SPACE;j++){
-		outbuf_shared[j] = outbuf_shared[j-1] + 1;
-	}
-	//initialize buffer
-	int i;
-	//timer1init();
-	for (i=0;i<SHM_DEFINED_SPACE;i++){
-		*outbuf_shared[i] =0x10000;
-	}
-}
-
-uint8_t shared_label_write(int label_indx,int payload){
-	uint8_t retval=NULL;
-	*outbuf_shared[label_indx] = payload;
-	/*if (payload == *outbuf_shared[label_indx]){
-		retval = 1;
-	}*/
-	return retval;
-}
-
-
-unsigned int shared_label_read(int label_indx){
-	return *outbuf_shared[label_indx];
-}
-
-
-
-//-------------------end of file-------------------------//
+/*------------------------end of file-------------------------*/
diff --git a/RTFParallella/src/parallella/shared_comms.h b/RTFParallella/src/parallella/shared_comms.h
index b91bc92..358549a 100755
--- a/RTFParallella/src/parallella/shared_comms.h
+++ b/RTFParallella/src/parallella/shared_comms.h
@@ -14,137 +14,110 @@
 #ifndef SRC_PARALLELLA_SHARED_COMMS_H_
 #define SRC_PARALLELLA_SHARED_COMMS_H_
 
+/**
+ * @file shared_comms.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 13 April 2020
+ * @brief This file declares and implements function to read and write data to shared memory. The
+ * functions defined in this file are used for reading from and writing data in the shared memory
+ * which can be used by host core or epiphany cores.
+ */
+
 #include <stdlib.h>
 #include <stdint.h>
+#include "RTFParallellaConfig.h"
 
 
-#define shared_mem_section	0x01001000
+#define shared_mem_section    0x01001000
 
-#define shared_mem_section_2	0x01001000
+#define shared_mem_section_2    0x01001000
 
 #define shared_mem_section1_label_count 10
 
-#define SHM_DEFINED_SPACE	256 //number of words in the shared memory section
+#define SHM_DEFINED_SPACE    256 //number of words in the shared memory section
 
-/**
- * allowable sizes of labels to be used i shared memory
- *
- * If the label is of larger size declare it as multiple labels
- *
- * TODO
- * add support for larger labels as combination of smaller ones
- */
-typedef enum {
-    UINT_8,
-    UINT_16,
-    UINT_32
-} TYPE;
 
 
 /**
  * defines a shared memory section
- *
- * Fields:
- * base_addr: address of the first label in the section
- * label_count: number of labels in the section
- * sec_type: data type of the section (size of labels in the section)
- *
  */
-struct{
-	unsigned int 	base_addr;
-	unsigned 		label_count;
-	TYPE			sec_type;
-}typedef SHM_section;
-
+typedef struct SHM_section_t
+{
+    unsigned int     base_addr;    /**< address of the first label in the section */
+    unsigned         label_count;  /**< number of labels in the section */
+    TYPE            sec_type;     /**< data type of the section (size of labels in the section) */
+}SHM_section;
 
 
 /**
- * Initiate the shared label section, this function will assign addresses to labels in a section,
- * and initialize those labels to 0
+ * @brief The function provides the pointer to the global address to the shared DRAM memory.
  *
- * Arguments:
+ * The shared DRAM memory offset starts at 0x8F000018. This address space is accessible
+ * by the Epiphany cores as well as Host. The actual DRAM starts at 0x8F000000. The first
+ * 20 bytes are reserved by the FreeRTOS. The next 4 bytes is used to store the time scale.
+ * The next 44 bytes will be used to store the BTF trace information. The rest of the memory
+ * can be used for storing the shared labels.
+ *
+ * @param[in] offset : The offset from the shared dram start address.
+ *
+ * @return           : Pointer to the shared DRAM memory.
  *
  */
-void shared_labels_init();
+unsigned int *allocate_shared_memory(unsigned int offset);
 
 /**
- * write a value to a label in a shared memory(DRAM) section
+ * @brief Function to initialize the shared memory area.
  *
- * Arguments:
- * label_indx	:	index of the target shared label
- * payload		:	value to write
- *
- */
-uint8_t shared_label_write	(int label_indx,int payload);
-
-/**
- * read a value of a label in a shared memory(DRAM) section
- *
- * Arguments:
- * label_indx	:	index of the target shared label
- *
- * Return:
- * value of requested shared memory label
- */
-unsigned int shared_label_read(int label_indx);
-
-
-
-/**
  * Initiate the shared label section, this function will assign addresses to labels in a section,
  * and initialize those labels to the value of 256
  * If the requested section does not fit in the system's shared_dram, a null
  * pointer will be returned
  *
- * Arguments:
- * sec	:	structure of type SHM_section containing
- * 			details of the the shared memory section to be initiated
+ * @param[in] sec  :   structure of type SHM_section containing
+ *                     details of the the shared memory section to be initiated
  *
- * Return:
- * pointer to the initiated shared memory label
- *
+ * @return:   pointer to the initiated shared memory label
  *
  */
 void* shm_section_init (SHM_section sec);
 
 /**
- * Read data from a specific label in a shared memory section
+ * @brief Read data from a specific label in a shared memory section.
+ *
  * This function will read one full label but the result will
  * be cast into int (4 bytes on this platform)
  *
  * Segmentation fault will occur for addresses outside the shared_dram section of the system
  * check RTFP documentation for details.
  *
- * Arguments:
- * x	:	pointer to the section to be read
- * indx	:	index of requested label
+ * @param[in] x    :   pointer to the section to be read
+ * @param[in] indx :   index of requested label
  *
- * Return:
- * value of requested label in a shared memory section
- *
+ * @return:  value of requested label in a shared memory section
  *
  */
 int read_shm_section ( unsigned int* x, unsigned indx);
 
 /**
- * Write data to a specific label in a shared memory section
+ * @brief Write data to a specific label in a shared memory section.
+ *
  * This function will write one full label but the value will
  * be given as int (4 bytes on this platform) to avoid overflow issues
  *
  * Segmentation fault will occur for addresses outside the shared_dram section of the system
  * check RTFP documentation for details.
  *
- * Arguments:
- * x		:	pointer to the section to be written to
- * indx		:	index of requested label
- * payload	:	value to be written (will be cast into data type of target label)
+ * @param[in] x        :   pointer to the section to be written to
+ * @param[in] indx     :   index of requested label
+ * @param[in] payload  :   value to be written (will be cast into data type of target label)
+ *
+ * @return : void
  *
  */
 void write_shm_section (unsigned int* x, unsigned indx, int payload);
 
 /**
- * TODO
- * expand this function to use DMA engine of the Epi chip
+ * @brief This function is obsolete. Use "read_shm_section" for reading shared memory area.
  */
 unsigned int shm_section_init_read (SHM_section sec,int index);
 
diff --git a/RTFParallella/src/parallella/taskCode.c b/RTFParallella/src/parallella/taskCode.c
index 61ad00f..b5926bd 100755
--- a/RTFParallella/src/parallella/taskCode.c
+++ b/RTFParallella/src/parallella/taskCode.c
@@ -12,63 +12,85 @@
  *******************************************************************************/
 
 #include "taskCode.h"
+#include "e_lib.h"
+#include "debugFlags.h"
+#include "RTFParallellaConfig.h"
+#include "trace_utils_BTF.h"
 
 /* define global variables to be
  * accessed through a specific task (context)
  */
 //task recurrence counters
-int passes1 = 0;
-int passes2 = 0;
-int passes3 = 0;
-int passes4 = 0;
-int passes5 = 0;
+int passes1 = 1;
+int passes2 = 1;
+int passes3 = 1;
+int passes4 = 1;
+int passes5 = 1;
 
 
 
 //define tasks and copy operations here
 //-------
-void handler5ms(){
-	int localLabel;
-	updateDebugFlag(700);
-	sleepTimerMs(2,1);
-	passes1++;
-	traceTaskPasses(1,passes1);
-	traceRunningTask(0);
+void handler5ms(int src_id, int src_instance)
+{
+    int localLabel;
+    updateDebugFlag(700);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER5MS0_ID,
+            passes1, PROCESS_START, 0);
+    sleepTimerMs(1,1);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER5MS0_ID,
+            passes1, PROCESS_TERMINATE, 0);
+    passes1++;
+    traceTaskPasses(1,passes1);
 }
 
-void handler10ms(){
-	updateDebugFlag(800);
-	sleepTimerMs(3,2);
-	passes2++;
-	traceTaskPasses(2,passes2);
-	traceRunningTask(0);
+void handler10ms(int src_id, int src_instance)
+{
+    updateDebugFlag(800);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER10MS0_ID,
+            passes2, PROCESS_START, 0);
+    sleepTimerMs(3,2);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER10MS0_ID,
+            passes2, PROCESS_TERMINATE, 0);
+    passes2++;
+    traceTaskPasses(2,passes2);
+}
+
+void handler20ms(int src_id, int src_instance)
+{
+    updateDebugFlag(899);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER20MS0_ID,
+            passes3, PROCESS_START, 0);
+    sleepTimerMs(4,3);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER20MS0_ID,
+            passes3, PROCESS_TERMINATE, 0);
+    passes3++;
+    traceTaskPasses(3,passes3);
 
 }
 
-void handler20ms(){
-	updateDebugFlag(899);
-	sleepTimerMs(5,3);
-	passes3++;
-	traceRunningTask(0);
-	traceTaskPasses(3,passes3);
-
+void handler10msCore2(int src_id, int src_instance)
+{
+    updateDebugFlag(899);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER10MS1_ID,
+            passes4, PROCESS_START, 0);
+    sleepTimerMs(3,4);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER10MS1_ID,
+            passes4, PROCESS_TERMINATE, 0);
+    passes4++;
+    traceTaskPasses(2,passes4);
 }
 
-void handler10msCore2(){
-	updateDebugFlag(899);
-	sleepTimerMs(3,4);
-	passes4++;
-	//shared_label1 = shared_label_to_read;
-	traceRunningTask(0);
-	traceTaskPasses(2,passes4);
-}
-
-void handler20msCore2(){
-	updateDebugFlag(899);
-	sleepTimerMs(7,5);
-	passes5++;
-	traceRunningTask(0);
-	traceTaskPasses(3,passes5);
+void handler20msCore2(int src_id, int src_instance)
+{
+    updateDebugFlag(899);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER20MS1_ID,
+            passes5, PROCESS_START, 0);
+    sleepTimerMs(9,5);
+    traceTaskEvent(src_id, src_instance, RUNNABLE_EVENT, RUNNABLE_HANDLER20MS1_ID,
+            passes5, PROCESS_TERMINATE, 0);
+    passes5++;
+    traceTaskPasses(3,passes5);
 }
 
 
diff --git a/RTFParallella/src/parallella/taskCode.h b/RTFParallella/src/parallella/taskCode.h
index c8001da..a1c5ea1 100755
--- a/RTFParallella/src/parallella/taskCode.h
+++ b/RTFParallella/src/parallella/taskCode.h
@@ -13,8 +13,15 @@
 
 #ifndef SRC_PARALLELLA_TASKCODE_H_
 #define SRC_PARALLELLA_TASKCODE_H_
+
+/**
+ * @file taskCode.h
+ * @author Mahmoud Bazzal, Anand Prakash
+ * @date 24 May 2020
+ * @brief This file is used to define the functions for implementing tasks handlers.
+ *
+ */
 #include "c2c.h"
-#include "debugFlags.h"
 #include "ParallellaUtils.h"
 #include "shared_comms.h"
 #include "FreeRTOS.h"
@@ -23,11 +30,11 @@
 
 //declare taskHandler functions
 
-void handler5ms();
-void handler10ms();
-void handler20ms();
-void handler10msCore2();
-void handler20msCore2();
+void handler5ms(int src_id, int src_instance);
+void handler10ms(int src_id, int src_instance);
+void handler20ms(int src_id, int src_instance);
+void handler10msCore2(int src_id, int src_instance);
+void handler20msCore2(int src_id, int src_instance);
 //-------
 
 
diff --git a/RTFParallella/src/parallella/trace_utils_BTF.c b/RTFParallella/src/parallella/trace_utils_BTF.c
new file mode 100644
index 0000000..d855420
--- /dev/null
+++ b/RTFParallella/src/parallella/trace_utils_BTF.c
@@ -0,0 +1,583 @@
+/*******************************************************************************
+ *   Copyright (c) 2020 Dortmund University of Applied Sciences and Arts and others.
+ *
+ *   This program and the accompanying materials are made
+ *   available under the terms of the Eclipse Public License 2.0
+ *   which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ *   SPDX-License-Identifier: EPL-2.0
+ *
+ *   Contributors:
+ *        Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#include <getopt.h>
+#include <time.h>
+#include "trace_utils_BTF.h"
+#include <limits.h>
+#include <unistd.h>
+
+/*------------------------------DEFINES-------------------------*/
+#define BTF_TRACE_ENTITY_TABLE_SIZE                 64
+#define CORE_STACK_SIZE                             16
+#define TRACE_PATH_SIZE                             512
+
+/*-------------------------GOLBAL VARIABLES--------------------*/
+const char *btf_trace_version = "#version 1.0";
+
+/*-------------------------STATIC GOLBAL VARIABLES--------------------*/
+static btf_trace_header_config_t btf_header;
+static uint8_t output_trace_path[TRACE_PATH_SIZE];
+static btf_trace_entity_table entity_table[BTF_TRACE_ENTITY_TABLE_SIZE];
+static uint8_t isEntityTypeHeaderWritten = BTF_TRACE_FALSE;
+static uint8_t isEntityTableHeaderWritten = BTF_TRACE_FALSE;
+static uint8_t isEntityTypTableHeaderWritten = BTF_TRACE_FALSE;
+static btf_trace_data core0_trace_data[CORE_STACK_SIZE];
+static btf_trace_data core1_trace_data[CORE_STACK_SIZE];
+static int8_t core0_stack_top = -1;
+static int8_t core1_stack_top = -1;
+static int scale_factor = 1;
+
+
+/*-------------------------CONST VARIABLES---------------------------*/
+const uint8_t event_type[][8] = {
+        "T",
+        "ISR",
+        "R",
+        "IB",
+        "STI",
+        "ECU",
+        "P",
+        "C",
+        "SCHED",
+        "SIG",
+        "SEM",
+        "SIM"
+};
+
+const uint8_t event_name[][16] = {
+        "start",
+        "terminate",
+        "preempt",
+        "suspend",
+        "resume",
+        "read",
+        "write"
+};
+
+
+/*-------------------------STATIC FUNCTIONS----------------------------*/
+static void print_usage(void);
+static void get_trace_timestamp(uint8_t *buffer);
+static int16_t find_first_free_index(void);
+static void get_trace_timestamp(uint8_t *buffer);
+static uint8_t update_entity_entry(unsigned int id, unsigned int instance, unsigned int event_state);
+static void process_btf_trace_data(FILE *stream, btf_trace_data *data, int8_t *top_of_stack, unsigned int *data_buffer);
+static void push_on_stack(btf_trace_data *data, int8_t *top_of_stack, unsigned int *data_buffer);
+static btf_trace_data pop_from_stack(btf_trace_data *data, int8_t *top_of_stack);
+static int find_task_in_execution(btf_trace_data *data, int8_t stack_top, btf_trace_event_type type);
+static void dump_btf_trace_data(FILE *stream, unsigned int ticks, unsigned int srcId, unsigned int srcInstance,
+                            btf_trace_event_type type, unsigned int target, unsigned int targetInstance,
+                            btf_trace_event_name event, unsigned int data);
+
+/* Function to get the first free available index */
+static int16_t find_first_free_index(void)
+{
+    int index = 0;
+    for(index = 0; index < BTF_TRACE_ENTITY_TABLE_SIZE; index++)
+    {
+        if (entity_table[index].is_occupied == 0x00)
+        {
+            return index;
+        }
+    }
+    return -1;
+}
+
+/* Function to get the entity name based on the id passed */
+static unsigned char * get_entity_name(unsigned int id)
+{
+    int index = 0;
+    for(index = 0; index < BTF_TRACE_ENTITY_TABLE_SIZE; index++)
+    {
+        if (entity_table[index].is_occupied == 0x01)
+        {
+            if (id == entity_table[index].entity_data.entity_id)
+            {
+                return entity_table[index].entity_data.entity_name;
+            }
+        }
+    }
+    return NULL;
+}
+
+/* Function to get the current time of creation of btf trace file */
+static void get_trace_timestamp(uint8_t *buffer)
+{
+    time_t timer;
+    char date[16] = {0};
+    char time_t[16] = {0};
+    struct tm* tm_info;
+    time(&timer);
+    tm_info = localtime(&timer);
+    /* The total number of characters to display time is 26 */
+    strftime((char *)date, 16, "%Y-%m-%d", tm_info);
+    strftime((char *)time_t, 16, "%H:%M:%S", tm_info);
+    /* Set the time in ISO 8601 extended specification format */
+    snprintf((char *)buffer, 26, "%s%c%s", date, 'T', time_t);
+}
+
+/* Function to display to usage of the command line parameters */
+static void print_usage(void)
+{
+    fprintf(stdout, "Usage:\n");
+    fprintf(stdout,"\t[-t|--trace-btf]=<Output trace file name.>\n");
+    fprintf(stdout,"\t[-m|--model-file]=<Model file name used to generate the trace file.>\n");
+    fprintf(stdout,"\t[-s|--scale]=<Timing scale used to generate the trace file in microseconds. Accepted values are 100 and 1000.>\n");
+    fprintf(stdout,"\t[-d|--device]=<Device target on which the trace file is generated.>\n");
+    fprintf(stdout,"\t[-h|--help]=<Print the help message.>\n");
+    fprintf(stdout,"Example:\n");
+    fprintf(stdout,"\t./host_main_example1 -t trace.btf -s 100 -m model.xml -d parallella\n");
+    fflush(stdout);
+}
+
+/* Function to update the entity entry table */
+static uint8_t update_entity_entry(unsigned int id, unsigned int instance, unsigned int event_state)
+{
+    int index;
+    //Parse the entity table to check for any new event or instance.
+    for(index = 0; index < BTF_TRACE_ENTITY_TABLE_SIZE; index++)
+    {
+        if ((entity_table[index].is_occupied == 0x01) && (id == entity_table[index].entity_data.entity_id))
+        {
+            if ((entity_table[index].entity_data.instance != instance) ||
+                (entity_table[index].entity_data.state != event_state))
+                {
+                    entity_table[index].entity_data.instance = instance;
+                    entity_table[index].entity_data.state = event_state;
+                    return BTF_TRACE_TRUE;
+                }
+        }
+    }
+    return BTF_TRACE_FALSE;
+}
+
+/* Function to push any entity event on core stack */
+static void push_on_stack(btf_trace_data *data, int8_t *top_of_stack, unsigned int *data_buffer)
+{
+    int8_t stack_top = *top_of_stack;
+    if(stack_top >= CORE_STACK_SIZE - 1)
+    {
+        fprintf(stdout, "\n\tSTACK is over flow");
+        return;
+    }
+    stack_top++;
+    data[stack_top].eventTypeId = data_buffer[EVENT_TYPE_FLAG];
+    data[stack_top].srcId = data_buffer[SOURCE_FLAG];
+    data[stack_top].srcInstance = data_buffer[SOURCE_INSTANCE_FLAG];
+    data[stack_top].taskId = data_buffer[TARGET_FLAG];
+    data[stack_top].taskInstance = data_buffer[TARGET_INSTANCE_FLAG];
+    data[stack_top].eventState = data_buffer[EVENT_FLAG];
+    data[stack_top].data = data_buffer[DATA_FLAG];
+    *top_of_stack = stack_top;
+}
+
+/* Function to pop any entity event on core stack */
+static btf_trace_data pop_from_stack(btf_trace_data *data, int8_t *top_of_stack)
+{
+    btf_trace_data task = {0};
+    int8_t stack_top = *top_of_stack;
+    if(stack_top <= -1)
+    {
+        fprintf(stdout, "\n\t Stack is under flow");
+        return task;
+    }
+    else
+    {
+        task = data[stack_top];
+        stack_top--;
+        *top_of_stack = stack_top;
+        return task;
+    }
+}
+
+/* Function to find the current active task */
+static int find_task_in_execution(btf_trace_data *data, int8_t stack_top, btf_trace_event_type type)
+{
+    int index = -1;
+    int found = -1;
+    for(index = 0; index <= stack_top; index++)
+    {
+        if (data[index].eventTypeId == type && ((data[index].eventState == PROCESS_START)
+                || (data[index].eventState == PROCESS_RESUME)))
+        {
+            found = index;
+        }
+    }
+    return found;
+}
+
+
+/* Function to dump the BTF trace data on output trace file */
+static void dump_btf_trace_data(FILE *stream, unsigned int ticks,
+                            unsigned int srcId, unsigned int srcInstance,
+                            btf_trace_event_type type,
+                            unsigned int target, unsigned int targetInstance,
+                            btf_trace_event_name event, unsigned int data)
+{
+    unsigned char * source_name = get_entity_name(srcId);
+    unsigned char * target_name = get_entity_name(target);
+    const unsigned char *event_type_string = event_type[type];
+    const unsigned char *event_name_string = event_name[event];
+    if ((source_name != NULL) && (target_name != NULL))
+    {
+        fprintf(stream,"%d,%s,%d,%s,%s,%d,%s,%d\n", (ticks * scale_factor * 1000) , source_name, srcInstance,
+                 event_type_string, target_name, targetInstance, event_name_string, data);
+        fflush(stream);
+    }
+}
+
+/* Function to process event on each core */
+static void process_btf_trace_data(FILE *stream, btf_trace_data *data, int8_t *top_of_stack, unsigned int *data_buffer)
+{
+    if (*top_of_stack == -1)
+    {
+        // Stack is empty.Push on stack
+        push_on_stack(data, top_of_stack, data_buffer);
+        dump_btf_trace_data(stream, data_buffer[TIME_FLAG], data_buffer[SOURCE_FLAG],
+                data_buffer[SOURCE_INSTANCE_FLAG], data_buffer[EVENT_TYPE_FLAG],
+                data_buffer[TARGET_FLAG], data_buffer[TARGET_INSTANCE_FLAG],
+                data_buffer[EVENT_FLAG], data_buffer[DATA_FLAG]);
+    }
+    else
+    {
+        btf_trace_data previousTask;
+        if (data_buffer[EVENT_FLAG] == PROCESS_START)
+        {
+            //Preempt the current running task and suspend the associated runnable
+            int task = find_task_in_execution(data, *top_of_stack, TASK_EVENT);
+            int runnable = find_task_in_execution(data, *top_of_stack, RUNNABLE_EVENT);
+            if((task != -1) && (data[task].taskId != data_buffer[SOURCE_FLAG]))
+            {
+                // print task to preemption
+                data[task].eventState = PROCESS_PREEMPT;
+                dump_btf_trace_data(stream, data_buffer[TIME_FLAG], data[task].srcId,
+                        data[task].srcInstance, data[task].eventTypeId,
+                        data[task].taskId, data[task].taskInstance,
+                        data[task].eventState, data[task].data);
+            }
+            if((runnable != -1) && (data[runnable].srcId != data_buffer[TARGET_FLAG]))
+            {
+                // print runnable to suspend
+                data[runnable].eventState = PROCESS_SUSPEND;
+                dump_btf_trace_data(stream, data_buffer[TIME_FLAG], data[runnable].srcId,
+                        data[runnable].srcInstance, data[runnable].eventTypeId,
+                        data[runnable].taskId, data[runnable].taskInstance,
+                        data[runnable].eventState, data[runnable].data);
+            }
+            //print the task which started and push it on the stack
+            push_on_stack(data, top_of_stack, data_buffer);
+            dump_btf_trace_data(stream, data_buffer[TIME_FLAG], data_buffer[SOURCE_FLAG],
+                    data_buffer[SOURCE_INSTANCE_FLAG], data_buffer[EVENT_TYPE_FLAG],
+                    data_buffer[TARGET_FLAG], data_buffer[TARGET_INSTANCE_FLAG],
+                    data_buffer[EVENT_FLAG], data_buffer[DATA_FLAG]);
+        }
+        else if (data_buffer[EVENT_FLAG] == PROCESS_TERMINATE)
+        {
+            //Get the previous task and dump on the trace file if the task ID and instance match
+            previousTask = data[*top_of_stack];
+            if((data_buffer[TARGET_FLAG] == previousTask.taskId)
+                    && (data_buffer[TARGET_INSTANCE_FLAG] == previousTask.taskInstance))
+            {
+                dump_btf_trace_data(stream, data_buffer[TIME_FLAG], data_buffer[SOURCE_FLAG],
+                        data_buffer[SOURCE_INSTANCE_FLAG], data_buffer[EVENT_TYPE_FLAG],
+                        data_buffer[TARGET_FLAG], data_buffer[TARGET_INSTANCE_FLAG],
+                        data_buffer[EVENT_FLAG], data_buffer[DATA_FLAG]);
+                pop_from_stack(data, top_of_stack);
+            }
+
+            if ((*top_of_stack >= 1) && (data_buffer[EVENT_TYPE_FLAG] == TASK_EVENT))
+            {
+                // Check if there is any task in preempt or suspend state. Resume them.
+                previousTask = data[*top_of_stack - 1];
+                int8_t prevRunnable = *top_of_stack;
+                btf_trace_data runnableTask = data[prevRunnable];
+                dump_btf_trace_data(stream, data_buffer[TIME_FLAG], previousTask.srcId, previousTask.srcInstance,
+                        previousTask.eventTypeId, previousTask.taskId, previousTask.taskInstance,
+                        PROCESS_RESUME, previousTask.data);
+                dump_btf_trace_data(stream, data_buffer[TIME_FLAG], runnableTask.srcId, runnableTask.srcInstance,
+                        runnableTask.eventTypeId, runnableTask.taskId, runnableTask.taskInstance,
+                        PROCESS_RESUME, runnableTask.data);
+                data[*top_of_stack].eventState = PROCESS_RESUME;
+                data[prevRunnable].eventState = PROCESS_RESUME;
+            }
+        }
+        else
+        {
+            //Do nothing
+        }
+    }
+}
+
+/**
+ * Function to get the file name of the trace file along with the
+ * absolute path.
+ */
+void get_btf_trace_file_path(char *trace_file_path)
+{
+    if (trace_file_path == NULL)
+    {
+        return;
+    }
+    char lcwd[PATH_MAX-1];
+
+    if (getcwd(lcwd, sizeof(lcwd)) != NULL) {
+        fprintf(stderr,"Current working dir: %s\n", lcwd);
+    } else {
+        perror("getcwd() error");
+        return;
+    }
+    if(0 != access(lcwd, W_OK))
+    {
+        fprintf(stderr,"You don't have write access to the directory in which you are trying to create the btf file\n");
+    }
+    sprintf(trace_file_path,"%s" "%c" "%s",lcwd,'/', output_trace_path);
+    fflush(stderr);
+}
+
+/**
+ * Parse the command line arguments for generating the BTF trace file
+ */
+int  parse_btf_trace_arguments(int argc, char **argv)
+{
+    int opt= 0;
+    int is_time_unit_provided = BTF_TRACE_FALSE;
+    int is_time_scale_provided = BTF_TRACE_FALSE;
+
+    /* Reset the posix variable associated to getopt_long */
+    opterr = 0;
+    static const struct option long_options[] = {
+        {"trace-btf", required_argument, NULL, 't' },
+        {"model-file", required_argument, NULL,  'm' },
+        {"scale", optional_argument, NULL, 's'},
+        {"unit", optional_argument, NULL, 'u'},
+        {"device", required_argument, NULL, 'd'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };
+
+    int long_index =0;
+    while ((opt = getopt_long(argc, argv,"t:m:s:d:",
+                   long_options, &long_index )) != -1) {
+        switch (opt) {
+             case 't' :
+                 strncpy((char *)output_trace_path, (const char *)optarg, sizeof(output_trace_path));
+                 break;
+             case 'm' :
+                 strncpy((char *)btf_header.modelfile, (const char *)optarg, sizeof(btf_header.modelfile));
+                 break;
+             case 'd' :
+                 strncpy((char *)btf_header.creator, (const char *)optarg, sizeof(btf_header.creator));
+                 break;
+             case 'u' :
+                 strncpy((char *)btf_header.timeunit, (const char *)optarg, sizeof(btf_header.timeunit));
+                 is_time_unit_provided = BTF_TRACE_TRUE;
+                 break;
+             case 's' :
+                 btf_header.timescale = atoi(optarg);
+                 scale_factor = btf_header.timescale;
+                 /* Accepted scale factor is 100us and 1000us */
+                 if ((scale_factor == 100) || (scale_factor == 1000))
+                 {
+                     // No action needed.
+                 }
+                 else
+                 {
+                     print_usage();
+                     exit(EXIT_FAILURE);
+                 }
+                 is_time_scale_provided = BTF_TRACE_TRUE;
+                 break;
+             case 'h' :
+                 print_usage();
+                 exit(EXIT_SUCCESS);
+             case '?' :
+             default  :
+                 print_usage();
+                 exit(EXIT_FAILURE);
+        }
+    }
+    /* Set the default time scale as us */
+    if (is_time_unit_provided == BTF_TRACE_FALSE)
+    {
+        strncpy((char *)btf_header.timeunit, (const char *)"ns", sizeof(btf_header.timeunit));
+    }
+
+    /* Set the default time scale as 1000 which corresponds to 1 ms.  */
+    if (is_time_scale_provided == BTF_TRACE_FALSE)
+    {
+        btf_header.timescale = 1000;
+        scale_factor = btf_header.timescale;
+    }
+
+    return btf_header.timescale;
+
+}
+
+
+
+/**
+ * This function is used to store the entity information of all the
+ * tasks, runnables and labels.
+ */
+void store_entity_entry(entity_id typeId, btf_trace_event_type type, const char *name)
+{
+    int16_t index = 0;
+    index = find_first_free_index();
+    if (index >= 0)
+    {
+        entity_table[index].entity_data.entity_id = typeId;
+        entity_table[index].entity_data.instance = -1;
+        entity_table[index].entity_data.state = INIT;
+        entity_table[index].entity_data.entity_type = type;
+        strcpy((char *)entity_table[index].entity_data.entity_name, (const char *)name);
+        entity_table[index].is_occupied = 0x01;
+    }
+}
+
+
+/**
+ * This function is responsible for writing the BTF trace header information.
+ */
+void write_btf_trace_header_config(FILE *stream)
+{
+    if (stream == NULL)
+    {
+        return;
+    }
+    /* 32 bytes is enough to store the timescale format */
+    uint8_t time_string[32] = {0};
+    fprintf(stream, "%s\n", btf_trace_version);
+    fprintf(stream, "#creator %s\n", btf_header.creator);
+    get_trace_timestamp(time_string);
+    fprintf(stream, "#creationdate %s\n", time_string);
+    fprintf(stream, "#inputFile %s\n", btf_header.modelfile);
+    fprintf(stream, "#timescale %s\n", btf_header.timeunit);
+    fflush(stream);
+}
+
+/**
+ * This function to write entity type in BTF header data.
+ */
+void write_btf_trace_header_entity_type(FILE *stream, btf_trace_event_type type)
+{
+    if (stream == NULL)
+    {
+        return;
+    }
+    if (isEntityTypeHeaderWritten == BTF_TRACE_FALSE)
+    {
+        fprintf(stream, "#entityType\n");
+        isEntityTypeHeaderWritten = BTF_TRACE_TRUE;
+    }
+    fprintf(stream, "#-%d %s\n", type, event_type[type]);
+    fflush(stream);
+}
+
+
+/**
+ * This function writes the entity type table in the BTF header.
+ */
+void write_btf_trace_header_entity_type_table(FILE *stream)
+{
+    if (stream == NULL)
+    {
+        return;
+    }
+    if (isEntityTypTableHeaderWritten == BTF_TRACE_FALSE)
+    {
+        fprintf(stream, "#entityTypeTable\n");
+        isEntityTypTableHeaderWritten = BTF_TRACE_TRUE;
+    }
+    int index = 0;
+    for(index = 0; index < BTF_TRACE_ENTITY_TABLE_SIZE; index++)
+    {
+        if (entity_table[index].is_occupied == 0x01)
+        {
+            int type_index = entity_table[index].entity_data.entity_type;
+            fprintf(stream, "#-%s %s\n", event_type[type_index],
+                            entity_table[index].entity_data.entity_name);
+            fflush(stream);
+        }
+    }
+}
+
+
+/**
+ * Function to write entity type in BTF header data
+ */
+void write_btf_trace_header_entity_table(FILE *stream)
+{
+    if (stream == NULL)
+    {
+        return;
+    }
+    if (isEntityTableHeaderWritten == BTF_TRACE_FALSE)
+    {
+        fprintf(stream, "#entityTable\n");
+        isEntityTableHeaderWritten = BTF_TRACE_TRUE;
+    }
+    int index = 0;
+    for(index = 0; index < BTF_TRACE_ENTITY_TABLE_SIZE; index++)
+    {
+        if (entity_table[index].is_occupied == 0x01)
+        {
+            fprintf(stream, "#-%d %s\n", entity_table[index].entity_data.entity_id,
+                    entity_table[index].entity_data.entity_name);
+            fflush(stream);
+        }
+    }
+}
+
+/**
+ * Function to write the data section of the BTF
+ */
+void write_btf_trace_data(FILE *stream, uint8_t core_id, unsigned int * data_buffer)
+{
+    if (stream == NULL || (data_buffer == NULL))
+    {
+        return;
+    }
+    if (core_id == 1)
+    {
+        process_btf_trace_data(stream, core1_trace_data, &core1_stack_top, data_buffer);
+    }
+    else if (core_id == 0)
+    {
+        #if 0
+        fprintf(stream,"Input ---%d,%d,%d,%d,%d,%d,%d\n", data_buffer[TIME_FLAG], data_buffer[SOURCE_FLAG],
+                data_buffer[SOURCE_INSTANCE_FLAG], data_buffer[EVENT_TYPE_FLAG], data_buffer[TARGET_FLAG],
+                data_buffer[TARGET_INSTANCE_FLAG], data_buffer[EVENT_FLAG]);
+        fflush(stream);
+        #endif
+        process_btf_trace_data(stream, core0_trace_data, &core0_stack_top, data_buffer);
+        #if 0
+        int index = 0;
+        if (core0_stack_top >= 0)
+        {
+            fprintf(stream, "stack size=%d\n", core0_stack_top);
+            for(index = core0_stack_top; index >= 0; index--)
+            {
+                fprintf(stream,"Src=%d Target=%d Event=%d\n",core0_trace_data[index].srcId,
+                        core0_trace_data[index].taskId, core0_trace_data[index].eventState);
+                fflush(stream);
+            }
+        }
+        #endif
+    }
+    else
+    {
+        // Do nothing
+    }
+
+}
diff --git a/RTFParallella/src/parallella/trace_utils_BTF.h b/RTFParallella/src/parallella/trace_utils_BTF.h
new file mode 100644
index 0000000..a1ea313
--- /dev/null
+++ b/RTFParallella/src/parallella/trace_utils_BTF.h
@@ -0,0 +1,252 @@
+/*******************************************************************************
+ *   Copyright (c) 2020 Dortmund University of Applied Sciences and Arts and others.
+ *
+ *   This program and the accompanying materials are made
+ *   available under the terms of the Eclipse Public License 2.0
+ *   which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ *   SPDX-License-Identifier: EPL-2.0
+ *
+ *   Contributors:
+ *        Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+
+#ifndef SRC_PARALLELLA_TRACE_UTILS_BTF_H_
+#define SRC_PARALLELLA_TRACE_UTILS_BTF_H_
+
+/**
+ * @file trace_utils_BTF.h
+ * @author Anand Prakash
+ * @date 23 May 2020
+ * @brief This file declares and implement the BTF trace framework. It
+ * consists of functions used to generate the trace information of the tasks, runnables
+ * shared label access and hardware info in the BTF trace format.
+ *
+ * @see https://wiki.eclipse.org/images/e/e6/TA_BTF_Specification_2.1.3_Eclipse_Auto_IWG.pdf
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include "RTFParallellaConfig.h"
+
+#define RFTP_GENERATE_BTF_TRACE 0x01
+
+#define BTF_TRACE_TRUE     0x01
+#define BTF_TRACE_FALSE    0x00
+
+
+/* BTF trace flags */
+#define BTF_TRACE_BUFFER_SIZE           8
+#define TIME_FLAG                       0
+#define SOURCE_FLAG                     1
+#define SOURCE_INSTANCE_FLAG            2
+#define EVENT_TYPE_FLAG                 3
+#define TARGET_FLAG                     4
+#define TARGET_INSTANCE_FLAG            5
+#define EVENT_FLAG                      6
+#define DATA_FLAG                       7
+
+/* Enum for event type ID */
+typedef enum btf_trace_event_type_t
+{
+    TASK_EVENT,                        /**< BTF Task Event*/
+    INT_SERVICE_ROUTINE_EVENT,         /**< BTF ISR Event*/
+    RUNNABLE_EVENT,                    /**< BTF Runnable Event*/
+    INS_BLOCK_EVENT,                   /**< BTF INS Block Event*/
+    STIMULUS_EVENT,                    /**< BTF Stimulus Event*/
+    ECU_EVENT,                         /**< BTF ECU Event*/
+    PROCESSOR_EVENT,                   /**< BTF Processor Event*/
+    CORE_EVENT,                        /**< BTF Hardware Core Event*/
+    SCHEDULER_EVENT,                   /**< BTF Scheduler Event*/
+    SIGNAL_EVENT,                      /**< BTF Signal Event for reading/writing labels*/
+    SEMAPHORE_EVENT,                   /**< BTF Semaphore Event*/
+    SIMULATION_EVENT                   /**< BTF Simulation Event*/
+} btf_trace_event_type;
+
+/* Enum for event name */
+typedef enum btf_trace_event_name_t
+{
+    INIT = -1,            /**< Dummy Init Event name*/
+    PROCESS_START,        /**< Starting a process/task/runnable*/
+    PROCESS_TERMINATE,    /**< Terminating a process/task/runnable*/
+    PROCESS_PREEMPT,      /**< Preempt a process/task*/
+    PROCESS_SUSPEND,      /**< Suspend a runnable event*/
+    PROCESS_RESUME,       /**< Resume a process/task/runnable*/
+    SIGNAL_READ,          /**< Read event for signal/label*/
+    SIGNAL_WRITE          /**< Write signal for signal/label*/
+} btf_trace_event_name;
+
+
+/**
+ * Structure to hold BTF Header
+ */
+typedef struct btf_trace_header_config_t
+{
+    uint32_t timescale;           /**< This sets the scale of the time e.g 10, 100 etc.. */
+    uint8_t creator[64];          /**< Target device on which the trace is generated */
+    uint8_t modelfile[512];       /**< Model file used to generate the trace */
+    uint8_t timeunit[4];          /**< Time unit e.g ns, ms, us, s..*/
+} btf_trace_header_config_t;
+
+/* BTF structure for storing the entity configuration */
+typedef struct btf_trace_entity_entry_t
+{
+    uint16_t entity_id;                 /**< Entity ID to get the entity name */
+    int16_t instance;                   /**< Current instance of the entity */
+    btf_trace_event_name state;         /**< Current state of the entity */
+    btf_trace_event_type entity_type;   /**< Entity type to get the source*/
+    uint8_t entity_name[64];            /**< Entity name */
+
+} btf_trace_entity_entry;
+
+/* Structure to hold BTF trace data in task stack for processing */
+typedef struct btf_trace_data_t
+{
+    int32_t ticks;                     /**< Tick count */
+    int32_t srcId;                     /**< Source Id */
+    int32_t srcInstance;               /**< Instance of the source */
+    int32_t eventTypeId;               /**< Type of event Runnable , Task etc.. */
+    int32_t taskId;                    /**< Task Id */
+    int32_t taskInstance;              /**< Instance of the task */
+    int32_t eventState;                /**< State of the event */
+    int32_t data;                      /**< Notes */
+} btf_trace_data;
+
+/* Entity table structure */
+typedef struct btf_trace_entity_table_t
+{
+    uint16_t is_occupied;                 /**< If 0, entry is available else not available */
+    btf_trace_entity_entry entity_data;   /**< Entity details */
+} btf_trace_entity_table;
+
+/**
+ * @brief Function to get the file name of the trace file along with the
+ * absolute path.
+ *
+ * Arguments:
+ * @param[inout] trace_file_path  : Pointer to the buffer where the BTF trace file path
+ *                                  is stored.
+ *
+ * @return: void
+ */
+void get_btf_trace_file_path(char *trace_file_path);
+
+/**
+ * @brief Parse the command line arguments for generating the BTF trace file
+ *
+ * The provided parameters are used to configure the trace file required to
+ * be generated. For example the trace file path, model file used to generate the
+ * trace, device name and time scale.
+ *
+ * Arguments:
+ * @param[in] argc  : The count for the number of arguments passed
+ * @param[in] argv  : Pointer to the list of arguments
+ *
+ * @return: The integer value of the timescale used for the task execution.
+ */
+int parse_btf_trace_arguments(int argc, char **argv);
+
+/**
+ * @brief This function is responsible for writing the BTF trace header information.
+ *
+ * Function to write BTF header data to the trace file. It writes the version, creator,
+ * input model file, time scale and timestamp section of the header file. It also writes
+ * the entity table, type table and entity type table used in the task model.
+ *
+ * Arguments:
+ * @param[in] stream  : File pointer to the stream where the data has to be
+ *                      written.
+ *
+ * @return            : void
+ */
+void write_btf_trace_header_config(FILE *stream);
+
+/**
+ * @brief This function to write entity type in BTF header data.
+ *
+ * The function defines what kinds of entities are supported in the BTF
+ * trace generated. It consists of entity type such as Tasks, Signals, Runnables
+ * along with their IDs.
+ * Refer to below link for more details:
+ * https://wiki.eclipse.org/images/e/e6/TA_BTF_Specification_2.1.3_Eclipse_Auto_IWG.pdf
+ *
+ * Arguments:
+ * @param[in] stream  : File pointer to the stream where the data has to be
+ *                      written.
+ * @param[in] type    : Type of the entity i.e. TASK, RUNNABLE, STIMULUS etc..
+ *
+ * @return: void
+ */
+void write_btf_trace_header_entity_type(FILE *stream, btf_trace_event_type type);
+
+/**
+ * @brief Function to write entity type in BTF header data
+ *
+ * The function writes the list of tasks, runnables, shared labels, cores in a
+ * tabular format. It combines the entity type and entity type table.
+ * Refer to below link for more details:
+ * https://wiki.eclipse.org/images/e/e6/TA_BTF_Specification_2.1.3_Eclipse_Auto_IWG.pdf
+ *
+ * Arguments:
+ * @param[in] stream  : File pointer to the stream where the data has to be
+ *                     written.
+ *
+ * @return: void
+ */
+void write_btf_trace_header_entity_table(FILE *stream);
+
+/**
+ * @brief  This function writes the entity type table in the BTF header.
+ *
+ * The function writes the list of tasks, runnables, shared labels, cores in a
+ * tabular format. It consists of the tasks, runnables and shared labels executed
+ * on the specified cores along with their IDs.
+ * Refer to below link for more details:
+ * https://wiki.eclipse.org/images/e/e6/TA_BTF_Specification_2.1.3_Eclipse_Auto_IWG.pdf
+ *
+ * Arguments:
+ * @param[in] stream  : File pointer to the stream where the data has to be
+ *                      written.
+ *
+ * @return: void
+ */
+void write_btf_trace_header_entity_type_table(FILE *stream);
+
+/**
+ * @brief This function is used to store the entity information of all the
+ * tasks, runnables and labels.
+ *
+ * Store the entity metadata which can be used to generate the entity
+ * type and entity type table. Also this table entry is used to decode the
+ * tasks and runnables information received from the Parallella framework.
+ *
+ * Arguments:
+ * @param[in] typeId  : Unique entity type ID
+ * @param[in] type    : Entity type..e.g TASK, RUNNABLE etc..
+ * @param[in] name    : Entity name
+ *
+ * @return: void
+ */
+void store_entity_entry(entity_id typeId, btf_trace_event_type type, const char *name);
+
+/**
+ * @brief Function to write the data section of the BTF
+ *
+ * The function is responsible for writing the BTF trace data section in
+ * CSV format which can be interpreted by the trace visualizing tools such as
+ * Eclipse trace compass. Currently the support is provided for only two cores.
+ * However, this can be extended further for multiple cores.
+ *
+ * Arguments:
+ * @param[in] stream        : File pointer to the stream where the data has to be
+ *                            written.
+ * @param[in] core_id       : Core ID on which the task operations are performed
+ * @param[in] data_buffer   : Data buffer containing the BTF trace information.
+ *
+ * @return: void
+ */
+void write_btf_trace_data(FILE *stream, uint8_t core_id, unsigned int * data_buffer);
+
+#endif /* SRC_PARALLELLA_TRACE_UTILS_BTF_H_ */
