From c1171ae0ccbafd859e7bfa32e2634d0b73f8b183 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sergi=20Hern=C3=A1ndez?= <shernand@iri.upc.edu>
Date: Tue, 4 Aug 2015 20:25:10 +0000
Subject: [PATCH] Added the extern C clause to all header to be able to use
 them in a C++ application.

---
 include/ADXL345_accel.h             |  8 ++++++++
 include/HMC5843_compass.h           |  7 +++++++
 include/ITG3200_gyro.h              |  8 ++++++++
 include/action.h                    |  8 ++++++++
 include/adc_dma.h                   |  8 ++++++++
 include/comm.h                      |  8 ++++++++
 include/dyn_servos.h                |  8 ++++++++
 include/dynamixel_master_uart_dma.h |  8 ++++++++
 include/dynamixel_slave_uart_dma.h  | 13 +++++++++++--
 include/eeprom.h                    |  8 ++++++++
 include/gpio.h                      |  8 ++++++++
 include/imu_9dof_dma.h              |  8 ++++++++
 include/imu_int.h                   |  8 ++++++++
 include/motion_manager.h            | 18 ++++++++++++++++++
 include/motion_pages.h              |  8 ++++++++
 include/ram.h                       |  8 ++++++++
 include/stm32_time.h                |  8 ++++++++
 17 files changed, 148 insertions(+), 2 deletions(-)

diff --git a/include/ADXL345_accel.h b/include/ADXL345_accel.h
index f2e2ebc..d9a2ba1 100644
--- a/include/ADXL345_accel.h
+++ b/include/ADXL345_accel.h
@@ -1,6 +1,10 @@
 #ifndef ADXL345_ACCEL_H
 #define ADXL345_ACCEL_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 // public functions
@@ -12,4 +16,8 @@ void imu_accel_set_config(void);
 uint8_t imu_accel_detect(void);
 void imu_accel_process_data(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/HMC5843_compass.h b/include/HMC5843_compass.h
index eac9dda..2a24978 100644
--- a/include/HMC5843_compass.h
+++ b/include/HMC5843_compass.h
@@ -1,6 +1,10 @@
 #ifndef _HMC5843_compass_h
 #define _HMC5843_compass_h
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 uint8_t imu_compass_detect(void);
@@ -11,5 +15,8 @@ void imu_compass_get_data(void);
 void imu_compass_set_config(void);
 void imu_compass_process_data(void);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif
diff --git a/include/ITG3200_gyro.h b/include/ITG3200_gyro.h
index f2efc4c..6540e77 100644
--- a/include/ITG3200_gyro.h
+++ b/include/ITG3200_gyro.h
@@ -1,6 +1,10 @@
 #ifndef _ITG3200_GYRO_H
 #define _ITG3200_GYRO_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 // public functions
@@ -12,4 +16,8 @@ void imu_gyro_get_data(void);
 void imu_gyro_set_config(void);
 void imu_gyro_process_data(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/action.h b/include/action.h
index 6270491..74ec9fc 100644
--- a/include/action.h
+++ b/include/action.h
@@ -1,6 +1,10 @@
 #ifndef _ACTION_H
 #define _ACTION_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 #include "motion_pages.h"
 
@@ -19,4 +23,8 @@ uint8_t action_is_running(void);
 // motion manager interface
 void action_process(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/adc_dma.h b/include/adc_dma.h
index 5a67f14..05699e4 100644
--- a/include/adc_dma.h
+++ b/include/adc_dma.h
@@ -1,9 +1,17 @@
 #ifndef _ADC_DMA_H
 #define _ADC_DMA_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 void adc_init(void);
 uint16_t adc_get_temperature(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/comm.h b/include/comm.h
index 1e8c7b8..41b57ce 100644
--- a/include/comm.h
+++ b/include/comm.h
@@ -1,10 +1,18 @@
 #ifndef _COMM_H
 #define _COMM_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 // public functions
 void comm_init(void);
 void comm_start(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/dyn_servos.h b/include/dyn_servos.h
index 775f26d..0ed9a2b 100644
--- a/include/dyn_servos.h
+++ b/include/dyn_servos.h
@@ -1,6 +1,10 @@
 #ifndef _DYN_SERVOS_H
 #define _DYN_SERVOS_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 // servo models
 #define       SERVO_AX12A     0x000C
 #define       SERVO_AX12W     0x012C
@@ -88,4 +92,8 @@ typedef enum{
   P_D_ERROR_OUT_L             = 66,
   P_D_ERROR_OUT_H             = 67}TDynServo;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/dynamixel_master_uart_dma.h b/include/dynamixel_master_uart_dma.h
index 74763f7..e07789e 100755
--- a/include/dynamixel_master_uart_dma.h
+++ b/include/dynamixel_master_uart_dma.h
@@ -1,6 +1,10 @@
 #ifndef _DYNAMIXEL_MASTER_DMA_H
 #define _DYNAMIXEL_MASTER_DMA_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 #include "dynamixel.h"
 #include "dynamixel2.h"
@@ -38,4 +42,8 @@ uint8_t dyn_master_bulk_read(uint8_t num,uint8_t *ids,uint8_t *address, uint8_t
 // repeater functions
 uint8_t dyn_master_resend_inst_packet(uint8_t *inst_packet, uint8_t *status_packet);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/dynamixel_slave_uart_dma.h b/include/dynamixel_slave_uart_dma.h
index 4652a1b..65cb4be 100644
--- a/include/dynamixel_slave_uart_dma.h
+++ b/include/dynamixel_slave_uart_dma.h
@@ -1,7 +1,12 @@
 #ifndef _DYNAMIXEL_SLAVE_UART_DMA_H
 #define _DYNAXIXEL_SLAVE_UART_DMA_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "dynamixel.h"
+#include "dynamixel2.h"
 #include "stm32f4xx.h"
 
 // public functions
@@ -12,9 +17,13 @@ inline void dyn_slave_set_return_delay(uint8_t delay);
 inline void dyn_slave_set_return_level(uint8_t level);
 inline uint8_t dyn_slave_get_return_level(void);
 uint8_t dyn_slave_is_packet_ready(void);
-void dyn_slave_get_inst_packet(uint8_t *packet);
-void dyn_slave_send_status_packet(uint8_t error,uint8_t length, uint8_t *data);
+TDynVersion  dyn_slave_get_inst_packet(uint8_t *packet);
+void dyn_slave_send_status_packet(uint8_t error,uint16_t length, uint8_t *data);
 void dyn_slave_resend_status_packet(uint8_t *packet);
 void dyn_slave_reset(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/eeprom.h b/include/eeprom.h
index 21d2595..7b389a5 100755
--- a/include/eeprom.h
+++ b/include/eeprom.h
@@ -24,6 +24,10 @@
 #ifndef __EEPROM_H
 #define __EEPROM_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Includes ------------------------------------------------------------------*/
 #include "stm32f4xx.h"
 
@@ -86,6 +90,10 @@ uint16_t EE_Init(void);
 uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data);
 uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* __EEPROM_H */
 
 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/include/gpio.h b/include/gpio.h
index 544b727..25be95a 100644
--- a/include/gpio.h
+++ b/include/gpio.h
@@ -1,6 +1,10 @@
 #ifndef _GPIO_H
 #define _GPIO_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx_hal.h"
 
 typedef enum {USER1_LED,USER2_LED,RXD_LED,TXD_LED} led_t;
@@ -17,4 +21,8 @@ void gpio_blink_led(led_t led_id, int16_t period_ms);
 uint8_t gpio_is_pushbutton_pressed(pushbutton_t pb_id);
 void gpio_set_pushbutton_callback(pushbutton_t pb_id,void (*callback)(void));
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/imu_9dof_dma.h b/include/imu_9dof_dma.h
index 41db3c0..6b22fb6 100644
--- a/include/imu_9dof_dma.h
+++ b/include/imu_9dof_dma.h
@@ -1,6 +1,10 @@
 #ifndef _IMU_9DOF_DMA_H
 #define _IMU_9DOF_DMA_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 // general IMU public functions
@@ -8,4 +12,8 @@ void imu_init(void);
 void imu_start(void);
 void imu_stop(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/imu_int.h b/include/imu_int.h
index 9dc552e..32b7783 100644
--- a/include/imu_int.h
+++ b/include/imu_int.h
@@ -1,6 +1,10 @@
 #ifndef _IMU_INT_H
 #define _IMU_INT_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define I2C_IMU_DMA                      DMA1
 #define I2C_IMU_DMA_CHANNEL              DMA_Channel_3
 #define I2C_IMU_DR_ADDRESS               ((uint32_t)I2C3+0x10)
@@ -64,4 +68,8 @@ extern DMA_InitTypeDef IMU_DMA_RX_InitStructure;
 void imu_wait_op_done(void);
 uint8_t imu_is_op_done(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/motion_manager.h b/include/motion_manager.h
index 47aee89..fcc07e6 100644
--- a/include/motion_manager.h
+++ b/include/motion_manager.h
@@ -1,6 +1,10 @@
 #ifndef _MOTION_MANAGER_H
 #define _MOTION_MANAGER_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 #define         MANAGER_MAX_NUM_SERVOS          31
@@ -23,8 +27,14 @@ typedef struct{
   uint16_t current_value;
   TModules module;
   uint8_t enabled;
+  int16_t cw_angle_limit;
+  int16_t ccw_angle_limit;
+  uint8_t dyn_version;
 }TServoInfo;
 
+// public variables
+extern int64_t current_angles[MANAGER_MAX_NUM_SERVOS];
+
 // public functions
 void manager_init(uint16_t period_us);
 inline uint16_t manager_get_period(void);
@@ -32,6 +42,8 @@ inline void manager_set_period(uint16_t period_us);
 inline void manager_enable(void);
 inline void manager_disable(void);
 inline uint8_t manager_is_enabled(void);
+void manager_enable_balance(void);
+void manager_disable_balance(void);
 inline uint8_t manager_get_num_servos(void);
 inline void manager_set_module(uint8_t servo_id,TModules module);
 inline TModules manager_get_module(uint8_t servo_id);
@@ -39,5 +51,11 @@ inline void manager_enable_servo(uint8_t servo_id);
 inline void manager_disable_servo(uint8_t servo_id);
 void manager_disable_servos(void);
 inline uint8_t manager_is_servo_enabled(uint8_t servo_id);
+inline int16_t manager_get_cw_angle_limit(uint8_t servo_id);
+inline int16_t manager_get_ccw_angle_limit(uint8_t servo_id);
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif
diff --git a/include/motion_pages.h b/include/motion_pages.h
index cac9f75..a195e17 100644
--- a/include/motion_pages.h
+++ b/include/motion_pages.h
@@ -1,6 +1,10 @@
 #ifndef _MOTION_PAGES_H
 #define _MOTION_PAGES_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 
 #define MAX_PAGES                     256 
@@ -49,4 +53,8 @@ void pages_clear_page(TPage *page);
 void pages_copy_page(TPage *src,TPage *dst);
 inline uint8_t pages_get_slope(TPage *page,uint8_t servo_id);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/ram.h b/include/ram.h
index b0fb2f3..a1d31eb 100644
--- a/include/ram.h
+++ b/include/ram.h
@@ -1,6 +1,10 @@
 #ifndef _RAM_H
 #define _RAM_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 #include "eeprom.h"
 
@@ -153,4 +157,8 @@ uint8_t ram_write_word(uint8_t address, uint16_t data);
 uint8_t ram_write_table(uint8_t address, uint8_t length,uint8_t *data);
 inline uint8_t ram_in_range(uint8_t start_reg,uint8_t end_reg,uint8_t address,uint8_t length);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/stm32_time.h b/include/stm32_time.h
index 9595bec..6b47829 100755
--- a/include/stm32_time.h
+++ b/include/stm32_time.h
@@ -1,6 +1,10 @@
 #ifndef _STM32_TIME_H
 #define _STM32_TIME_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "stm32f4xx.h"
 #include "system_stm32f4xx.h"
 
@@ -8,4 +12,8 @@ void time_init(void);
 void delay_ms(__IO uint32_t time);
 void delay_us(uint32_t us);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
-- 
GitLab