Skip to content

Commit 21e9a81

Browse files
committed
- Modified to prevent duplicate indirect address write
1 parent 77c1e1c commit 21e9a81

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

robotis_controller/src/robotis_controller/robotis_controller.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,8 @@ void RobotisController::initializeDevice(const std::string init_file_path)
485485
{
486486
if (dxl->bulk_read_items_.size() != 0)
487487
{
488+
uint16_t data16 = 0;
489+
488490
bulkread_start_addr = dxl->bulk_read_items_[0]->address_;
489491
bulkread_data_length = 0;
490492

@@ -498,7 +500,11 @@ void RobotisController::initializeDevice(const std::string init_file_path)
498500
for (int l = 0; l < addr_leng; l++)
499501
{
500502
// ROS_WARN("[%12s] INDIR_ADDR: %d, ITEM_ADDR: %d", joint_name.c_str(), indirect_addr, dxl->ctrl_table[dxl->bulk_read_items[i]->item_name]->address + _l);
501-
write2Byte(joint_name, indirect_addr, dxl->ctrl_table_[dxl->bulk_read_items_[i]->item_name_]->address_ + l);
503+
read2Byte(joint_name, indirect_addr, &data16);
504+
if (data16 != dxl->ctrl_table_[dxl->bulk_read_items_[i]->item_name_]->address_ + l)
505+
{
506+
write2Byte(joint_name, indirect_addr, dxl->ctrl_table_[dxl->bulk_read_items_[i]->item_name_]->address_ + l);
507+
}
502508
indirect_addr += 2;
503509
}
504510
}
@@ -552,6 +558,8 @@ void RobotisController::initializeDevice(const std::string init_file_path)
552558
{
553559
if (sensor->bulk_read_items_.size() != 0)
554560
{
561+
uint16_t data16 = 0;
562+
555563
bulkread_start_addr = sensor->bulk_read_items_[0]->address_;
556564
bulkread_data_length = 0;
557565

@@ -565,9 +573,13 @@ void RobotisController::initializeDevice(const std::string init_file_path)
565573
for (int l = 0; l < addr_leng; l++)
566574
{
567575
// ROS_WARN("[%12s] INDIR_ADDR: %d, ITEM_ADDR: %d", sensor_name.c_str(), indirect_addr, sensor->ctrl_table[sensor->bulk_read_items[i]->item_name]->address + _l);
568-
write2Byte(sensor_name,
569-
indirect_addr,
570-
sensor->ctrl_table_[sensor->bulk_read_items_[i]->item_name_]->address_ + l);
576+
read2Byte(sensor_name, indirect_addr, &data16);
577+
if (data16 != sensor->ctrl_table_[sensor->bulk_read_items_[i]->item_name_]->address_ + l)
578+
{
579+
write2Byte(sensor_name,
580+
indirect_addr,
581+
sensor->ctrl_table_[sensor->bulk_read_items_[i]->item_name_]->address_ + l);
582+
}
571583
indirect_addr += 2;
572584
}
573585
}

0 commit comments

Comments
 (0)