YARP
Yet Another Robot Platform
FrameTransformSetMultiplexer.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
7
9#include <yarp/os/LogStream.h>
10
11using namespace yarp::sig;
12using namespace yarp::dev;
13using namespace yarp::os;
14
15YARP_LOG_COMPONENT(FRAMETRANSFORMSETMULTIPLEXER, "yarp.devices.FrameTransformSetMultiplexer")
16
17
18
20{
22 yCError(FRAMETRANSFORMSETMULTIPLEXER,"Error! YARP Network is not initialized");
23 return false;
24 }
25 return true;
26}
27
28
29
31{
32 m_iFrameTransformStorageSetList.clear();
33 return true;
34}
35
36
38{
40 detachAll();
41 return true;
42}
43
44
46{
47 for (int i = 0; i < devices2attach.size(); i++)
48 {
49 yarp::dev::PolyDriver* polyDriverLocal = devices2attach[i]->poly;
50 if (polyDriverLocal->isValid())
51 {
52 yarp::dev::IFrameTransformStorageSet* iFrameTransformStorageSet=nullptr;
53 yarp::dev::IFrameTransformStorageUtils* iFrameTransformStorageUtils=nullptr;
54
55 //all attached devices must have iFrameTransformStorageSet interface while
56 //only FrameTransformStorage have iFrameTransformStorageUtils
57 if (polyDriverLocal->view(iFrameTransformStorageSet) && iFrameTransformStorageSet!=nullptr)
58 {
59 m_iFrameTransformStorageSetList.push_back(iFrameTransformStorageSet);
60 }
61 else
62 {
63 yCError(FRAMETRANSFORMSETMULTIPLEXER) << "failed to attach all the devices";
64 return false;
65 }
66
67 //attempt to iFrameTransformStorageUtils
68 polyDriverLocal->view(iFrameTransformStorageUtils);
69 m_iFrameTransformStorageUtilsList.push_back(iFrameTransformStorageUtils);
70 }
71 else
72 {
73 yCError(FRAMETRANSFORMSETMULTIPLEXER) << "polydriver not valid";
74 return false;
75 }
76 }
77 return true;
78}
79
80
81bool FrameTransformSetMultiplexer::setTransforms(const std::vector<yarp::math::FrameTransform>& transforms)
82{
83 for (size_t i = 0; i < m_iFrameTransformStorageSetList.size(); i++)
84 {
85 if (m_iFrameTransformStorageSetList[i] != nullptr) {
86 m_iFrameTransformStorageSetList[i]->setTransforms(transforms);
87 }
88 else {
89 yCError(FRAMETRANSFORMSETMULTIPLEXER) << "pointer to interface IFrameTransformStorageSet not valid";
90 return false;
91 }
92 }
93 return true;
94}
95
96
98{
99 for (size_t i = 0; i < m_iFrameTransformStorageSetList.size(); i++)
100 {
101 if (m_iFrameTransformStorageSetList[i] != nullptr) {
102 m_iFrameTransformStorageSetList[i]->setTransform(transform);
103 }
104 else {
105 yCError(FRAMETRANSFORMSETMULTIPLEXER) << "pointer to interface IFrameTransformStorageSet not valid";
106 return false;
107 }
108 }
109 return true;
110}
111
112bool FrameTransformSetMultiplexer::deleteTransform(std::string t1, std::string t2)
113{
114 //stopThreads();
115
116 bool frame_deleted = true;
117
118 for (size_t i = 0; i < m_iFrameTransformStorageSetList.size(); i++)
119 {
120 if (m_iFrameTransformStorageSetList[i] != nullptr)
121 {
122 frame_deleted &= m_iFrameTransformStorageSetList[i]->deleteTransform(t1,t2);
123 }
124 else {
125 yCError(FRAMETRANSFORMSETMULTIPLEXER) << "pointer to interface IFrameTransformStorageSet not valid";
126 return false;
127 }
128 }
129
130 //startThreads();
131
132 return frame_deleted;
133}
134
136{
137 //stopThreads();
138
139 for (size_t i = 0; i < m_iFrameTransformStorageSetList.size(); i++)
140 {
141 if (m_iFrameTransformStorageSetList[i] != nullptr) {
142 m_iFrameTransformStorageSetList[i]->clearAll();
143 }
144 else {
145 yCError(FRAMETRANSFORMSETMULTIPLEXER) << "pointer to interface IFrameTransformStorageSet not valid";
146 return false;
147 }
148 }
149
150 //startThreads();
151
152 return true;
153}
154
156{
157 for (size_t i = 0; i < m_iFrameTransformStorageSetList.size(); i++)
158 {
159 if (m_iFrameTransformStorageUtilsList[i] != nullptr) {
160 m_iFrameTransformStorageUtilsList[i]->stopStorageThread();
161 }
162 }
163}
164
166{
167 for (size_t i = 0; i < m_iFrameTransformStorageSetList.size(); i++)
168 {
169 if (m_iFrameTransformStorageUtilsList[i] != nullptr) {
170 m_iFrameTransformStorageUtilsList[i]->startStorageThread();
171 }
172 }
173}
const yarp::os::LogComponent & FRAMETRANSFORMSETMULTIPLEXER()
A multiplexer which forwards the input of one IFrameTransformStorageSet interfaces to many.
bool close() override
Close the DeviceDriver.
bool detachAll() override
Detach the object (you must have first called attach).
virtual bool clearAll() override
Delete all transforms in a storage.
virtual bool deleteTransform(std::string t1, std::string t2) override
Delete a single transform in the storage.
bool attachAll(const yarp::dev::PolyDriverList &devices2attach) override
Attach to a list of objects.
bool setTransforms(const std::vector< yarp::math::FrameTransform > &transforms) override
Save some frame transforms in a storage.
bool setTransform(const yarp::math::FrameTransform &transform) override
Save a frame transform in a storage.
bool view(T *&x)
Get an interface to the device driver.
Definition: DeviceDriver.h:88
A container for a device driver.
Definition: PolyDriver.h:23
bool isValid() const
Check if device is valid.
Definition: PolyDriver.cpp:196
static bool checkNetwork()
Check if the YARP Network is up and running.
Definition: Network.cpp:1377
A base class for nested structures that can be searched.
Definition: Searchable.h:63
#define yCError(component,...)
Definition: LogComponent.h:213
#define yCTrace(component,...)
Definition: LogComponent.h:84
#define YARP_LOG_COMPONENT(name,...)
Definition: LogComponent.h:76
For streams capable of holding different kinds of content, check what they actually have.
An interface to the operating system, including Port based communication.
The main, catch-all namespace for YARP.
Definition: dirs.h:16