From 6aae39bb1881e847058b4010ccff238b7ecf0202 Mon Sep 17 00:00:00 2001
From: Mirko Waechter <mirko.waechter@kit.edu>
Date: Fri, 17 Aug 2018 21:20:19 +0200
Subject: [PATCH] added a publish hook for the JointController to publish
 custom data in robotunitobserver, debug drawer or debug observer

---
 .../units/RobotUnit/JointControllers/JointController.cpp  | 5 +++++
 .../units/RobotUnit/JointControllers/JointController.h    | 4 ++++
 .../RobotUnitModules/RobotUnitModulePublisher.cpp         | 8 ++++++++
 3 files changed, 17 insertions(+)

diff --git a/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.cpp b/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.cpp
index 9638c020a..a28251058 100644
--- a/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.cpp
@@ -31,3 +31,8 @@ ControlDevice& JointController::getParent() const
     ARMARX_CHECK_EXPRESSION_W_HINT(parent, "This JointController is not owned by a ControlDevice");
     return *parent;
 }
+
+StringVariantBaseMap JointController::publish(const DebugDrawerInterfacePrx& draw, const DebugObserverInterfacePrx& observer) const
+{
+    return StringVariantBaseMap {};
+}
diff --git a/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h b/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h
index 4d12be87a..9390bc488 100644
--- a/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h
+++ b/source/RobotAPI/components/units/RobotUnit/JointControllers/JointController.h
@@ -28,6 +28,8 @@
 #include <memory>
 #include <atomic>
 
+#include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
+
 namespace armarx
 {
     class ControlDevice;
@@ -68,6 +70,8 @@ namespace armarx
 
         ControlDevice& getParent() const;
 
+        virtual StringVariantBaseMap publish(const DebugDrawerInterfacePrx& draw, const DebugObserverInterfacePrx& observer) const;
+
     protected:
         ControlDevice& rtGetParent() const;
         //called by the owning ControlDevice
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp
index 7a8044b85..a89501904 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp
@@ -238,6 +238,14 @@ namespace armarx
                 const auto activeJointCtrl = activatedControllers.jointControllers.at(ctrlidx);
                 status.activeControlMode = activeJointCtrl ? activeJointCtrl->getControlMode() : std::string {"!!JointController is nullptr!!"};
                 status.deviceName = ctrlDev.getDeviceName();
+                if (activeJointCtrl)
+                {
+                    auto additionalDatafields = activeJointCtrl->publish(debugDrawerPrx, debugObserverPrx);
+                    for (auto& pair : additionalDatafields)
+                    {
+                        ctrlDevMap[ctrlDev.getDeviceName() + "_" + activeJointCtrl->getControlMode() + "_" + pair.first] = pair.second;
+                    }
+                }
 
                 for (const auto& ctrlVal : controlThreadOutputBuffer.control.at(ctrlidx))
                 {
-- 
GitLab