Skip to content

Commit 144633a

Browse files
bugfix: double insertion if dobule on_configure
1 parent 53fd278 commit 144633a

4 files changed

Lines changed: 13 additions & 9 deletions

File tree

plc_controller/include/plc_controller/parameter_utils.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,17 @@ namespace parameter_utils
2424
* @return InterfacesNames Vector of "gpio/interface" strings in iteration order.
2525
*/
2626
template <typename GpioMap>
27-
void flatten_gpio_interface_map(const GpioMap & gpios_map, InterfacesNames& result)
27+
InterfacesNames flatten_gpio_interface_map(const GpioMap & gpios_map)
2828
{
29+
InterfacesNames result;
2930
for (const auto & [gpio_name, interface_data] : gpios_map)
3031
{
3132
std::transform(
3233
interface_data.interfaces.cbegin(), interface_data.interfaces.cend(),
3334
std::back_inserter(result),
3435
[&gpio_name](const std::string & interface_name) { return gpio_name + '/' + interface_name; });
3536
}
37+
return result;
3638
}
3739

3840
/**

plc_controller/include/plc_controller/plc_controller.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ class PLCController : public controller_interface::ControllerInterface
325325
*
326326
* Used when state_interfaces not explicitly configured in YAML (auto-discovery).
327327
*/
328-
void set_all_state_interfaces_of_configured_gpios();
328+
InterfacesNames set_all_state_interfaces_of_configured_gpios();
329329

330330
/**
331331
* @brief Parse URDF hardware information to extract GPIO definitions.

plc_controller/src/plc_controller.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ bool PLCController::update_dynamic_map_parameters()
386386
*/
387387
void PLCController::store_command_interface_types()
388388
{
389-
parameter_utils::flatten_gpio_interface_map(params_.command_interfaces.gpios_map, command_interface_types_);
389+
command_interface_types_ = parameter_utils::flatten_gpio_interface_map(params_.command_interfaces.gpios_map);
390390
}
391391

392392

@@ -444,8 +444,9 @@ catch (const std::exception & e)
444444
*
445445
* Result stored in: state_interface_types_
446446
*/
447-
void PLCController::set_all_state_interfaces_of_configured_gpios()
447+
InterfacesNames PLCController::set_all_state_interfaces_of_configured_gpios()
448448
{
449+
InterfacesNames result;
449450
const auto gpios{get_gpios_from_urdf()};
450451
for (const auto & gpio_name : params_.gpios)
451452
{
@@ -455,12 +456,13 @@ void PLCController::set_all_state_interfaces_of_configured_gpios()
455456
{
456457
std::transform(
457458
gpio.state_interfaces.begin(), gpio.state_interfaces.end(),
458-
std::back_insert_iterator(state_interface_types_),
459+
std::back_insert_iterator(result),
459460
[&gpio_name](const auto & interface_name)
460461
{ return gpio_name + '/' + interface_name.name; });
461462
}
462463
}
463464
}
465+
return result;
464466
}
465467

466468

@@ -485,11 +487,11 @@ void PLCController::store_state_interface_types()
485487
get_node()->get_logger(),
486488
"State interfaces are not configured. All available interfaces of configured GPIOs will be "
487489
"broadcasted.");
488-
set_all_state_interfaces_of_configured_gpios();
490+
state_interface_types_ = set_all_state_interfaces_of_configured_gpios();
489491
return;
490492
}
491493

492-
parameter_utils::flatten_gpio_interface_map(params_.state_interfaces.gpios_map, state_interface_types_);
494+
state_interface_types_ = parameter_utils::flatten_gpio_interface_map(params_.state_interfaces.gpios_map);
493495
}
494496

495497

plc_controller/test/unit/test_parameter_utils.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ TEST(ParameterUtils, FlattenGpioInterfaceMapBuildsQualifiedNames)
2727
};
2828

2929
InterfacesNames flattened;
30-
parameter_utils::flatten_gpio_interface_map(config, flattened);
30+
flattened = parameter_utils::flatten_gpio_interface_map(config);
3131

3232
ASSERT_EQ(flattened.size(), 3u);
3333
EXPECT_EQ(flattened[0], "alpha_gpio/one");
@@ -39,7 +39,7 @@ TEST(ParameterUtils, FlattenGpioInterfaceMapHandlesEmptyMap)
3939
{
4040
std::map<std::string, FakeInterfaceSet> config{};
4141
InterfacesNames flattened;
42-
parameter_utils::flatten_gpio_interface_map(config, flattened);
42+
flattened = parameter_utils::flatten_gpio_interface_map(config);
4343
EXPECT_TRUE(flattened.empty());
4444
}
4545

0 commit comments

Comments
 (0)