@@ -215,7 +215,7 @@ DynamixelHardwareInterface::on_configure(const rclcpp_lifecycle::State& previous
215215
216216 // Set up sync read / write managers
217217 if (!setUpStateAndStatusReadManager () || !setUpTorqueWriteManager () || !setUpControlWriteManager () ||
218- !setUpCmdReadManager ()) {
218+ !setUpCmdReadManager () || ! setUpLEDWriteManager () ) {
219219 return hardware_interface::CallbackReturn::FAILURE;
220220 }
221221
@@ -690,6 +690,18 @@ bool DynamixelHardwareInterface::setUpControlWriteManager()
690690 return control_write_manager_.init (driver_);
691691}
692692
693+ bool DynamixelHardwareInterface::setUpLEDWriteManager ()
694+ {
695+ led_write_manager_ = SyncWriteManager ();
696+ for (auto & [name, joint] : joints_) {
697+ led_write_manager_.addRegister (*joint.dynamixel , DXL_REGISTER_LED_RED, joint.led_state .red );
698+ led_write_manager_.addRegister (*joint.dynamixel , DXL_REGISTER_LED_GREEN, joint.led_state .green );
699+ led_write_manager_.addRegister (*joint.dynamixel , DXL_REGISTER_LED_BLUE, joint.led_state .blue );
700+ }
701+
702+ return led_write_manager_.init (driver_);
703+ }
704+
693705bool DynamixelHardwareInterface::isHardwareOk () const
694706{
695707 bool ok = true ;
@@ -836,11 +848,13 @@ bool DynamixelHardwareInterface::unloadControllers() const
836848void DynamixelHardwareInterface::setColorLED (const int & red, const int & green, const int & blue)
837849{
838850 for (auto & [name, joint] : joints_) {
839- if (!joint.dynamixel ->writeRegister (DXL_REGISTER_LED_RED, red) ||
840- !joint.dynamixel ->writeRegister (DXL_REGISTER_LED_GREEN, green) ||
841- !joint.dynamixel ->writeRegister (DXL_REGISTER_LED_BLUE, blue)) {
842- DXL_LOG_ERROR (" Failed to set color LED for joint '" << name << " '" );
843- }
851+ joint.led_state .red = red;
852+ joint.led_state .green = green;
853+ joint.led_state .blue = blue;
854+ }
855+ // assumes communication mutex is already locked
856+ if (!led_write_manager_.write ()) {
857+ DXL_LOG_ERROR (" Failed to write LED colors." );
844858 }
845859}
846860
0 commit comments