diff --git a/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt b/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt index 722c1b20e5ea2029afba614c5a887f0a4abaefa4..d16b645a263a7f24f53ee47acaa23dc175ec1a98 100644 --- a/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt +++ b/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt @@ -56,6 +56,7 @@ set(LIB_HEADERS Constants.h ControlModes.h RobotUnit.h + RobotUnit.ipp RobotUnitObserver.h BasicControllers.h DefaultWidgetDescriptions.h diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnit.h b/source/RobotAPI/components/units/RobotUnit/RobotUnit.h index f64cca350770319a942e66d151c01927aff97c6c..5617cdd7a6b53aa8666270b9a0ba66a90aa532c0 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnit.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnit.h @@ -698,376 +698,5 @@ namespace armarx } -//inline functions -namespace armarx -{ - //RobotUnit - inline const KeyValueVector<std::string, SensorDevicePtr>& RobotUnit::getSensorDevices() const - { - return sensorDevices; - } - - inline const KeyValueVector<std::string, ControlDevicePtr>& RobotUnit::getControlDevices() const - { - return controlDevices; - } - - inline RobotUnit::TimePointT RobotUnit::Now() - { - return ClockT::now(); - } - - inline std::chrono::microseconds RobotUnit::MicroToNow(RobotUnit::TimePointT last) - { - return std::chrono::duration_cast<std::chrono::microseconds>(Now() - last); - } - - inline std::chrono::microseconds RobotUnit::MicroNow() - { - return std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); - } - - inline PropertyDefinitionsPtr RobotUnit::createPropertyDefinitions() - { - return PropertyDefinitionsPtr(new RobotUnitPropertyDefinitions(getConfigIdentifier())); - } - - inline std::string RobotUnit::getDefaultName() const - { - return "RobotUnit"; - } - - inline constexpr std::size_t RobotUnit::IndexSentinel() - { - return JointAndNJointControllers::Sentinel(); - } - - inline void RobotUnit::onInitRobotUnit() {} - - inline void RobotUnit::onConnectRobotUnit() {} - - inline void RobotUnit::onDisconnectRobotUnit() {} - - inline void RobotUnit::onExitRobotUnit() {} - - inline bool RobotUnit::rtRequestedControllersChanged() const - { - return controllersRequested.updateReadBuffer(); - } - - inline const JointAndNJointControllers& RobotUnit::rtGetRequestedControllers() const - { - return controllersRequested.getReadBuffer(); - } - - inline const std::vector<JointController*>& RobotUnit::rtGetRequestedJointControllers() const - { - return rtGetRequestedControllers().jointControllers; - } - - inline const std::vector<NJointController*>& RobotUnit::rtGetRequestedNJointControllers() const - { - return rtGetRequestedControllers().nJointControllers; - } - - inline void RobotUnit::rtWriteActivatedControllers() - { - controllersActivated.commitWrite(); - } - - inline JointAndNJointControllers& RobotUnit::rtGetActivatedControllers() - { - return controllersActivated.getWriteBuffer(); - } - - inline std::vector<JointController*>& RobotUnit::rtGetActivatedJointControllers() - { - return rtGetActivatedControllers().jointControllers; - } - - inline std::vector<NJointController*>& RobotUnit::rtGetActivatedNJointControllers() - { - return rtGetActivatedControllers().nJointControllers; - } - - inline std::vector<std::size_t>& RobotUnit::rtGetActivatedJointToNJointControllerAssignement() - { - return rtGetActivatedControllers().jointToNJointControllerAssignement; - } - - inline RTThreadTimingsSensorDevicePtr RobotUnit::createRTThreadTimingSensorDevice() const - { - return std::make_shared<RTThreadTimingsSensorDeviceImpl<>>(rtThreadTimingsSensorDeviceName); - } - - inline void RobotUnit::rtDeactivatedNJointControllerBecauseOfError(const NJointControllerPtr&) {} - - inline RTThreadTimingsSensorDevice& RobotUnit::rtGetRTThreadTimingsSensorDevice() - { - return *rtThreadTimingsSensorDevice; - } - - inline NJointControllerInterfacePrx RobotUnit::createNJointController( - const std::string& className, const std::string& instanceName, - const NJointControllerConfigPtr& config, const Ice::Current& - ) - { - //no lock required - return NJointControllerInterfacePrx::uncheckedCast( - createNJointController(className, instanceName, config, true, false)->getProxy(-1, true)); - } - - inline void RobotUnit::deleteNJointController(const std::string& name, const Ice::Current&) - { - deleteNJointControllers({name}); - } - - inline void RobotUnit::activateNJointController(const std::string& name, const Ice::Current&) - { - activateNJointControllers({name}); - } - - inline void RobotUnit::deactivateNJointController(const std::string& name, const Ice::Current&) - { - deactivateNJointControllers(Ice::StringSeq {name}); - } - - inline void RobotUnit::checkSetOfControllersToActivate(const JointAndNJointControllers&) const {} - - inline Ice::StringSeq RobotUnit::getNJointControllerNames(const Ice::Current&) const - { - auto guard = getGuard(); - return getMapKeys(nJointControllers); - } - - inline Ice::StringSeq RobotUnit::getRequestedNJointControllerNames(const Ice::Current&) const - { - auto guard = getGuard(); - return GetNonNullNames(getRequestedNJointControllers()); - } - - inline Ice::StringSeq RobotUnit::getActivatedNJointControllerNames(const Ice::Current&) const - { - auto guard = getGuard(); - return GetNonNullNames(getActivatedNJointControllers()); - } - - inline Ice::StringSeq RobotUnit::getNJointControllerClassNames(const Ice::Current&) const - { - return NJointControllerRegistry::getKeys(); - } - - inline KinematicUnitInterfacePrx RobotUnit::getKinematicUnit(const Ice::Current&) const - { - //no lock required - return KinematicUnitInterfacePrx::uncheckedCast(getUnit(KinematicUnitInterface::ice_staticId(), GlobalIceCurrent)); - } - - inline ForceTorqueUnitInterfacePrx RobotUnit::getForceTorqueUnit(const Ice::Current&) const - { - //no lock required - return ForceTorqueUnitInterfacePrx::uncheckedCast(getUnit(ForceTorqueUnitInterface::ice_staticId(), GlobalIceCurrent)); - } - - inline InertialMeasurementUnitInterfacePrx RobotUnit::getInertialMeasurementUnit(const Ice::Current&) const - { - //no lock required - return InertialMeasurementUnitInterfacePrx::uncheckedCast( - getUnit(InertialMeasurementUnitInterface::ice_staticId(), GlobalIceCurrent)); - } - - inline PlatformUnitInterfacePrx RobotUnit::getPlatformUnit(const Ice::Current&) const - { - //no lock required - return PlatformUnitInterfacePrx::uncheckedCast(getUnit(PlatformUnitInterface::ice_staticId(), GlobalIceCurrent)); - } - - inline std::string RobotUnit::getListenerTopicName(const Ice::Current&) const - { - auto guard = getGuard(); - return robotUnitListenerTopicName; - } - - inline const std::string& RobotUnit::getRobotNodetSeName() const - { - return robotNodeSetName; - } - - inline const std::string& RobotUnit::getRobotProjectName() const - { - return robotProjectName; - } - - inline const std::string& RobotUnit::getRobotFileName() const - { - return robotFileName; - } - - inline const std::string& RobotUnit::getRobotPlatformName() const - { - return robotPlatformName; - } - - inline std::size_t RobotUnit::rtGetNumberOfControlDevices() const - { - return controlDevices.size(); - } - - inline std::size_t RobotUnit::rtGetNumberOfSensorDevices() const - { - return sensorDevices.size(); - } - - inline bool RobotUnit::areDevicesReady() const - { - return devicesReadyStates.count(state); - } - - inline RobotUnitState RobotUnit::getRobotUnitState() const - { - return state; - } - - inline std::string RobotUnit::getName() const - { - return Component::getName(); - } - - inline void RobotUnit::setEmergencyStopState(EmergencyStopState state) - { - emergencyStop = (state == EmergencyStopState::eEmergencyStopActive); - } - - inline EmergencyStopState RobotUnit::getEmergencyStopState() const - { - return emergencyStop ? EmergencyStopState::eEmergencyStopActive : - EmergencyStopState::eEmergencyStopInactive; - } - - template<class ExceptT> - inline void RobotUnit::throwIfStateIsNot(const std::set<RobotUnitState>& sinit, const std::string& fnc, bool onlyWarn) const - { - std::set<RobotUnitState> sset {sinit}; - if (! sset.count(state)) - { - std::stringstream ss; - ss << fnc << ": Can't be called if state is not in {"; - bool fst = true; - for (RobotUnitState st : sset) - { - if (!fst) - { - ss << ", "; - } - ss << st; - fst = false; - } - ss << "} (current state " << getRobotUnitState() << ")"; - ARMARX_ERROR << ss.str(); - if (!onlyWarn) - { - throw ExceptT {ss.str()}; - } - } - } - - template<class ExceptT> - inline void RobotUnit::throwIfStateIsNot(RobotUnitState s, const std::string& fnc, bool onlyWarn) const - { - throwIfStateIsNot<ExceptT>(std::set<RobotUnitState> {s}, fnc, onlyWarn); - } - - template<class ExceptT> - inline void RobotUnit::throwIfDevicesNotReady(const std::string& fnc) const - { - throwIfStateIsNot<ExceptT>(devicesReadyStates, fnc); - } - - template<class Cont> - inline Ice::StringSeq RobotUnit::GetNonNullNames(const Cont& c) - { - Ice::StringSeq result; - result.reserve(c.size()); - for (const auto& e : c) - { - if (e) - { - result.emplace_back(e->getName()); - } - } - return result; - } - - //RobotUnitNJointControllerAccess - inline void RobotUnitNJointControllerAccess::RtSetNJointControllerActivatedStatus(const NJointControllerPtr& nJointCtrl) - { - nJointCtrl->rtActivateController(); - } - - inline void RobotUnitNJointControllerAccess::RtSetNJointControllerDeactivatedStatus(const NJointControllerPtr& nJointCtrl) - { - nJointCtrl->rtDeactivateController(); - } - - inline void RobotUnitNJointControllerAccess::RtSetNJointControllerDeactivatedBecauseOfErrorStatus(const NJointControllerPtr& nJointCtrl) - { - nJointCtrl->rtDeactivateControllerBecauseOfError(); - } - - inline void RobotUnitNJointControllerAccess::InitNJointControler( - const NJointControllerPtr& nJointCtrl, - RobotUnit* ru, - std::size_t ctrlId, - std::map<std::string, const JointController*> ctrlDeviceUsedJointController, - std::vector<char> ctrlDeviceUsedBitmap, - std::vector<std::size_t> ctrlDeviceUsedIndices, - bool deletable, bool internal - ) noexcept - { - nJointCtrl->robotUnitInit( - ru, ctrlId, std::move(ctrlDeviceUsedJointController), std::move(ctrlDeviceUsedBitmap), - std::move(ctrlDeviceUsedIndices), deletable, internal - ); - } - - inline void RobotUnitNJointControllerAccess::PublishNJointController( - const NJointControllerPtr& nJointCtrl, - const SensorAndControl& sac, - const DebugDrawerInterfacePrx& draw, - const DebugObserverInterfacePrx& observer - ) - { - nJointCtrl ->publish(sac, draw, observer); - } - - inline bool RobotUnitNJointControllerAccess::GetNJointControllerStatusReportedActive(const NJointControllerPtr& nJointCtrl) - { - return nJointCtrl->statusReportedActive; - } - - inline bool RobotUnitNJointControllerAccess::GetNJointControllerStatusReportedRequested(const NJointControllerPtr& nJointCtrl) - { - return nJointCtrl->statusReportedRequested; - } - - inline void RobotUnitNJointControllerAccess::UpdateNJointControllerStatusReported(const NJointControllerPtr& nJointCtrl) - { - nJointCtrl->statusReportedActive = nJointCtrl->isActive.load(); - nJointCtrl->statusReportedRequested = nJointCtrl->isRequested.load(); - } - - inline void RobotUnitNJointControllerAccess::SetNJointControllerRequested(const NJointControllerPtr& nJointCtrl, bool requested) - { - nJointCtrl->isRequested = requested; - } - - inline void RobotUnitNJointControllerAccess::DeactivateNJointControllerPublishing( - const NJointControllerPtr& nJointCtrl, - const DebugDrawerInterfacePrx& draw, - const DebugObserverInterfacePrx& observer - ) - { - nJointCtrl->deactivatePublish(draw, observer); - } -} +#include "RobotUnit.ipp" #endif diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnit.ipp b/source/RobotAPI/components/units/RobotUnit/RobotUnit.ipp new file mode 100644 index 0000000000000000000000000000000000000000..9e462648eded545d67df2f99eced29761b03ab33 --- /dev/null +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnit.ipp @@ -0,0 +1,400 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::RobotUnit + * @author Raphael ( ufdrv at student dot kit dot edu ) + * @date 2017 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#ifndef _ARMARX_UNIT_RobotAPI_RobotUnit_IPP +#define _ARMARX_UNIT_RobotAPI_RobotUnit_IPP + +#include "RobotUnit.h" + +//inline functions +namespace armarx +{ + //RobotUnit + inline const KeyValueVector<std::string, SensorDevicePtr>& RobotUnit::getSensorDevices() const + { + return sensorDevices; + } + + inline const KeyValueVector<std::string, ControlDevicePtr>& RobotUnit::getControlDevices() const + { + return controlDevices; + } + + inline RobotUnit::TimePointT RobotUnit::Now() + { + return ClockT::now(); + } + + inline std::chrono::microseconds RobotUnit::MicroToNow(RobotUnit::TimePointT last) + { + return std::chrono::duration_cast<std::chrono::microseconds>(Now() - last); + } + + inline std::chrono::microseconds RobotUnit::MicroNow() + { + return std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); + } + + inline PropertyDefinitionsPtr RobotUnit::createPropertyDefinitions() + { + return PropertyDefinitionsPtr(new RobotUnitPropertyDefinitions(getConfigIdentifier())); + } + + inline std::string RobotUnit::getDefaultName() const + { + return "RobotUnit"; + } + + inline constexpr std::size_t RobotUnit::IndexSentinel() + { + return JointAndNJointControllers::Sentinel(); + } + + inline void RobotUnit::onInitRobotUnit() {} + + inline void RobotUnit::onConnectRobotUnit() {} + + inline void RobotUnit::onDisconnectRobotUnit() {} + + inline void RobotUnit::onExitRobotUnit() {} + + inline bool RobotUnit::rtRequestedControllersChanged() const + { + return controllersRequested.updateReadBuffer(); + } + + inline const JointAndNJointControllers& RobotUnit::rtGetRequestedControllers() const + { + return controllersRequested.getReadBuffer(); + } + + inline const std::vector<JointController*>& RobotUnit::rtGetRequestedJointControllers() const + { + return rtGetRequestedControllers().jointControllers; + } + + inline const std::vector<NJointController*>& RobotUnit::rtGetRequestedNJointControllers() const + { + return rtGetRequestedControllers().nJointControllers; + } + + inline void RobotUnit::rtWriteActivatedControllers() + { + controllersActivated.commitWrite(); + } + + inline JointAndNJointControllers& RobotUnit::rtGetActivatedControllers() + { + return controllersActivated.getWriteBuffer(); + } + + inline std::vector<JointController*>& RobotUnit::rtGetActivatedJointControllers() + { + return rtGetActivatedControllers().jointControllers; + } + + inline std::vector<NJointController*>& RobotUnit::rtGetActivatedNJointControllers() + { + return rtGetActivatedControllers().nJointControllers; + } + + inline std::vector<std::size_t>& RobotUnit::rtGetActivatedJointToNJointControllerAssignement() + { + return rtGetActivatedControllers().jointToNJointControllerAssignement; + } + + inline RTThreadTimingsSensorDevicePtr RobotUnit::createRTThreadTimingSensorDevice() const + { + return std::make_shared<RTThreadTimingsSensorDeviceImpl<>>(rtThreadTimingsSensorDeviceName); + } + + inline void RobotUnit::rtDeactivatedNJointControllerBecauseOfError(const NJointControllerPtr&) {} + + inline RTThreadTimingsSensorDevice& RobotUnit::rtGetRTThreadTimingsSensorDevice() + { + return *rtThreadTimingsSensorDevice; + } + + inline NJointControllerInterfacePrx RobotUnit::createNJointController( + const std::string& className, const std::string& instanceName, + const NJointControllerConfigPtr& config, const Ice::Current& + ) + { + //no lock required + return NJointControllerInterfacePrx::uncheckedCast( + createNJointController(className, instanceName, config, true, false)->getProxy(-1, true)); + } + + inline void RobotUnit::deleteNJointController(const std::string& name, const Ice::Current&) + { + deleteNJointControllers({name}); + } + + inline void RobotUnit::activateNJointController(const std::string& name, const Ice::Current&) + { + activateNJointControllers({name}); + } + + inline void RobotUnit::deactivateNJointController(const std::string& name, const Ice::Current&) + { + deactivateNJointControllers(Ice::StringSeq {name}); + } + + inline void RobotUnit::checkSetOfControllersToActivate(const JointAndNJointControllers&) const {} + + inline Ice::StringSeq RobotUnit::getNJointControllerNames(const Ice::Current&) const + { + auto guard = getGuard(); + return getMapKeys(nJointControllers); + } + + inline Ice::StringSeq RobotUnit::getRequestedNJointControllerNames(const Ice::Current&) const + { + auto guard = getGuard(); + return GetNonNullNames(getRequestedNJointControllers()); + } + + inline Ice::StringSeq RobotUnit::getActivatedNJointControllerNames(const Ice::Current&) const + { + auto guard = getGuard(); + return GetNonNullNames(getActivatedNJointControllers()); + } + + inline Ice::StringSeq RobotUnit::getNJointControllerClassNames(const Ice::Current&) const + { + return NJointControllerRegistry::getKeys(); + } + + inline KinematicUnitInterfacePrx RobotUnit::getKinematicUnit(const Ice::Current&) const + { + //no lock required + return KinematicUnitInterfacePrx::uncheckedCast(getUnit(KinematicUnitInterface::ice_staticId(), GlobalIceCurrent)); + } + + inline ForceTorqueUnitInterfacePrx RobotUnit::getForceTorqueUnit(const Ice::Current&) const + { + //no lock required + return ForceTorqueUnitInterfacePrx::uncheckedCast(getUnit(ForceTorqueUnitInterface::ice_staticId(), GlobalIceCurrent)); + } + + inline InertialMeasurementUnitInterfacePrx RobotUnit::getInertialMeasurementUnit(const Ice::Current&) const + { + //no lock required + return InertialMeasurementUnitInterfacePrx::uncheckedCast( + getUnit(InertialMeasurementUnitInterface::ice_staticId(), GlobalIceCurrent)); + } + + inline PlatformUnitInterfacePrx RobotUnit::getPlatformUnit(const Ice::Current&) const + { + //no lock required + return PlatformUnitInterfacePrx::uncheckedCast(getUnit(PlatformUnitInterface::ice_staticId(), GlobalIceCurrent)); + } + + inline std::string RobotUnit::getListenerTopicName(const Ice::Current&) const + { + auto guard = getGuard(); + return robotUnitListenerTopicName; + } + + inline const std::string& RobotUnit::getRobotNodetSeName() const + { + return robotNodeSetName; + } + + inline const std::string& RobotUnit::getRobotProjectName() const + { + return robotProjectName; + } + + inline const std::string& RobotUnit::getRobotFileName() const + { + return robotFileName; + } + + inline const std::string& RobotUnit::getRobotPlatformName() const + { + return robotPlatformName; + } + + inline std::size_t RobotUnit::rtGetNumberOfControlDevices() const + { + return controlDevices.size(); + } + + inline std::size_t RobotUnit::rtGetNumberOfSensorDevices() const + { + return sensorDevices.size(); + } + + inline bool RobotUnit::areDevicesReady() const + { + return devicesReadyStates.count(state); + } + + inline RobotUnitState RobotUnit::getRobotUnitState() const + { + return state; + } + + inline std::string RobotUnit::getName() const + { + return Component::getName(); + } + + inline void RobotUnit::setEmergencyStopState(EmergencyStopState state) + { + emergencyStop = (state == EmergencyStopState::eEmergencyStopActive); + } + + inline EmergencyStopState RobotUnit::getEmergencyStopState() const + { + return emergencyStop ? EmergencyStopState::eEmergencyStopActive : + EmergencyStopState::eEmergencyStopInactive; + } + + template<class ExceptT> + inline void RobotUnit::throwIfStateIsNot(const std::set<RobotUnitState>& sinit, const std::string& fnc, bool onlyWarn) const + { + std::set<RobotUnitState> sset {sinit}; + if (! sset.count(state)) + { + std::stringstream ss; + ss << fnc << ": Can't be called if state is not in {"; + bool fst = true; + for (RobotUnitState st : sset) + { + if (!fst) + { + ss << ", "; + } + ss << st; + fst = false; + } + ss << "} (current state " << getRobotUnitState() << ")"; + ARMARX_ERROR << ss.str(); + if (!onlyWarn) + { + throw ExceptT {ss.str()}; + } + } + } + + template<class ExceptT> + inline void RobotUnit::throwIfStateIsNot(RobotUnitState s, const std::string& fnc, bool onlyWarn) const + { + throwIfStateIsNot<ExceptT>(std::set<RobotUnitState> {s}, fnc, onlyWarn); + } + + template<class ExceptT> + inline void RobotUnit::throwIfDevicesNotReady(const std::string& fnc) const + { + throwIfStateIsNot<ExceptT>(devicesReadyStates, fnc); + } + + template<class Cont> + inline Ice::StringSeq RobotUnit::GetNonNullNames(const Cont& c) + { + Ice::StringSeq result; + result.reserve(c.size()); + for (const auto& e : c) + { + if (e) + { + result.emplace_back(e->getName()); + } + } + return result; + } + + //RobotUnitNJointControllerAccess + inline void RobotUnitNJointControllerAccess::RtSetNJointControllerActivatedStatus(const NJointControllerPtr& nJointCtrl) + { + nJointCtrl->rtActivateController(); + } + + inline void RobotUnitNJointControllerAccess::RtSetNJointControllerDeactivatedStatus(const NJointControllerPtr& nJointCtrl) + { + nJointCtrl->rtDeactivateController(); + } + + inline void RobotUnitNJointControllerAccess::RtSetNJointControllerDeactivatedBecauseOfErrorStatus(const NJointControllerPtr& nJointCtrl) + { + nJointCtrl->rtDeactivateControllerBecauseOfError(); + } + + inline void RobotUnitNJointControllerAccess::InitNJointControler( + const NJointControllerPtr& nJointCtrl, + RobotUnit* ru, + std::size_t ctrlId, + std::map<std::string, const JointController*> ctrlDeviceUsedJointController, + std::vector<char> ctrlDeviceUsedBitmap, + std::vector<std::size_t> ctrlDeviceUsedIndices, + bool deletable, bool internal + ) noexcept + { + nJointCtrl->robotUnitInit( + ru, ctrlId, std::move(ctrlDeviceUsedJointController), std::move(ctrlDeviceUsedBitmap), + std::move(ctrlDeviceUsedIndices), deletable, internal + ); + } + + inline void RobotUnitNJointControllerAccess::PublishNJointController( + const NJointControllerPtr& nJointCtrl, + const SensorAndControl& sac, + const DebugDrawerInterfacePrx& draw, + const DebugObserverInterfacePrx& observer + ) + { + nJointCtrl ->publish(sac, draw, observer); + } + + inline bool RobotUnitNJointControllerAccess::GetNJointControllerStatusReportedActive(const NJointControllerPtr& nJointCtrl) + { + return nJointCtrl->statusReportedActive; + } + + inline bool RobotUnitNJointControllerAccess::GetNJointControllerStatusReportedRequested(const NJointControllerPtr& nJointCtrl) + { + return nJointCtrl->statusReportedRequested; + } + + inline void RobotUnitNJointControllerAccess::UpdateNJointControllerStatusReported(const NJointControllerPtr& nJointCtrl) + { + nJointCtrl->statusReportedActive = nJointCtrl->isActive.load(); + nJointCtrl->statusReportedRequested = nJointCtrl->isRequested.load(); + } + + inline void RobotUnitNJointControllerAccess::SetNJointControllerRequested(const NJointControllerPtr& nJointCtrl, bool requested) + { + nJointCtrl->isRequested = requested; + } + + inline void RobotUnitNJointControllerAccess::DeactivateNJointControllerPublishing( + const NJointControllerPtr& nJointCtrl, + const DebugDrawerInterfacePrx& draw, + const DebugObserverInterfacePrx& observer + ) + { + nJointCtrl->deactivatePublish(draw, observer); + } +} +#endif