From 9fef7baf40ae596c06bbd49716f69b5f01afbf39 Mon Sep 17 00:00:00 2001
From: Irene Garcia Camacho <igarcia@iri.upc.edu>
Date: Thu, 23 Mar 2017 19:32:02 +0100
Subject: [PATCH] Smart Charger Test code

Main code for smart charger testing
---
 src/test_charger.c | 167 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 167 insertions(+)
 create mode 100644 src/test_charger.c

diff --git a/src/test_charger.c b/src/test_charger.c
new file mode 100644
index 0000000..a024361
--- /dev/null
+++ b/src/test_charger.c
@@ -0,0 +1,167 @@
+
+/* Test smart charger with CM730
+ * main behaving as master (PC) to the CM730
+ * Initialization of eeprom, ram, gpio and motion manager (not manager_timer)
+ * 
+ * UNCOMMENT DESIRED BLOCKS TO TEST (Debugation with leds)
+ * Scan of smart charger in bus dynamixel v1
+ * Read smart chargers period (1500)
+ * Read smart chargers ID (192)
+ * Write smart charger period
+ * Enable smart charger
+ * Enable motion manager timer
+ * Read battery status of smart charger 
+ */
+
+#include "stm32f1xx_hal.h"
+#include "gpio.h"
+#include "eeprom.h"
+#include "ram.h"
+#include "adc_dma.h"
+#include "imu.h"
+#include "darwin_time.h"
+#include "darwin_dyn_master.h"
+#include "darwin_dyn_slave.h"
+#include "motion_manager.h"
+#include "darwin_registers.h"
+
+
+int main(void)
+{
+  uint16_t eeprom_data,period;
+
+  /* initialize the HAL module */
+  HAL_Init();
+  /* initialize EEPROM */
+  EE_Init();
+  // initialize the Dynamixel RAM memory space
+  ram_init();
+  /* initialize the GPIO module */
+  gpio_init();
+  // initialize adc
+//  adc_init();
+  // initialize imu
+//  imu_init();
+  // initialize time module
+  darwin_time_init();
+  /* initialize the dynamixel slave interface */
+  //darwin_dyn_slave_init();
+  //darwin_dyn_slave_start();
+  /* initialize motion manager module */
+  EE_ReadVariable(MM_PERIOD_OFFSET,&eeprom_data);	//period: 7800us
+  period=eeprom_data&0x00FF;
+  EE_ReadVariable(MM_PERIOD_OFFSET+1,&eeprom_data);
+  period+=((eeprom_data&0x00FF)<<8);
+  manager_init(period);
+  //gpio_set_led(LED_4); //azul
+
+ /*  unsigned short int address;
+     unsigned short int length;
+     unsigned char data_write;
+ */
+
+ ////SCAN
+  unsigned char num;
+  unsigned char servo_ids[254];
+  dyn_master_scan(&darwin_dyn_master,&num, servo_ids);	//dynamixel_master.c  
+  if(num==0){
+    gpio_set_led(LED_4);//azul
+  }else{
+    gpio_set_led(LED_3);//Si existen dispositivos conectados -> luz verde
+  }
+
+
+////READ CHARGER STATUS
+  unsigned short int address=DARWIN_SMART_CHARGER_STATUS;
+  unsigned short int length=1;
+  unsigned char data_read;
+  uint8_t error;
+  //unsigned char *pdata = (uint8_t)&data_read;
+  error=darwin_on_read(address,length,&data_read);
+  if(data_read&0x01)
+    gpio_set_led(LED_2); //verde
+    
+
+/* ////READ PERIOD SMART CHARGER
+  unsigned short int address=DARWIN_SMART_CHARGER_PERIOD_L;
+  unsigned short int length=2;
+  unsigned char data_read[2];
+  uint8_t error;
+  //unsigned char *pdata = (uint8_t)&data_read;
+  error=darwin_on_read(address,length,data_read);
+  uint16_t dread = data_read[0] + (data_read[1]<<8);
+    if(dread==1500)
+    gpio_set_led(LED_3); //verde
+  else if(dread==0)
+    gpio_set_led(LED_4); //azul
+*/
+
+/* ////READ ID SMART CHARGER
+  unsigned char data_read2;
+  address=DARWIN_SMART_CHARGER_ID;
+  length=1;
+  darwin_on_read(address,length,&data_read2);
+  if(data_read2==192)
+    gpio_set_led(LED_TX); //verde
+  //else if(data_read==0)
+*/   
+
+/* ////WRITE PERIOD SMART CHARGER
+  //HAL_Delay(500);
+  unsigned short int address=DARWIN_SMART_CHARGER_PERIOD_L;
+  unsigned short int length=2;
+  unsigned char data_write[2]={0x40, 0x06}; //1600
+  //data_write=0x05DC;
+  darwin_on_write(address,length,data_write); //data_write = data_write[0] address
+  HAL_Delay(500);
+  unsigned char data_read[2];
+  length=2;
+  darwin_on_read(address, length,data_read); //data_read = data_read[0] address
+  uint16_t dread = data_read[0] + (data_read[1]<<8);
+  if(dread==1600)
+    gpio_set_led(LED_3); //verde
+  else if(dread==1500) 
+    gpio_set_led(LED_4); //azul
+*/
+
+/* ////ENABLE SMART CHARGER MODULE
+  address=DARWIN_SMART_CHARGER_CNTRL;
+  length=1;
+  uint8_t data_read;
+  ram_read_byte(address,&data_read); 
+  //darwin_on_read(address,length,&data_read);
+  if(data_read==1) //Smart charger control = detected
+    gpio_set_led(LED_3); //verde
+  else if(data_read==0) //smart charger NOT detected
+    gpio_set_led(LED_4); //azul
+ 
+  data_write=SMART_CHARGER_EN;//Smart charger enable
+  darwin_on_write(address,length,&data_write);
+  HAL_Delay(500);
+  darwin_on_read(address,length,&data_read);
+  if(data_read==3) //Smart charger control = detected + enabled
+    gpio_set_led(LED_3); //verde
+*/
+    
+/* ////ENABLE MOTION MANAGER TIMER 
+  address=DARWIN_MM_CNTRL;
+  data_write=MANAGER_ENABLE;
+  darwin_on_write(address,length,&data_write);
+  HAL_Delay(500);
+*/
+
+/* //Read battery status
+  address=DARWIN_BATT_AVG_TIME_EMPTY_L;
+  length=6;
+  darwin_on_read(address,length,pdata);
+  if(data_read[]==128) //BATTERY_STATUS_L
+    gpio_set_led(LED_4);
+  else
+    gpio_set_led(LED_3); 
+*/ 
+
+  gpio_set_led(LED_RX); //naranja
+  
+  while(1);/* main function does not return */
+}
+
-- 
GitLab