From 396f5e4f8fcef262f193bc53a9eebe3cb1d61566 Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Fri, 27 Sep 2019 15:35:04 +0200
Subject: [PATCH] Added destructors to the CDynamixel and CDynamixelServer
 classes. Moved some attributes from the private to the protected section to
 be used by inherited classes.

---
 src/CMakeLists.txt      |  2 +-
 src/dynamixel.h         | 68 ++++++++++++++++++++---------------------
 src/dynamixelserver.cpp |  3 ++
 src/dynamixelserver.h   | 25 +++++++--------
 4 files changed, 51 insertions(+), 47 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 95f8ba9..eccdafd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -3,7 +3,7 @@ ADD_SUBDIRECTORY(xml)
 # edit the following line to add all the source code files of the library
 SET(sources dynamixel.cpp dynamixelserver.cpp dynamixelserver_ftdi.cpp dynamixelserver_serial.cpp dynamixelexceptions.cpp dynamixel_slave.cpp dynamixel_slave_ftdi.cpp dynamixel_slave_serial.cpp)
 # edit the following line to add all the header files of the library
-SET(headers dynamixel.h dynamixelserver.h dynamixelserver_ftdi.h dynamixelserver_serial.h dynamixelexceptions.h dynamixel_common.h dynamixel_slave.h dynamixel_slave_ftdi.h dynamixel_slave_serial.h)
+SET(headers dynamixel.h dynamixelserver.h dynamixelserver_ftdi.h dynamixelserver_serial.h dynamixelexceptions.h dynamixel_common.h dynamixel_slave.h dynamixel_slave_ftdi.h dynamixel_slave_serial.h) 
 
 INCLUDE_DIRECTORIES(.)
 
diff --git a/src/dynamixel.h b/src/dynamixel.h
index 96c545c..2ab0559 100644
--- a/src/dynamixel.h
+++ b/src/dynamixel.h
@@ -24,87 +24,87 @@ class CDynamixel
   private:
     friend class CDynamixelServer;
     /**
-     * \brief
-     * 
+     * \brief 
+     *
      */
-    CDynamixelServer *dyn_server;
+    unsigned char id_register;
     /**
-     * \brief Handle to the communications device
+     * \brief 
      *
-     */ 
-    CComm *comm_dev;
+     */
+    unsigned char baudrate_register;
     /**
-     * \brief
-     * 
+     * \brief 
+     *
      */
-    unsigned char node_address;
+    void set_baudrate(int baudrate);
     /**
-     * \brief mutual exclusion mechanism to access the usb
+     * \brief
      *
      */
-    CMutex *usb_access; 
+    void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
     /**
-     * \brief Handle to the unique event server
+     * \brief
      *
      */
-    CEventServer *event_server;
+    void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
+
+  protected:
     /**
      * \brief data reception event
      * 
      */
     std::string usb_rx_event_id;
     /**
-     * \brief 
+     * \brief
      *
      */
-    unsigned char id_register;
+    dyn_version_t version;
     /**
-     * \brief 
-     *
+     * \brief
+     * 
      */
-    unsigned char baudrate_register;
+    CDynamixelServer *dyn_server;
     /**
-     * \brief 
-     *
+     * \brief
+     * 
      */
-    void set_baudrate(int baudrate);
+    unsigned char node_address;
     /**
-     * \brief
+     * \brief Handle to the unique event server
      *
      */
-    void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
+    CEventServer *event_server;
     /**
-     * \brief
+     * \brief Handle to the communications device
      *
-     */
-    void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
+     */ 
+    CComm *comm_dev;
     /**
-     * \brief
+     * \brief mutual exclusion mechanism to access the usb
      *
      */
-    dyn_version_t version;
-
-  protected:
+    CMutex *usb_access; 
     /**
      * \brief 
      *
      */
-    void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0);
+    virtual void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0);
     /**
      * \brief 
      *
      */
-    void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0);
+    virtual void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0);
     /**
      * \brief 
      *
      */
-    unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
+    virtual unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
     /**
      * \brief 
      *
      */
-    unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
+    virtual unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
     /**
      * \brief 
      *
diff --git a/src/dynamixelserver.cpp b/src/dynamixelserver.cpp
index 37c91fc..1528875 100644
--- a/src/dynamixelserver.cpp
+++ b/src/dynamixelserver.cpp
@@ -1347,3 +1347,6 @@ void CDynamixelServer::read_bulk(std::vector<unsigned char>& servo_ids,std::vect
   }
 }
 
+CDynamixelServer::~CDynamixelServer()
+{
+}
diff --git a/src/dynamixelserver.h b/src/dynamixelserver.h
index 9c5559a..160c164 100644
--- a/src/dynamixelserver.h
+++ b/src/dynamixelserver.h
@@ -50,11 +50,6 @@ const int frequencies[9]={1000000,500000,400000,250000,200000,115200,57600,19200
 class CDynamixelServer
 {
   private:
-    /**
-     * \brief 
-     *
-     */ 
-    CEventServer *event_server;
     /**
      * \brief 
      *
@@ -99,33 +94,38 @@ class CDynamixelServer
      * \brief 
      *
      */ 
-    void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0,unsigned char id=0xFE);
+    virtual void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0,unsigned char id=0xFE);
     /**
      * \brief 
      *
      */ 
-    void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0,unsigned char id=0xFE);
+    virtual void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0,unsigned char id=0xFE);
     /**
      * \brief 
      *
      */ 
-    unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
+    virtual unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
     /**
      * \brief 
      *
      */ 
-    unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
+    virtual unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
     /**
      * \brief
      *
      */
-    void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
+    virtual void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
     /**
      * \brief
      *
      */
-    void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
+    virtual void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
   protected:
+    /**
+     * \brief 
+     *
+     */ 
+    CEventServer *event_server;
     /**
      * \brief 
      *
@@ -243,7 +243,7 @@ class CDynamixelServer
      * \brief 
      *
      */ 
-    CDynamixel *get_device(int dev_id,dyn_version_t version=dyn_version1);
+    virtual CDynamixel *get_device(int dev_id,dyn_version_t version=dyn_version1);
     /**
      * \brief 
      *
@@ -284,6 +284,7 @@ class CDynamixelServer
      *
      */    
     void read_bulk(std::vector<unsigned char>& servo_ids,std::vector<unsigned short int> &start_addr,std::vector<unsigned short int> &length, std::vector< std::vector<unsigned char> >& data,dyn_version_t version=dyn_version2);
+    virtual ~CDynamixelServer();
 };
 
 #endif
-- 
GitLab