From 25b3bf9de77d42707066045869767f2f158a506b Mon Sep 17 00:00:00 2001
From: burneykb <burneykb@iastate.edu>
Date: Fri, 27 Jan 2017 02:00:39 -0600
Subject: [PATCH] Working groundstation and partially working auto. data dump

---
 groundStation/src/backend/backend.c       | 32 ++++++++++++++++-------
 groundStation/src/backend/communication.c |  3 +--
 2 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c
index 041a91edf..7efcbc855 100644
--- a/groundStation/src/backend/backend.c
+++ b/groundStation/src/backend/backend.c
@@ -195,7 +195,6 @@ int main(int argc, char **argv)
 		perror("Error creating log file...");
 		exit(1);
 	}
-	// writeStringToLog(logHeader);
 
 	// watch for input from stdin (fd 0) to see when it has input
 	safe_fd_set(fileno(stdin), &rfds_master, &max_fd);
@@ -328,8 +327,8 @@ void sendVrpnPacket(struct ucart_vrpn_TrackerData *info) {
 	memcpy(&packet[11], &(info->y), 4);
 	memcpy(&packet[15], &(info->x), 4);
 	memcpy(&packet[19], &(info->z), 4);
-	memcpy(&packet[23], &(info->pitch), 4);
-	memcpy(&packet[27], &(info->roll), 4);
+	memcpy(&packet[23], &(info->roll), 4);
+	memcpy(&packet[27], &(info->pitch), 4);
 	memcpy(&packet[31], &(info->yaw), 4);
 
 	char checksum = 0;
@@ -482,6 +481,9 @@ static ssize_t writeQuad(const char * buf, size_t count) {
 
 static ssize_t readQuad(char * buf, size_t count) {
 	ssize_t retval;
+	if (getenv(NOQUAD_ENV)) {
+		return count;
+	}
 	if (pthread_mutex_lock(&quadSocketMutex)) {
 		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
 	}
@@ -709,17 +711,23 @@ static void quad_recv() {
 		respBufLen = 0;
 		return;
 	}
-
+	
 	/* Get datalen */
 	size_t datalen = metadata.data_len;
+	if (respBufLen < datalen + 8) {
+		/* Packet not yet fully read */
+		return;
+	}
+
 	if (datalen > CMD_MAX_LENGTH - 8) {
 		/* Very invalid packet. Nuke that shit */
+		warnx("data len is over the maximum packet length. Try reducing the data in the packet sent to the groundstation.\n");
 		respBufLen = 0;
 		return;
 	}
-	
-	if (respBufLen < datalen + 8) {
-		/* Packet not yet fully read */
+
+	if(validPacket == -2) {
+		fprintf(stderr, "Checksums did not match (Parse Packet)\n");
 		return;
 	}
 
@@ -728,10 +736,18 @@ static void quad_recv() {
 		char * cmdText = MessageTypes[(int)metadata.msg_type].subtypes[(int)metadata.msg_subtype].cmdText;
 		float value = getFloat((unsigned char *)respBuf, 7);
 		//printf("Quad : %s, %lf\n", cmdText, value);
+
 		/* 
 		   Assuming the quad sends the correct info.. This hasn't been tested yet due to a lack of
 		   quad software. We can check how to format by the cmdText and pass to every client.
 		   */
+		if(strncmp(cmdText, "log", strlen(cmdText)) == 0) {
+			char log_text[datalen+1];
+			strncpy(log_text, (char *) data, datalen);
+			log_text[datalen] = '\0';
+			printf("log='%s'\n", log_text);
+		}
+
 		char buffer[1048];
 		sprintf(buffer, "%s %lf\n", cmdText, value);
 
@@ -740,8 +756,6 @@ static void quad_recv() {
 				write(fd, buffer, datalen + 8);
 			}
 		}
-	} else {
-		warnx("Checksum mismatch!");
 	}
 	memmove(respBuf, respBuf + datalen + 8, respBufLen - (datalen + 8));
 	respBufLen -= datalen + 8;
diff --git a/groundStation/src/backend/communication.c b/groundStation/src/backend/communication.c
index c00878aa8..ca4e82632 100644
--- a/groundStation/src/backend/communication.c
+++ b/groundStation/src/backend/communication.c
@@ -230,14 +230,13 @@ int parse_packet(unsigned char * packet, unsigned char ** data, metadata_t * met
 
 	// calculate checksum
 	unsigned char calculated_checksum = 0;
-	for(i = 0; i < meta_data->data_len + 7; i++)
+	for(i = 0; i < meta_data->data_len + 7 - 1; i++)
 	{
 		calculated_checksum ^= packet[i];
 	}
 
 	// compare checksum
 	if(packet_checksum != calculated_checksum) {
-		fprintf(stderr, "Checksums did not match (Parse Packet): 0x%02x\t0x%02x\n", packet_checksum, calculated_checksum);
 		return -2;
 	}
 
-- 
GitLab