From 544638d764e12a273fefe9f8cae8bcfdcb2c896f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergi=20Hern=C3=A0ndez=20Juan?= <shernand@iri.upc.edu> Date: Mon, 8 Jul 2013 08:20:33 +0000 Subject: [PATCH] Solved a bug in the get_device() function. The function get blocked when no device was found with the desired id. --- src/dynamixelserver.cpp | 62 +++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/src/dynamixelserver.cpp b/src/dynamixelserver.cpp index c34965e..dfea759 100644 --- a/src/dynamixelserver.cpp +++ b/src/dynamixelserver.cpp @@ -390,42 +390,44 @@ CDynamixel *CDynamixelServer::get_device(int dev_id) if(dynamixel==NULL) { // try to ping the desired device - try{ - if(this->bus_info.baud_rate==-1) - { + if(this->bus_info.baud_rate==-1) + { + /* handle exceptions */ + throw CDynamixelServerException(_HERE_,"No baudrate has been selected."); + } + else + { + try{ + this->ping(dev_id,500); +// }catch(CEventTimeoutException &e){ + }catch(...){ /* handle exceptions */ - throw CDynamixelServerException(_HERE_,"No baudrate has been selected."); + throw CDynamixelServerException(_HERE_,"No Dynamixel device found with the specified identifier"); } - else + this->dynamixel_access.enter(); + device_name.str(""); + device_name << "dynamixel_bus_" << this->bus_info.bus_id << "_dev_" << dev_id; + name=device_name.str(); + dynamixel=new CDynamixel(name); + dynamixel->usb_dev=this->comm_dev; + dynamixel->usb_access=&this->dynamixel_access; + dynamixel->node_address=dev_id; + dynamixel->usb_rx_event_id=this->comm_dev->get_rx_event_id(); + for(i=0;i<devices.size();i++) { - this->ping(dev_id,500); - this->dynamixel_access.enter(); - device_name.str(""); - device_name << "dynamixel_bus_" << this->bus_info.bus_id << "_dev_" << dev_id; - name=device_name.str(); - dynamixel=new CDynamixel(name); - dynamixel->usb_dev=this->comm_dev; - dynamixel->usb_access=&this->dynamixel_access; - dynamixel->node_address=dev_id; - dynamixel->usb_rx_event_id=this->comm_dev->get_rx_event_id(); - for(i=0;i<devices.size();i++) - if(this->devices[i].id==dev_id) - { - this->devices[i].used=true; - updated=true; - } - if(!updated) + if(this->devices[i].id==dev_id) { - device.id=dev_id; - device.used=true; - this->devices.push_back(device); + this->devices[i].used=true; + updated=true; } - this->dynamixel_access.exit(); } - }catch(CEventTimeoutException &e){ + if(!updated) + { + device.id=dev_id; + device.used=true; + this->devices.push_back(device); + } this->dynamixel_access.exit(); - /* handle exceptions */ - throw CDynamixelServerException(_HERE_,"No Dynamixel device found with the specified identifier"); } } @@ -570,7 +572,7 @@ void CDynamixelServer::ping(int dev_id,int time) }while(read<6); }catch(CEventTimeoutException &e){ this->dynamixel_access.exit(); - throw; + throw e; } } this->dynamixel_access.exit(); -- GitLab