From 003e70bf4785a8b9e57a8f8ab5f67ae0b0dfade3 Mon Sep 17 00:00:00 2001
From: "Robin.Mueller" <robin.mueller.m@gmail.com>
Date: Mon, 29 Jun 2020 15:55:20 +0200
Subject: [PATCH] new initializeAfterTaskCreation()

---
 osal/FreeRTOS/PeriodicTask.cpp   |  3 ++-
 osal/linux/PeriodicPosixTask.cpp |  4 +++-
 osal/rtems/MultiObjectTask.cpp   |  3 ++-
 tasks/ExecutableObjectIF.h       | 25 +++++++++----------------
 tasks/FixedSequenceSlot.cpp      |  2 +-
 5 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/osal/FreeRTOS/PeriodicTask.cpp b/osal/FreeRTOS/PeriodicTask.cpp
index 170eb0a48..2ebfebf40 100644
--- a/osal/FreeRTOS/PeriodicTask.cpp
+++ b/osal/FreeRTOS/PeriodicTask.cpp
@@ -94,7 +94,8 @@ ReturnValue_t PeriodicTask::addComponent(object_id_t object, bool setTaskIF) {
 	if(setTaskIF) {
 	     newObject->setTaskIF(this);
 	}
-	return HasReturnvaluesIF::RETURN_OK;
+	ReturnValue_t result = newObject->initializeAfterTaskCreation();
+	return result;
 }
 
 uint32_t PeriodicTask::getPeriodMs() const {
diff --git a/osal/linux/PeriodicPosixTask.cpp b/osal/linux/PeriodicPosixTask.cpp
index db4005b04..b811274b6 100644
--- a/osal/linux/PeriodicPosixTask.cpp
+++ b/osal/linux/PeriodicPosixTask.cpp
@@ -36,7 +36,9 @@ ReturnValue_t PeriodicPosixTask::addComponent(object_id_t object,
 	if(setTaskIF) {
 	    newObject->setTaskIF(this);
 	}
-	return HasReturnvaluesIF::RETURN_OK;
+
+	ReturnValue_t result = newObject->initializeAfterTaskCreation();
+	return result;
 }
 
 ReturnValue_t PeriodicPosixTask::sleepFor(uint32_t ms) {
diff --git a/osal/rtems/MultiObjectTask.cpp b/osal/rtems/MultiObjectTask.cpp
index bb8c2c817..6b9c8c8ea 100644
--- a/osal/rtems/MultiObjectTask.cpp
+++ b/osal/rtems/MultiObjectTask.cpp
@@ -78,7 +78,8 @@ ReturnValue_t MultiObjectTask::addComponent(object_id_t object) {
 		return HasReturnvaluesIF::RETURN_FAILED;
 	}
 	objectList.push_back(newObject);
-	return HasReturnvaluesIF::RETURN_OK;
+	ReturnValue_t result = newObject->initializeAfterTaskCreation();
+	return result;
 }
 
 uint32_t MultiObjectTask::getPeriodMs() const {
diff --git a/tasks/ExecutableObjectIF.h b/tasks/ExecutableObjectIF.h
index f66b53dab..d716cdfbb 100644
--- a/tasks/ExecutableObjectIF.h
+++ b/tasks/ExecutableObjectIF.h
@@ -1,15 +1,5 @@
-/**
- * @file	ExecutableObjectIF.h
- *
- * @brief	This file contains the definition for the ExecutableObjectIF interface.
- *
- * @author	Bastian Baetz
- *
- * @date	12.03.2012
- */
-
-#ifndef EXECUTABLEOBJECTIF_H_
-#define EXECUTABLEOBJECTIF_H_
+#ifndef FRAMEWORK_TASKS_EXECUTABLEOBJECTIF_H_
+#define FRAMEWORK_TASKS_EXECUTABLEOBJECTIF_H_
 
 class PeriodicTaskIF;
 
@@ -20,6 +10,7 @@ class PeriodicTaskIF;
  * @brief	The interface provides a method to execute objects within a task.
  * @details	The performOperation method, that is required by the interface is
  * 			executed cyclically within a task context.
+ * @author  Bastian Baetz
  */
 class ExecutableObjectIF {
 public:
@@ -46,15 +37,17 @@ public:
 	virtual void setTaskIF(PeriodicTaskIF* task_) {};
 
 	/**
-	 * This function will be called after the object was assigned to a specific
-	 * task.
+	 * This function should be called after the object was assigned to a
+	 * specific task.
 	 *
 	 * Example: Can be used to get task execution frequency.
 	 * The task is created after initialize() and the object ctors have been
 	 * called so the execution frequency can't be cached in initialize()
 	 * @return
 	 */
-	//virtual ReturnValue_t initializeAfterTaskCreation() = 0;
+	virtual ReturnValue_t initializeAfterTaskCreation() {
+	    return HasReturnvaluesIF::RETURN_OK;
+	}
 };
 
-#endif /* EXECUTABLEOBJECTIF_H_ */
+#endif /* FRAMEWORK_TASKS_EXECUTABLEOBJECTIF_H_ */
diff --git a/tasks/FixedSequenceSlot.cpp b/tasks/FixedSequenceSlot.cpp
index 430ce0199..4331aadab 100644
--- a/tasks/FixedSequenceSlot.cpp
+++ b/tasks/FixedSequenceSlot.cpp
@@ -9,7 +9,7 @@ FixedSequenceSlot::FixedSequenceSlot(object_id_t handlerId, uint32_t setTime,
 	if(executingTask != nullptr) {
 	    handler->setTaskIF(executingTask);
 	}
-	//handler->initializeAfterTaskCreation();
+	handler->initializeAfterTaskCreation();
 }
 
 FixedSequenceSlot::~FixedSequenceSlot() {}