Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added device for synchronization #2772

Draft
wants to merge 6 commits into
base: master
Choose a base branch
from
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
ste93 marked this conversation as resolved.
Show resolved Hide resolved
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);
ste93 marked this conversation as resolved.
Show resolved Hide resolved
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;
}
ste93 marked this conversation as resolved.
Show resolved Hide resolved
}
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>
ste93 marked this conversation as resolved.
Show resolved Hide resolved
#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