From 2bb3f8de650cf0f2290ace069d3c33d309c0d3b2 Mon Sep 17 00:00:00 2001
From: "ucart@co3050-12" <dawehr@iastate.edu>
Date: Wed, 15 Mar 2017 19:56:01 -0500
Subject: [PATCH] Fix remaining merge/rebase issues, fix timers

---
 quad/src/quad_app/control_algorithm.c                | 12 ++++++------
 quad/src/quad_app/hw_iface.h                         |  2 +-
 quad/src/quad_app/log_data.c                         |  2 +-
 quad/src/quad_app/quad_app.c                         |  5 +++--
 quad/src/quad_app/timer.c                            | 10 +++++-----
 quad/src/quad_app/type_def.h                         |  1 +
 quad/src/quad_app/util.h                             |  2 +-
 .../modular_quad_pid/src/hw_impl_zybo.h              |  4 ++--
 .../modular_quad_pid/src/hw_impl_zybo_axi_timer.c    |  2 +-
 .../modular_quad_pid/src/hw_impl_zybo_global_timer.c |  4 ++--
 10 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/quad/src/quad_app/control_algorithm.c b/quad/src/quad_app/control_algorithm.c
index 7edd1837e..5e1ebfd7d 100644
--- a/quad/src/quad_app/control_algorithm.c
+++ b/quad/src/quad_app/control_algorithm.c
@@ -97,17 +97,17 @@ int control_algorithm_init(parameter_t * ps)
     graph_set_source(graph, ps->pitch_r_pid, PID_SETPOINT, ps->pitch_pid, PID_CORRECTION);
     graph_set_source(graph, ps->pitch_r_pid, PID_CUR_POINT, ps->theta_dot, CONST_VAL);
     graph_set_source(graph, ps->pitch_r_pid, PID_DT, ps->angle_time, CONST_VAL);
-    //graph_set_source(graph, ps->pitch_pid, PID_CUR_POINT, ps->cur_pitch, CONST_VAL);
-    graph_set_source(graph, ps->pitch_pid, PID_CUR_POINT, ps->vrpn_pitch, CONST_VAL);
-    graph_set_source(graph, ps->pitch_pid, PID_DT, ps->pos_time, CONST_VAL);
+    graph_set_source(graph, ps->pitch_pid, PID_CUR_POINT, ps->cur_pitch, CONST_VAL);
+    //graph_set_source(graph, ps->pitch_pid, PID_CUR_POINT, ps->vrpn_pitch, CONST_VAL);
+    graph_set_source(graph, ps->pitch_pid, PID_DT, ps->angle_time, CONST_VAL);
 
      // Connect roll PID chain
     graph_set_source(graph, ps->roll_r_pid, PID_SETPOINT, ps->roll_pid, PID_CORRECTION);
     graph_set_source(graph, ps->roll_r_pid, PID_CUR_POINT, ps->phi_dot, CONST_VAL);
     graph_set_source(graph, ps->roll_r_pid, PID_DT, ps->angle_time, CONST_VAL);
-    //graph_set_source(graph, ps->roll_pid, PID_CUR_POINT, ps->cur_roll, CONST_VAL);
-    graph_set_source(graph, ps->roll_pid, PID_CUR_POINT, ps->vrpn_roll, CONST_VAL);
-    graph_set_source(graph, ps->roll_pid, PID_DT, ps->pos_time, CONST_VAL);
+    graph_set_source(graph, ps->roll_pid, PID_CUR_POINT, ps->cur_roll, CONST_VAL);
+    //graph_set_source(graph, ps->roll_pid, PID_CUR_POINT, ps->vrpn_roll, CONST_VAL);
+    graph_set_source(graph, ps->roll_pid, PID_DT, ps->angle_time, CONST_VAL);
 
     // Connect yaw PID chain
     graph_set_source(graph, ps->yaw_r_pid, PID_SETPOINT, ps->rc_yaw, PID_CORRECTION);
diff --git a/quad/src/quad_app/hw_iface.h b/quad/src/quad_app/hw_iface.h
index 6e6bbaa0f..bbd6bb6fc 100644
--- a/quad/src/quad_app/hw_iface.h
+++ b/quad/src/quad_app/hw_iface.h
@@ -37,7 +37,7 @@ struct TimerDriver {
   void *state;
   int (*reset)(struct TimerDriver *self);
   int (*restart)(struct TimerDriver *self);
-  int (*read)(struct TimerDriver *self, unsigned long *us);
+  int (*read)(struct TimerDriver *self, unsigned long long *us);
 };
 
 struct LEDDriver {
diff --git a/quad/src/quad_app/log_data.c b/quad/src/quad_app/log_data.c
index db9c7d363..2c789b1a9 100644
--- a/quad/src/quad_app/log_data.c
+++ b/quad/src/quad_app/log_data.c
@@ -170,7 +170,7 @@ void printLogging(hardware_t *hardware_struct, log_t* log_struct, parameter_t* p
 	}
 
 	char data[1] = {0}; // 1 byte to make compilers happy
-	send_data(LOG_END_ID, 0, data, 0);
+	send_data(&hardware_struct->uart, LOG_END_ID, 0, data, 0);
 }
 
 void resetLogging() {
diff --git a/quad/src/quad_app/quad_app.c b/quad/src/quad_app/quad_app.c
index fd195159c..22829b5c8 100644
--- a/quad/src/quad_app/quad_app.c
+++ b/quad/src/quad_app/quad_app.c
@@ -16,6 +16,7 @@
 #include "send_actuator_commands.h"
 #include "update_gui.h"
 #include "communication.h"
+#include "mio7_led.h"
 
 //#define BENCH_TEST
 //#define UART_BENCHMARK
@@ -90,7 +91,7 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct))
 			send_actuator_commands(&(structs.hardware_struct.pwm_outputs), &(structs.log_struct), &(structs.actuator_command_struct));
 		}
 		else {
-			pwm_kill();
+			kill_motors(&(structs.hardware_struct.pwm_outputs));
 		}
 		// update the GUI
 		update_GUI(&(structs.log_struct));
@@ -135,7 +136,7 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct))
 		last_kill_condition = this_kill_condition;
 	}
 
-	kill_motors();
+	kill_motors(&(structs.hardware_struct.pwm_outputs));
 
 	flash_MIO_7_led(10, 100);
 
diff --git a/quad/src/quad_app/timer.c b/quad/src/quad_app/timer.c
index ce6333e40..ea41a0379 100644
--- a/quad/src/quad_app/timer.c
+++ b/quad/src/quad_app/timer.c
@@ -1,7 +1,7 @@
 #include "timer.h"
 
-u32 before = 0, after = 0;
-float LOOP_TIME;
+u64 before = 0, after = 0;
+float LOOP_TIME; // microseconds
 float time_stamp = 0;
 
 struct TimerDriver *global_timer;
@@ -24,7 +24,7 @@ int timer_start_loop()
 int timer_end_loop(log_t *log_struct)
 {
   // get number of useconds its taken to run the loop thus far
-  u32 usec_loop;
+  u64 usec_loop;
   axi_timer->read(axi_timer, &usec_loop);
 
   // attempt to make each loop run for the same amount of time
@@ -44,11 +44,11 @@ int timer_end_loop(log_t *log_struct)
 }
 
 float get_last_loop_time() {
-  return LOOP_TIME;
+  return (float)LOOP_TIME / 1000000;
 }
 
 u32 timer_get_count() {
-  u32 time;
+  u64 time;
   return axi_timer->read(axi_timer, &time);
   return time;
 }
diff --git a/quad/src/quad_app/type_def.h b/quad/src/quad_app/type_def.h
index 1dad790da..8d6363cfa 100644
--- a/quad/src/quad_app/type_def.h
+++ b/quad/src/quad_app/type_def.h
@@ -16,6 +16,7 @@
 typedef unsigned char u8;
 typedef unsigned short u16;
 typedef unsigned long u32;
+typedef unsigned long long u64;
 typedef signed char i8;
 typedef signed short i16;
 typedef signed long i32;
diff --git a/quad/src/quad_app/util.h b/quad/src/quad_app/util.h
index 0a6bd21c7..0d06e5fe0 100644
--- a/quad/src/quad_app/util.h
+++ b/quad/src/quad_app/util.h
@@ -14,7 +14,7 @@
 void read_rec_all(struct PWMInputDriver *pwm_input, u32 *mixer);
 int read_kill(int gear);
 int read_flap(int flap);
-void kill_motors();
+void kill_motors(struct PWMOutputDriver *pwm_outputs);
 
 int build_int(u8 *buff);
 float build_float(u8 *buff);
diff --git a/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo.h b/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo.h
index 7be77d634..c721307bc 100644
--- a/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo.h
+++ b/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo.h
@@ -40,11 +40,11 @@ int zybo_i2c_read(struct I2CDriver *self,
 
 int zybo_global_timer_reset(struct TimerDriver *self);
 int zybo_global_timer_restart(struct TimerDriver *self);
-int zybo_global_timer_read(struct TimerDriver *self, unsigned long *us);
+int zybo_global_timer_read(struct TimerDriver *self, u64 *us);
 
 int zybo_axi_timer_reset(struct TimerDriver *self);
 int zybo_axi_timer_restart(struct TimerDriver *self);
-int zybo_axi_timer_read(struct TimerDriver *self, unsigned long *us);
+int zybo_axi_timer_read(struct TimerDriver *self, u64 *us);
 
 int zybo_mio7_led_reset(struct LEDDriver *self);
 int zybo_mio7_led_turn_on(struct LEDDriver *self);
diff --git a/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_axi_timer.c b/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_axi_timer.c
index bbbb5e3a3..fa4bb05a6 100644
--- a/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_axi_timer.c
+++ b/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_axi_timer.c
@@ -15,7 +15,7 @@ int zybo_axi_timer_restart(struct TimerDriver *self) {
   return 0;
 }
 
-int zybo_axi_timer_read(struct TimerDriver *self, unsigned long *us) {
+int zybo_axi_timer_read(struct TimerDriver *self, u64 *us) {
   // Returns the number of useconds
   *us = XTmrCtr_GetValue(self->state, 0) / PL_CLK_CNTS_PER_USEC;
   return 0;
diff --git a/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_global_timer.c b/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_global_timer.c
index 9f59573df..c1024a62f 100644
--- a/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_global_timer.c
+++ b/quad/xsdk_workspace/modular_quad_pid/src/hw_impl_zybo_global_timer.c
@@ -10,9 +10,9 @@ int zybo_global_timer_restart(struct TimerDriver *self) {
   return 0;
 }
 
-int zybo_global_timer_read(struct TimerDriver *self, unsigned long *us) {
+int zybo_global_timer_read(struct TimerDriver *self, u64 *us) {
   XTime time;
   XTime_GetTime(&time);
-  *us = (time * 1000000) / COUNTS_PER_SECOND; // (ticks)(1000000us/s)(s/ticks)
+  *us = ((u64)time * 1000000) / COUNTS_PER_SECOND; // (ticks)(1000000us/s)(s/ticks)
   return 0;
 }
-- 
GitLab