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 
8 #include <yarp/os/LogComponent.h>
9 #include <yarp/os/LogStream.h>
10 
11 using namespace yarp::sig;
12 using namespace yarp::dev;
13 using namespace yarp::os;
14 
15 YARP_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 
81 bool 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 
112 bool 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:74
A container for a device driver.
Definition: PolyDriver.h:24
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:66
#define yCError(component,...)
Definition: LogComponent.h:154
#define yCTrace(component,...)
Definition: LogComponent.h:85
#define YARP_LOG_COMPONENT(name,...)
Definition: LogComponent.h:77
An interface for the device drivers.
An interface to the operating system, including Port based communication.
Signal processing.
Definition: Image.h:22
The main, catch-all namespace for YARP.
Definition: dirs.h:16