From 87d6402ac977d59ea96c5be9e8aa9a45034f9b91 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Mon, 12 Jul 2021 09:30:12 +0200
Subject: [PATCH] Add function of plugin user to plugin

---
 .../RobotUnitComponentPlugin.cpp                    | 13 +++++++++++++
 .../RobotUnitComponentPlugin.h                      | 13 +++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
index 4e6e7966c..6647cf385 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
@@ -116,6 +116,19 @@ namespace armarx::plugins
     }
 
 
+    void RobotUnitComponentPlugin::waitUntilRobotUnitIsRunning(const std::function<bool ()>& termCond) const
+    {
+        ARMARX_INFO << "Waiting until robot unit is running ...";
+
+        while (not(termCond() or not isNullptr(getRobotUnit()) or getRobotUnit()->isRunning()))
+        {
+            std::this_thread::sleep_for(std::chrono::milliseconds(100));
+        }
+
+        ARMARX_INFO << "Robot unit is up and running.";
+    }
+
+
 
 
 }  // namespace armarx::plugins
diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
index 80357a96e..4371934b9 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
@@ -34,6 +34,19 @@ namespace armarx
 
             }
 
+            /**
+             * @brief Waits until the robot unit is running.
+             *
+             * Although the robot unit proxy might be initialized (\see getRobotUnit()), the robot unit might
+             * not be fully initialized.
+             *
+             * @param termCond Termination condition.
+             *      If it evaluates to true, waitUntilRobotUnitIsRunning returns without waiting
+             *      for the robot unit to become available.
+             */
+            void waitUntilRobotUnitIsRunning(const std::function<bool()>& termCond = [] {return false;}) const;
+
+
 
             //controllers
         public:
-- 
GitLab