From 3ed86eb9ea435d7b64f90aae6198e06f53e57fe8 Mon Sep 17 00:00:00 2001
From: "ucart@co3050-12" <dawehr@iastate.edu>
Date: Wed, 19 Apr 2017 22:01:10 -0500
Subject: [PATCH] Keeping track of number of IIC errors.

---
 quad/src/quad_app/quad_app.c |  1 -
 quad/src/quad_app/sensor.c   | 28 ++++++++++++++++++++++------
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/quad/src/quad_app/quad_app.c b/quad/src/quad_app/quad_app.c
index e57f8ba44..587cd930e 100644
--- a/quad/src/quad_app/quad_app.c
+++ b/quad/src/quad_app/quad_app.c
@@ -49,7 +49,6 @@ int quad_main(int (*setup_hardware)(hardware_t *hardware_struct))
 		timer_start_loop();
 
 		// Process all received data
-
 		process_received(&structs);
 
 		// Get the user input and put it into user_input_struct
diff --git a/quad/src/quad_app/sensor.c b/quad/src/quad_app/sensor.c
index 079136a9f..6ae875ce9 100644
--- a/quad/src/quad_app/sensor.c
+++ b/quad/src/quad_app/sensor.c
@@ -10,6 +10,9 @@
 #include "commands.h"
 #include "type_def.h"
 
+//TODO: Put this in a dedicated error-handling file
+static void updateError(SensorError_t*, int);
+
 int sensor_init(hardware_t *hardware_struct, raw_sensor_t * raw_sensor_struct, sensor_t * sensor_struct)
 {
   struct IMUDriver *imu = &hardware_struct->imu;
@@ -40,19 +43,32 @@ int get_sensors(hardware_t *hardware_struct, log_t* log_struct, user_input_t* us
   struct IMUDriver *imu = &hardware_struct->imu;
   struct LidarDriver *lidar = &hardware_struct->lidar;
   struct OpticalFlowDriver *of = &hardware_struct->of;
+  static lidar_t lidar_val;
   int status = 0;
 
-  status |= imu->read(imu, &raw_sensor_struct->gam);
-  static lidar_t lidar_val;
-  int lidar_status = lidar->read(lidar, &lidar_val);
-  if (lidar_status == 0) {
+  status = imu->read(imu, &raw_sensor_struct->gam);
+  updateError(&(raw_sensor_struct->gam.error), status);
+
+  status = lidar->read(lidar, &lidar_val);
+  updateError(&(raw_sensor_struct->lidar.error), status);
+  if (status == 0) {
 		raw_sensor_struct->lidar_distance_m = lidar_val.distance_m;
   }
-  status |= lidar_status;
   
-  status |= of->read(of, &raw_sensor_struct->optical_flow);
+  status = of->read(of, &raw_sensor_struct->optical_flow);
+  updateError(&(raw_sensor_struct->optical_flow.error), status);
+
   log_struct->gam = raw_sensor_struct->gam;
 
   return 0;
 }
  
+void updateError(SensorError_t *error, int status) {
+	if(status) {
+		error->errorCount++;
+		error->consErrorCount++;
+	}
+	else {
+		error->consErrorCount = 0;
+	}
+}
-- 
GitLab