diff --git a/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h b/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h index ae22a060ba80dc1060512f396937b238435d6e6c..05a72f741c84caccee068b418fced5d905304042 100644 --- a/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h +++ b/source/RobotAPI/libraries/ArmarXEtherCAT/AbstractSlave.h @@ -20,7 +20,7 @@ namespace armarx public: AbstractSlave(const armarx::SlaveIdentifier slaveIdentifier, uint16_t slaveNumber); - + virtual ~AbstractSlave(){} /** * This is called after EtherCAT Bus is PreOp Mode. This is where the PDO Mapping can be configured for the slave. */ diff --git a/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h b/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h index d6146946e4ef668bb92e9a94a9865630258ef808..dad5a4d22fcd49b272231fdf3f9ba56e20327725 100644 --- a/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h +++ b/source/RobotAPI/libraries/ArmarXEtherCAT/DeviceContainer.h @@ -35,7 +35,21 @@ namespace armarx { public: size_t load(const MultiNodeRapidXMLReader &rootNodeConfigs, const VirtualRobot::RobotPtr& robot); + template <typename Type> + std::vector<std::shared_ptr<Type>> getDevicesOfType() const + { + std::vector<std::shared_ptr<Type>> results; + for (auto& dev : devices) + { + auto castedDev = std::dynamic_pointer_cast<Type>(dev); + if(castedDev) + { + results.push_back(castedDev); + } + } + return results; + } std::vector<AbstractFunctionalDevicePtr> getAllInitializedFunctionalDevices() const; std::vector<AbstractFunctionalDevicePtr> getAllUninitializedFunctionalDevices() const; virtual std::vector<AbstractFunctionalDevicePtr> getAllFunctionalDevices() const = 0;