From 1aa1f12651c9d29ff0838131303031a750ff57a9 Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Tue, 29 Aug 2017 14:49:42 +0200
Subject: [PATCH] Added the necessary chnages to uase the new power enable
 feature for the second dynamixel bus.

---
 src/darwin_robot.cpp             | 52 +++++++++++++++++++++++---------
 src/darwin_robot.h               |  8 +++--
 src/examples/darwin_adc_test.cpp |  2 --
 3 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/src/darwin_robot.cpp b/src/darwin_robot.cpp
index 5079fd8..fa75ab9 100644
--- a/src/darwin_robot.cpp
+++ b/src/darwin_robot.cpp
@@ -277,20 +277,6 @@ double CDarwinRobot::adc_get_temperature(void)
     throw CDarwinRobotException(_HERE_,"Invalid robot device");
 }
 
-double CDarwinRobot::adc_get_vrefint(void)
-{
-  unsigned short int value;
-
-  if(this->robot_device!=NULL)
-  {
-    this->robot_device->read_word_register(DARWIN_ADC_VREF_L,&value);
-
-    return ((double)value)/((double)(1<<12));
-  }
-  else
-    throw CDarwinRobotException(_HERE_,"Invalid robot device");
-}
-
 void CDarwinRobot::adc_stop(void)
 {
   if(this->robot_device!=NULL)
@@ -590,6 +576,44 @@ bool CDarwinRobot::mm_is_power_enabled(void)
     throw CDarwinRobotException(_HERE_,"Invalid robot device");
 }
 
+void CDarwinRobot::mm_enable_power_v2(void)
+{
+  if(this->robot_device!=NULL)
+  {
+    this->manager_status|=MANAGER_EN_PWR_V2;
+    this->robot_device->write_byte_register(DARWIN_MM_CNTRL,this->manager_status);
+  }
+  else
+    throw CDarwinRobotException(_HERE_,"Invalid robot device");
+}
+
+void CDarwinRobot::mm_disable_power_v2(void)
+{
+  if(this->robot_device!=NULL)
+  {
+    this->manager_status&=(~MANAGER_EN_PWR_V2);
+    this->robot_device->write_byte_register(DARWIN_MM_CNTRL,this->manager_status);
+  }
+  else
+    throw CDarwinRobotException(_HERE_,"Invalid robot device");
+}
+
+bool CDarwinRobot::mm_is_power_enabled_v2(void)
+{
+  unsigned char value;
+
+  if(this->robot_device!=NULL)
+  {
+    this->robot_device->read_byte_register(DARWIN_MM_CNTRL,&value);
+    if(value&MANAGER_EN_PWR_V2)
+      return true;
+    else
+      return false;
+  }
+  else
+    throw CDarwinRobotException(_HERE_,"Invalid robot device");
+}
+
 bool CDarwinRobot::mm_has_fallen(void)
 {
   unsigned char value;
diff --git a/src/darwin_robot.h b/src/darwin_robot.h
index acda926..b3f6130 100644
--- a/src/darwin_robot.h
+++ b/src/darwin_robot.h
@@ -31,10 +31,10 @@ typedef struct
 
 typedef enum {START_PB=0,MODE_PB=1} pushbutton_t;
 
-#define           ADC_NUM_CHANNELS      16
+#define           ADC_NUM_CHANNELS      12
 
 typedef enum {ADC_CH1=0,ADC_CH2=1,ADC_CH3=2,ADC_CH4=3,ADC_CH5=4,ADC_CH6=5,ADC_CH7=6,ADC_CH8=7,
-              ADC_CH9=8,ADC_CH10=9,ADC_CH12=10,ADC_CH14=11} adc_t;
+              ADC_CH9=8,ADC_CH10=9,ADC_CH12=10} adc_t;
 
 #define           JOINTS_NUM_GROUPS     4
 
@@ -84,7 +84,6 @@ class CDarwinRobot
     void adc_set_period(unsigned char period_ms);
     double adc_get_value(adc_t adc);
     double adc_get_temperature(void);
-    double adc_get_vrefint(void);
     void adc_stop(void);
     // imu interface
     void imu_start(void);
@@ -111,6 +110,9 @@ class CDarwinRobot
     void mm_enable_power(void);
     void mm_disable_power(void);
     bool mm_is_power_enabled(void);
+    void mm_enable_power_v2(void);
+    void mm_disable_power_v2(void);
+    bool mm_is_power_enabled_v2(void);
     bool mm_has_fallen(void);
     fall_t mm_get_fallen_position(void);
     void mm_enable_servo(unsigned char servo_id);
diff --git a/src/examples/darwin_adc_test.cpp b/src/examples/darwin_adc_test.cpp
index adbf5bd..93ff870 100644
--- a/src/examples/darwin_adc_test.cpp
+++ b/src/examples/darwin_adc_test.cpp
@@ -17,7 +17,6 @@ int main(int argc, char *argv[])
     for(i=0;i<5000;i++)
     {
       std::cout << "Temperature: " << darwin.adc_get_temperature() << std::endl;
-      std::cout << "Vref: " << darwin.adc_get_vrefint() << std::endl;
       std::cout << "Channel1: " << darwin.adc_get_value(ADC_CH1) << std::endl;
       std::cout << "Channel2: " << darwin.adc_get_value(ADC_CH2) << std::endl;
       std::cout << "Channel3: " << darwin.adc_get_value(ADC_CH3) << std::endl;
@@ -29,7 +28,6 @@ int main(int argc, char *argv[])
       std::cout << "Channel9: " << darwin.adc_get_value(ADC_CH9) << std::endl;
       std::cout << "Channel10: " << darwin.adc_get_value(ADC_CH10) << std::endl;
       std::cout << "Channel12: " << darwin.adc_get_value(ADC_CH12) << std::endl;
-      std::cout << "Channel14: " << darwin.adc_get_value(ADC_CH14) << std::endl;
       usleep(100000);
     }
     darwin.adc_stop();
-- 
GitLab