diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h b/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h index bd9507336914ecf5d6e9c5681f928f0be38f98b2..ed26d41070f7c442c1f9d75c333e51d13dca825e 100644 --- a/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h +++ b/source/RobotAPI/components/units/RobotUnit/Devices/ControlDevice.h @@ -33,8 +33,13 @@ namespace armarx { + namespace RobotUnitModule + { + TYPEDEF_PTRS_SHARED(Devices); + } TYPEDEF_PTRS_SHARED(ControlDevice); + namespace ControlDeviceTags { using namespace DeviceTags; @@ -104,6 +109,8 @@ namespace armarx */ void addJointController(JointController* jointCtrl); private: + friend class RobotUnitModule::Devices; + std::atomic<RobotUnitModule::Devices*> owner; KeyValueVector<std::string, JointController*> jointControllers; JointController* activeJointController {nullptr}; JointController* jointEmergencyStopController {nullptr}; diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h b/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h index 7ec5bc038348177922c579fd3895a69064ebe774..d66de10788422253ad6a1d89eb4ea89d0dcfacd3 100644 --- a/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h +++ b/source/RobotAPI/components/units/RobotUnit/Devices/SensorDevice.h @@ -29,6 +29,10 @@ namespace armarx { + namespace RobotUnitModule + { + TYPEDEF_PTRS_SHARED(Devices); + } TYPEDEF_PTRS_SHARED(SensorDevice); namespace SensorDeviceTags @@ -54,6 +58,10 @@ namespace armarx virtual std::string getReportingFrame() const; virtual void rtReadSensorValues(const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& timeSinceLastIteration); + + private: + friend class RobotUnitModule::Devices; + std::atomic<RobotUnitModule::Devices*> owner; }; template<class SensorValueType> diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp index 426c388b885424b370d362dda3824d4cc2648f75..ce8d0cac9604217f13f133d09c33f4e5a60ddc52 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp @@ -326,6 +326,7 @@ namespace armarx //add it ARMARX_DEBUG << "Adding the ControlDevice " << cd->getDeviceName() << " " << &cd ; controlDevices.add(cd->getDeviceName(), cd); + cd->owner = this; ARMARX_INFO << "added ControlDevice " << cd->getDeviceName(); } ARMARX_INFO << "added ControlDevice " << cd->getDeviceName(); @@ -369,12 +370,14 @@ namespace armarx //this checks if we already added such a device (do this before setting timingSensorDevice) ARMARX_DEBUG << "Adding the SensorDevice " << sd->getDeviceName() << " " << &sd ; sensorDevices.add(sd->getDeviceName(), sd); + sd->owner = this; rtThreadTimingsSensorDevice = std::dynamic_pointer_cast<RTThreadTimingsSensorDevice>(sd); } else { ARMARX_DEBUG << "Adding the SensorDevice " << sd->getDeviceName() << " " << &sd ; sensorDevices.add(sd->getDeviceName(), sd); + sd->owner = this; } } ARMARX_INFO << "added SensorDevice " << sd->getDeviceName() << " (valuetype = " << sd->getSensorValueType() << ")";