From 25597f01a7633685e6a396f4e26c5a6e1b0d44b8 Mon Sep 17 00:00:00 2001
From: ucart <ucart_groundstation@iastate.edu>
Date: Mon, 29 Apr 2019 18:07:35 -0500
Subject: [PATCH] The work continues 2, electric boogaloo

---
 groundStation/src/backend/backend.c       |  4 +-
 quad/src/quad_app/callbacks.c             | 47 ++++++++++++-----------
 quad/src/quad_app/initialize_components.c |  6 +--
 quad/src/quad_app/log_data.c              |  2 +-
 quad/src/quad_app/log_data.h              |  4 +-
 quad/src/quad_app/quad_app.c              | 10 ++---
 quad/src/quad_app/type_def.h              | 37 +++++++++---------
 7 files changed, 56 insertions(+), 54 deletions(-)

diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c
index d801e5ebb..295b85442 100644
--- a/groundStation/src/backend/backend.c
+++ b/groundStation/src/backend/backend.c
@@ -1012,9 +1012,9 @@ static void quad_recv(int index) {
             case SEND_RT_ID:
                 quadlog_file = fopen("quad_log_data.txt", "w");
 		
-                fwrite((char *) formatted_data, sizeof(char), m.data_len, quadlog_file);
+                //fwrite((char *) formatted_data, sizeof(char), m.data_len, quadlog_file);
                 fclose(quadlog_file);
-		free(formatted_data);
+		//free(formatted_data);
                 break;
             case RESPPARAM_ID:
             case RESPSOURCE_ID:
diff --git a/quad/src/quad_app/callbacks.c b/quad/src/quad_app/callbacks.c
index 005485bdb..bff5d2142 100644
--- a/quad/src/quad_app/callbacks.c
+++ b/quad/src/quad_app/callbacks.c
@@ -415,32 +415,33 @@ int cb_sendrtdata(struct modular_structs *structs, struct metadata *meta, unsign
 	if (length < 4)
 		return -1;
 	int size = 0;
-    structs->flags.lidarflags.quadHeight = read_bit(configData, 31); size += read_bit(configData, 31);
+    u32 configData = (data[2] << 24) | (data[3] << 16) | (data[4] << 8) | (data[5]);
+    structs->flags_struct.lidarflags->quadHeight = read_bit(configData, 31); size += read_bit(configData, 31);
 	/*BEGIN DOUBLE-TYPE FLAGS. If these are enabled, actual size of data sent is 2*read_bit due to
 	* length of data. This needs to be compensated for in methods where total length of payload packet
 	* needs to be known ahead of time. */
-    structs->flags.optflowflags.x_flow = read_bit(configData, 30); size += read_bit(configData, 30); 
-    structs->flags.optflowflags.y_flow = read_bit(configData, 29); size += read_bit(configData, 29); 
-    structs->flags.optflowflags.x_filter = read_bit(configData, 28); size += read_bit(configData, 28); 
-    structs->flags.optflowflags.y_filter = read_bit(configData, 27); size += read_bit(configData, 27); 
-    structs->flags.optflowflags.x_velocity = read_bit(configData, 26); size += read_bit(configData, 26); 
-    structs->flags.optflowflags.y_velocity = read_bit(configData, 25); size += read_bit(configData, 25);
+    structs->flags_struct.optflowflags->x_flow = read_bit(configData, 30); size += read_bit(configData, 30); 
+    structs->flags_struct.optflowflags->y_flow = read_bit(configData, 29); size += read_bit(configData, 29); 
+    structs->flags_struct.optflowflags->x_filter = read_bit(configData, 28); size += read_bit(configData, 28); 
+    structs->flags_struct.optflowflags->y_filter = read_bit(configData, 27); size += read_bit(configData, 27); 
+    structs->flags_struct.optflowflags->x_velocity = read_bit(configData, 26); size += read_bit(configData, 26); 
+    structs->flags_struct.optflowflags->y_velocity = read_bit(configData, 25); size += read_bit(configData, 25);
 	//END DOUBLE TYPE FLAGS. 
-    structs->flags.imuflags.gyro_x = read_bit(configData, 24); size += read_bit(configData, 24); 
-    structs->flags.imuflags.gyro_y = read_bit(configData, 23); size += read_bit(configData, 23); 
-    structs->flags.imuflags.gyro_z = read_bit(configData, 22); size += read_bit(configData, 22); 
-    structs->flags.imuflags.acc_x = read_bit(configData, 21); size += read_bit(configData, 21); 
-    structs->flags.imuflags.acc_y = read_bit(configData, 20); size += read_bit(configData, 20); 
-    structs->flags.imuflags.acc_z = read_bit(configData, 19); size += read_bit(configData, 19); 
-    structs->flags.imuflags.mag_x = read_bit(configData, 18); size += read_bit(configData, 18); 
-    structs->flags.imuflags.mag_y = read_bit(configData, 17); size += read_bit(configData, 17); 
-    structs->flags.imuflags.mag_z = read_bit(configData, 16); size += read_bit(configData, 16); 
-    structs->flags.errorflags.lidar = read_bit(configData, 15); size += read_bit(configData, 15); 
-    structs->flags.errorflags.consec_lidar = read_bit(configData, 14); size += read_bit(configData, 14); 
-    structs->flags.errorflags.optFlow = read_bit(configData, 13); size += read_bit(configData, 13); 
-    structs->flags.errorflags.consec_optFlow = read_bit(configData, 12); size += read_bit(configData, 12); 
-    structs->flags.errorflags.imu = read_bit(configData, 11); size += read_bit(configData, 11); 
-    structs->flags.errorflags.consec_imu = read_bit(configData, 10); size += read_bit(configData, 10);
-    structs->flags.flag_count = size; 
+    structs->flags_struct.imuflags->gyro_x = read_bit(configData, 24); size += read_bit(configData, 24); 
+    structs->flags_struct.imuflags->gyro_y = read_bit(configData, 23); size += read_bit(configData, 23); 
+    structs->flags_struct.imuflags->gyro_z = read_bit(configData, 22); size += read_bit(configData, 22); 
+    structs->flags_struct.imuflags->acc_x = read_bit(configData, 21); size += read_bit(configData, 21); 
+    structs->flags_struct.imuflags->acc_y = read_bit(configData, 20); size += read_bit(configData, 20); 
+    structs->flags_struct.imuflags->acc_z = read_bit(configData, 19); size += read_bit(configData, 19); 
+    structs->flags_struct.imuflags->mag_x = read_bit(configData, 18); size += read_bit(configData, 18); 
+    structs->flags_struct.imuflags->mag_y = read_bit(configData, 17); size += read_bit(configData, 17); 
+    structs->flags_struct.imuflags->mag_z = read_bit(configData, 16); size += read_bit(configData, 16); 
+    structs->flags_struct.errorflags->lidar = read_bit(configData, 15); size += read_bit(configData, 15); 
+    structs->flags_struct.errorflags->consec_lidar = read_bit(configData, 14); size += read_bit(configData, 14); 
+    structs->flags_struct.errorflags->optFlow = read_bit(configData, 13); size += read_bit(configData, 13); 
+    structs->flags_struct.errorflags->consec_optFlow = read_bit(configData, 12); size += read_bit(configData, 12); 
+    structs->flags_struct.errorflags->imu = read_bit(configData, 11); size += read_bit(configData, 11); 
+    structs->flags_struct.errorflags->consec_imu = read_bit(configData, 10); size += read_bit(configData, 10);
+    structs->flags_struct.flag_count = size; 
 	return 0;
 }
diff --git a/quad/src/quad_app/initialize_components.c b/quad/src/quad_app/initialize_components.c
index 232125ac3..270d6c8f6 100644
--- a/quad/src/quad_app/initialize_components.c
+++ b/quad/src/quad_app/initialize_components.c
@@ -49,8 +49,8 @@ int init_structs(modular_structs_t *structs) {
   // Initialize the controller
   control_algorithm_init(&structs->parameter_struct);
 
-	// Initialize the logging
-	initialize_logging(&structs->log_struct, &structs->parameter_struct);
+  // Initialize the logging
+  //initialize_logging(&structs->log_struct, &structs->parameter_struct);
 
   // Initialize loop timers
   struct TimerDriver *global_timer = &structs->hardware_struct.global_timer;
@@ -105,7 +105,7 @@ int init_structs(modular_structs_t *structs) {
   }
 
   sensor_processing_init(&structs->sensor_struct);
-  initializeFlags(&structs->flags);
+  initializeFlags(&structs->flags_struct);
 
   return 0;
 }
diff --git a/quad/src/quad_app/log_data.c b/quad/src/quad_app/log_data.c
index 96a0db977..fe8aef14d 100644
--- a/quad/src/quad_app/log_data.c
+++ b/quad/src/quad_app/log_data.c
@@ -410,7 +410,7 @@ void RTprintLogging(struct CommDriver *comm, log_t* log_struct, parameter_t* ps,
 	timer_axi_reset();
 }
 
-void RTprintend()
+void RTprintend(struct CommDriver *comm)
 {
 	if (arrayIndex == 0)
 	{
diff --git a/quad/src/quad_app/log_data.h b/quad/src/quad_app/log_data.h
index c4cfd903e..b72717524 100644
--- a/quad/src/quad_app/log_data.h
+++ b/quad/src/quad_app/log_data.h
@@ -51,13 +51,13 @@ void RTprintLogging(struct CommDriver *comm, log_t* log_struct, parameter_t* ps,
 /**
  *  Prints the beginning header for a flight data file. Used for Real-Time Data Transfer
  * */
-void RTprintheader(struct CommDriver *comm, log_t* log_struct, parameter_t* ps, raw_sensor_t* raw_sensors, SensorRTFlags_t * flags)
+void RTprintheader(struct CommDriver *comm, log_t* log_struct, parameter_t* ps, raw_sensor_t* raw_sensors, SensorRTFlags_t * flags);
 
 /**
  * Sends the required ending message to close a log file following the end of a flight. Used for 
  * Real-Time Data Transfer
  * */
-void RTprintend()
+void RTprintend(struct CommDriver *comm);
 
  /**
   * Prints all the log information.
diff --git a/quad/src/quad_app/quad_app.c b/quad/src/quad_app/quad_app.c
index d9174003a..4fb124cff 100644
--- a/quad/src/quad_app/quad_app.c
+++ b/quad/src/quad_app/quad_app.c
@@ -100,10 +100,10 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct))
 			{
 				init_cond = 0x1;
 				initialize_logging(&(structs.log_struct), &(structs.parameter_struct), &(structs.flags_struct));
-				RTprintheader(&structs.hardware_struct.comm, &(structs.log_struct), &(structs.parameter_struct), &(structs.raw_sensor_struct), &(structs.flags_struct));
+				RTprintheader(&(structs.hardware_struct.comm), &(structs.log_struct), &(structs.parameter_struct), &(structs.raw_sensor_struct), &(structs.flags_struct));
 			}
 			log_data(&(structs.log_struct), &(structs.parameter_struct), &(structs.flags_struct));
-			RTprintLogging(&structs.hardware_struct.comm, &(structs.log_struct), &(structs.parameter_struct), &structs.raw_sensor_struct, &(structs.flags_struct));
+			RTprintLogging(&(structs.hardware_struct.comm), &(structs.log_struct), &(structs.parameter_struct), &structs.raw_sensor_struct, &(structs.flags_struct));
 			if(structs.user_defined_struct.flight_mode == AUTO_FLIGHT_MODE)
 			{
 				static int loop_counter = 0;
@@ -128,7 +128,7 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct))
 		}
 
 		if (this_kill_condition == 1 && last_kill_condition == 0) {
-		  RTprintend();
+		  RTprintend(&(structs.hardware_struct.comm));
 		  resetLogging();
 		  MIO7_led_off();
 		}
@@ -143,8 +143,8 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct))
 			char err_msg[] = "More than 10 IMU errors";
 			send_data(structs.hardware_struct.comm.uart, DEBUG_ID, 0, (u8*)err_msg, sizeof(err_msg));
 			//Send end of log message. Uncomment printLogging below for post-flight log.
-			RTprintend();
-		    resetLogging();
+			RTprintend(&(structs.hardware_struct.comm));
+		    	resetLogging();
 			//printLogging(&structs.hardware_struct.comm, &(structs.log_struct), &(structs.parameter_struct), &structs.raw_sensor_struct);
 			break;
 		}
diff --git a/quad/src/quad_app/type_def.h b/quad/src/quad_app/type_def.h
index 8eb2565d3..1b67b73f2 100644
--- a/quad/src/quad_app/type_def.h
+++ b/quad/src/quad_app/type_def.h
@@ -477,24 +477,6 @@ typedef struct hardware_t {
   struct OpticalFlowDriver of;
 } hardware_t;
 
-/**
- * @brief
- * 		Structures to be used throughout
- */
-typedef struct modular_structs {
-	user_input_t user_input_struct;
-	log_t log_struct;
-	raw_sensor_t raw_sensor_struct;
-	sensor_t sensor_struct;
-	setpoint_t setpoint_struct;
-	parameter_t parameter_struct;
-	user_defined_t user_defined_struct;
-	raw_actuator_t raw_actuator_struct;
-	actuator_command_t actuator_command_struct;
-	hardware_t hardware_struct;
-	SensorRTFlags_t flags_struct;
-} modular_structs_t;
-
 /* BEGIN FLAG STRUCTS CONTAINING ENABLED/DISABLED RT DATA TRANSFERS */
 typedef struct lidarFlags
 {
@@ -553,6 +535,25 @@ typedef struct SensorRTFlags
 
 /* END FLAG STRUCTS */
 
+/**
+ * @brief
+ * 		Structures to be used throughout
+ */
+typedef struct modular_structs {
+	user_input_t user_input_struct;
+	log_t log_struct;
+	raw_sensor_t raw_sensor_struct;
+	sensor_t sensor_struct;
+	setpoint_t setpoint_struct;
+	parameter_t parameter_struct;
+	user_defined_t user_defined_struct;
+	raw_actuator_t raw_actuator_struct;
+	actuator_command_t actuator_command_struct;
+	hardware_t hardware_struct;
+	SensorRTFlags_t flags_struct;
+} modular_structs_t;
+
+
 //////// END MAIN MODULAR STRUCTS
 
 #endif /* TYPE_DEF_H_ */
-- 
GitLab