From e4f40cb2410146eb81b3492e9178c09978af93e0 Mon Sep 17 00:00:00 2001
From: Fabian Peller <fabian.peller-konrad@kit.edu>
Date: Tue, 17 Oct 2023 19:14:08 +0200
Subject: [PATCH] added simple skill classes for periodic skills

---
 .../skills/provider/SimplePeriodicSkill.cpp   | 21 ++++++++
 .../skills/provider/SimplePeriodicSkill.h     | 30 +++++++++++
 .../SimplePeriodicSpecializedSkill.cpp        |  6 +++
 .../provider/SimplePeriodicSpecializedSkill.h | 51 +++++++++++++++++++
 4 files changed, 108 insertions(+)
 create mode 100644 source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.cpp
 create mode 100644 source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.h
 create mode 100644 source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.cpp
 create mode 100644 source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.h

diff --git a/source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.cpp b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.cpp
new file mode 100644
index 000000000..d5f8e6cbd
--- /dev/null
+++ b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.cpp
@@ -0,0 +1,21 @@
+#include "SimplePeriodicSkill.h"
+
+namespace armarx::skills
+{
+
+    PeriodicSkill::StepResult SimplePeriodicSkill::step()
+    {
+        StepInput i;
+        i.executorName = this->executorName;
+        i.parameters = this->parameters;
+        i.callback = this->callback;
+        return this->step(i);
+    }
+
+    PeriodicSkill::StepResult SimplePeriodicSkill::step(const StepInput& in)
+    {
+        ARMARX_IMPORTANT << "Dummy executing once skill '" << description.skillId
+                         << "'. Please overwrite this method!";
+        return {ActiveOrTerminatedSkillStatus::Succeeded, nullptr};
+    }
+}
diff --git a/source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.h b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.h
new file mode 100644
index 000000000..69a7ccc18
--- /dev/null
+++ b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSkill.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include <RobotAPI/libraries/skills/provider/PeriodicSkill.h>
+
+namespace armarx
+{
+    namespace skills
+    {
+        class SimplePeriodicSkill : public PeriodicSkill
+        {
+        public:
+          using Base = PeriodicSkill;
+
+          struct StepInput
+          {
+            std::string executorName;
+            aron::data::DictPtr parameters;
+            CallbackT callback;
+          };
+
+          using Base::Base;
+
+        protected:
+          StepResult step() final;
+
+          virtual StepResult step(const StepInput& in);
+
+        };
+    } // namespace skills
+} // namespace armarx
diff --git a/source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.cpp b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.cpp
new file mode 100644
index 000000000..a04c2b3d8
--- /dev/null
+++ b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.cpp
@@ -0,0 +1,6 @@
+#include "SimplePeriodicSpecializedSkill.h"
+
+namespace armarx::skills
+{
+
+}
diff --git a/source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.h b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.h
new file mode 100644
index 000000000..221fdc2c7
--- /dev/null
+++ b/source/RobotAPI/libraries/skills/provider/SimplePeriodicSpecializedSkill.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include <RobotAPI/libraries/skills/provider/PeriodicSpecializedSkill.h>
+
+namespace armarx
+{
+    namespace skills
+    {
+        template <class AronT>
+        class SimplePeriodicSpecializedSkill : public PeriodicSpecializedSkill<AronT>
+        {
+
+        public:
+          using Base = PeriodicSpecializedSkill<AronT>;
+          using Skill::description;
+          using Skill::getSkillId;
+
+          using StepResult = PeriodicSkill::StepResult;
+
+          using Base::Base;
+
+          struct SpecializedStepInput
+          {
+            std::string executorName;
+            AronT parameters;
+            Skill::CallbackT callback;
+          };
+
+        protected:
+          StepResult step() final
+          {
+              AronT p;
+              p.fromAron(this->parameters);
+
+              SpecializedStepInput i;
+              i.executorName = this->executorName;
+              i.parameters = p;
+              i.callback = this->callback;
+              return this->step(i);
+          }
+
+          virtual StepResult step(const SpecializedStepInput& in)
+          {
+              ARMARX_IMPORTANT << "Dummy executing once skill '" << description.skillId
+                               << "'. Please overwrite this method!";
+              return {ActiveOrTerminatedSkillStatus::Succeeded, nullptr};
+          }
+
+        };
+    } // namespace skills
+} // namespace armarx
-- 
GitLab