From e718a10940ce8e1690daebe05d1d87ec39c9021d Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Fri, 13 Mar 2020 19:29:59 +0100
Subject: [PATCH] num_assigned_ids is only incremented if the corresponding
 device has not beeen initialized yet.

---
 dynamixel_manager/src/dyn_manager.c            | 4 ----
 dynamixel_manager/src/dyn_module.c             | 9 ++++++---
 dynamixel_manager/src/modules/motion_manager.c | 4 ++--
 3 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/dynamixel_manager/src/dyn_manager.c b/dynamixel_manager/src/dyn_manager.c
index 59076d3..3685f03 100644
--- a/dynamixel_manager/src/dyn_manager.c
+++ b/dynamixel_manager/src/dyn_manager.c
@@ -1048,7 +1048,6 @@ void dyn_manager_loop(TDynManager *manager)
   }
 
   // send all the commands
-  std::cout << "start loop" << std::endl;
   dyn_manager_lock(manager);
   do{
     for(i=0;i<manager->num_masters;i++)
@@ -1109,7 +1108,6 @@ void dyn_manager_loop(TDynManager *manager)
                                    dyn_master_start_sync_read(manager->masters[i],sync_op[i]->num_devices,sync_op[i]->ids,sync_op[i]->address,sync_op[i]->length,sync_op[i]->data);
                                  else
                                    dyn_master_start_sync_write(manager->masters[i],sync_op[i]->num_devices,sync_op[i]->ids,sync_op[i]->address,sync_op[i]->length,sync_op[i]->data);
-                                 usleep(300);
                                  states[i]=wait_sync_ops;
                                  sync_op_period_count[current_sync_op[i]]=0;
                                }
@@ -1149,7 +1147,6 @@ void dyn_manager_loop(TDynManager *manager)
                                    dyn_master_start_bulk_read(manager->masters[i],bulk_op[i]->num_devices,bulk_op[i]->ids,bulk_op[i]->address,bulk_op[i]->length,bulk_op[i]->data);
                                  else
                                    dyn_master_start_bulk_write(manager->masters[i],bulk_op[i]->num_devices,bulk_op[i]->ids,bulk_op[i]->address,bulk_op[i]->length,bulk_op[i]->data);
-                                 usleep(300);
                                  states[i]=wait_bulk_ops;
                                  bulk_op_period_count[current_bulk_op[i]]=0;
                                }
@@ -1183,7 +1180,6 @@ void dyn_manager_loop(TDynManager *manager)
     }
   }while(loop_done>0);
   dyn_manager_unlock(manager);
-  std::cout << "loop done" << std::endl;
 
   // execute the pre_process functions for all modules
   for(i=0;i<manager->num_modules;i++)
diff --git a/dynamixel_manager/src/dyn_module.c b/dynamixel_manager/src/dyn_module.c
index 949fe66..5f52cb2 100644
--- a/dynamixel_manager/src/dyn_module.c
+++ b/dynamixel_manager/src/dyn_module.c
@@ -76,9 +76,12 @@ void dyn_module_add_device(TDynModule *module,unsigned char id, unsigned short i
   for(i=0;i<module->num_models;i++)
   {
     if(model==module->models[i])
-    {
-      module->assigned_ids[id]=0x01;
-      module->num_assigned_ids++;
+    { 
+      if(module->assigned_ids[id]==0x00)
+      {
+        module->assigned_ids[id]=0x01;
+        module->num_assigned_ids++;
+      }
       if(module->add_device!=0x00000000)
         module->add_device(module->data,id,model);
       break;
diff --git a/dynamixel_manager/src/modules/motion_manager.c b/dynamixel_manager/src/modules/motion_manager.c
index c542a68..29dc9a5 100644
--- a/dynamixel_manager/src/modules/motion_manager.c
+++ b/dynamixel_manager/src/modules/motion_manager.c
@@ -135,8 +135,8 @@ void mmanager_add_device(TMotionManager *mmanager,unsigned char id,unsigned shor
   if(id<DYN_MANAGER_MAX_NUM_DEVICES)
   {
     for(i=0;i<NUM_SERVO_MODELS;i++)
-    if(model==servo_data[i].model)
-      mmanager->servo_configs[id]=&servo_data[i];
+      if(model==servo_data[i].model)
+        mmanager->servo_configs[id]=&servo_data[i];
 
     mmanager_read_register(mmanager,id,&mmanager->servo_configs[id]->registers[current_pos],&mmanager->servo_values[id].current_value);
     mmanager_read_register(mmanager,id,&mmanager->servo_configs[id]->registers[min_angle_limit],&cw_value);
-- 
GitLab