diff --git a/src/examples/test_segwayRMP200.cpp b/src/examples/test_segwayRMP200.cpp index 13ba9d34dc631733238d8006967031b52af2b119..a4090fb8ab25c4a234a360e24db840e04276865e 100755 --- a/src/examples/test_segwayRMP200.cpp +++ b/src/examples/test_segwayRMP200.cpp @@ -54,19 +54,22 @@ int main(int argc, char *argv[]) try { + segway = new CSegwayRMP200(); + while(!connected) { try { - segway = new CSegwayRMP200(); + segway->connect(); connected = true; } catch(CException &e) { - if(segway != NULL) - delete segway; - - segway = NULL; + segway->close(); +// if(segway != NULL) +// delete segway; +// +// segway = NULL; std::cout << e.what() << std::endl; std::cout << "The segway platfrom is still not ready (is it power on?)" << std::endl << std::endl; @@ -134,7 +137,7 @@ int main(int argc, char *argv[]) } } segway->stop(); -// segway->close(); + segway->close(); delete segway; } catch(CException &e) diff --git a/src/segway_rmp200.cpp b/src/segway_rmp200.cpp index cb9a3ec37772dca3e8f15e39880759106349012f..1b34333c70cc571049c3d7c244c234746fb1cba8 100755 --- a/src/segway_rmp200.cpp +++ b/src/segway_rmp200.cpp @@ -14,7 +14,6 @@ CSegwayRMP200::CSegwayRMP200(const std::string& desc_serial) init_ftdi(); init_threads(); init_events(); - connect(desc_serial); } void CSegwayRMP200::init_attributes(void) @@ -868,13 +867,14 @@ void CSegwayRMP200::close() //kill threads if(this->comm_dev!=NULL) { - // finish the threads + // finish threads this->event_server->set_event(this->read_finish_event); this->event_server->set_event(this->command_finish_event); this->thread_server->end_thread(this->read_thread_id); this->thread_server->end_thread(this->command_thread_id); this->thread_server->kill_thread(this->heartbeat_thread_id); - /* reset the events if necessary */ + + // reset the events if necessary this->event_server->reset_event(this->read_finish_event); this->event_server->reset_event(this->command_finish_event); if(this->event_server->event_is_set(this->no_heartbeat_event)) @@ -887,7 +887,13 @@ void CSegwayRMP200::close() delete this->comm_dev; this->comm_dev=NULL; } +} +CSegwayRMP200::~CSegwayRMP200() +{ + this->close(); + + // destroy events this->event_server->delete_event(this->read_finish_event); this->read_finish_event=""; this->event_server->delete_event(this->command_finish_event); @@ -912,33 +918,6 @@ void CSegwayRMP200::close() this->heartbeat_thread_id=""; } -CSegwayRMP200::~CSegwayRMP200() -{ - this->close(); - /* destroy the events */ -// this->event_server->delete_event(this->read_finish_event); -// this->read_finish_event=""; -// this->event_server->delete_event(this->command_finish_event); -// this->command_finish_event=""; -// this->event_server->delete_event(this->cable_disconnected_event); -// this->cable_disconnected_event=""; -// this->event_server->delete_event(this->power_off_event); -// this->power_off_event=""; -// this->event_server->delete_event(this->no_heartbeat_event); -// this->no_heartbeat_event=""; -// this->event_server->delete_event(this->heartbeat_event); -// this->heartbeat_event=""; -// this->event_server->delete_event(this->new_status_event); -// this->new_status_event=""; -// // destroy the threads -// this->thread_server->delete_thread(this->read_thread_id); -// this->read_thread_id=""; -// this->thread_server->delete_thread(this->command_thread_id); -// this->command_thread_id=""; -// this->thread_server->delete_thread(this->heartbeat_thread_id); -// this->heartbeat_thread_id=""; -} - std::ostream& operator<< (std::ostream& out, CSegwayRMP200& segway) { segway.access_status.enter();