Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/devices/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ yarp_begin_plugin_library(yarpmod
add_subdirectory(mobileBaseVelocityControl)
add_subdirectory(mobileBaseVelocityControlMsgs)
add_subdirectory(odometry2D)
add_subdirectory(systemReady)


add_subdirectory(portaudio) # DEPRECATED Since YARP 3.2
Expand Down
48 changes: 48 additions & 0 deletions src/devices/systemReady/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
# SPDX-License-Identifier: BSD-3-Clause


yarp_prepare_plugin(systemReady_nws_yarp
CATEGORY device
TYPE SystemReady_nws_yarp
INCLUDE SystemReady_nws_yarp.h
EXTRA_CONFIG
WRAPPER=systemReady_nws_yarp
DEFAULT ON
)

if(NOT SKIP_systemReady_nws_yarp)
yarp_add_plugin(yarp_systemReady_nws_yarp)

target_sources(yarp_systemReady_nws_yarp
PRIVATE
SystemReady_nws_yarp.cpp
SystemReady_nws_yarp.h
)

target_link_libraries(yarp_systemReady_nws_yarp
PRIVATE
YARP::YARP_os
YARP::YARP_sig
YARP::YARP_dev
)
list(APPEND YARP_${YARP_PLUGIN_MASTER}_PRIVATE_DEPS
YARP_os
YARP_sig
YARP_dev
)

yarp_install(
TARGETS yarp_systemReady_nws_yarp
EXPORT YARP_${YARP_PLUGIN_MASTER}
COMPONENT ${YARP_PLUGIN_MASTER}
LIBRARY DESTINATION ${YARP_DYNAMIC_PLUGINS_INSTALL_DIR}
ARCHIVE DESTINATION ${YARP_STATIC_PLUGINS_INSTALL_DIR}
YARP_INI DESTINATION ${YARP_PLUGIN_MANIFESTS_INSTALL_DIR}
)

set(YARP_${YARP_PLUGIN_MASTER}_PRIVATE_DEPS ${YARP_${YARP_PLUGIN_MASTER}_PRIVATE_DEPS} PARENT_SCOPE)

set_property(TARGET yarp_systemReady_nws_yarp PROPERTY FOLDER "Plugins/Device/NWS")
endif()

49 changes: 49 additions & 0 deletions src/devices/systemReady/SystemReady_nws_yarp.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
* SPDX-License-Identifier: LGPL-2.1-or-later
*/

#include "SystemReady_nws_yarp.h"
#include <yarp/os/LogComponent.h>
#include <yarp/os/LogStream.h>

YARP_LOG_COMPONENT(SYSTEMREADY_NWS_YARP, "yarp.devices.SystemReady_nws_yarp")

SystemReady_nws_yarp::SystemReady_nws_yarp()
{
}

bool SystemReady_nws_yarp::open(yarp::os::Searchable &config)
{
if (config.check("PORT_LIST")) {
yarp::os::Bottle port_list = config.findGroup("PORT_LIST");
// skips the first one since it is PORT_LIST
for (int index = 1; index < port_list.size(); index++) {
std::string current_port_property = port_list.get(index).toString();
std::string token;
int pos;
char delimiter = ' ';
pos = current_port_property.find(delimiter);
token = current_port_property.substr(0, pos);
std::string current_port_name = port_list.find(token).asString();
yCError(SYSTEMREADY_NWS_YARP) << port_list.get(index).asList()[0].toString();
yCError(SYSTEMREADY_NWS_YARP) << current_port_property;
yCError(SYSTEMREADY_NWS_YARP) << token;
yCError(SYSTEMREADY_NWS_YARP) << port_list.find(token).asString();
yarp::os::Port* current_port = new yarp::os::Port;
current_port->open(current_port_name);
port_pointers_list.push_back(current_port);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go before the if clause, otherwise the newly constructed current_port will not be accessible by the close handler for deletion, thus causing a memory leak.

}
return true;
}
return false;
}


bool SystemReady_nws_yarp::close()
{
for (auto elem: port_pointers_list){
elem->close();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There used to be a delete here in previous revisions, it needs to be kept to avoid memory leaks.

delete elem;
}
}
60 changes: 60 additions & 0 deletions src/devices/systemReady/SystemReady_nws_yarp.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
* SPDX-License-Identifier: BSD-3-Clause
*/

#ifndef YARP_SYSTEMREADY_NWS_YARP_H
#define YARP_SYSTEMREADY_NWS_YARP_H

#include <yarp/sig/Vector.h>
#include <yarp/dev/DeviceDriver.h>


/**
* @ingroup dev_impl_network_clients dev_impl_navigation
*
* \section SystemReady_nws_yarp_parameters Device description
* \brief `SystemReady_nws_yarp`: A yarp nws to open port for synchronization:
* it opens the specified ports inside the PORT_LIST group.
* Related to awaitSystemReady_nws_yarp.
*
* Parameters required by this device are:
* | Parameter name | SubParameter | Type | Units | Default Value | Required | Description |
* |:-------------------:|:-----------------------:|:-------:|:--------------:|:-------------:|:-----------------------------: |:-----------------------------------------------------|
* | PORT_NAME | - | group | | | Yes | the group inside which port names are located |
*
* example of xml file with a fake odometer
*
* \code{.unparsed}
* <?xml version="1.0" encoding="UTF-8" ?>
* <!DOCTYPE robot PUBLIC "-//YARP//DTD yarprobotinterface 3.0//EN" "http://www.yarp.it/DTD/yarprobotinterfaceV3.0.dtd">
* <robot name="fakeOdometry" build="2" portprefix="test" xmlns:xi="http://www.w3.org/2001/XInclude">
* <devices>
* <device xmlns:xi="http://www.w3.org/2001/XInclude" name="systemReady_nws_yarp" type="systemReady_nws_yarp">
* <group name="PORT_LIST">
* <param name="pippo_port">/pippo</param>
* <param name="pluto_port">/pluto</param>
* </group>
* </device>
* </devices>
* </robot>
* \endcode
*
*/

class SystemReady_nws_yarp :
public yarp::dev::DeviceDriver
{
public:
SystemReady_nws_yarp();

// DeviceDriver
bool open(yarp::os::Searchable &params) override;
bool close() override;

private:
std::vector<yarp::os::Port*> port_pointers_list;

};

#endif // YARP_SYSTEMREADY_NWS_YARP_H