From 8c9add9a63bcd01fcced6945dbf19ce160b35e39 Mon Sep 17 00:00:00 2001
From: David Wehr <dawehr@iastate.edu>
Date: Fri, 20 Jan 2017 15:32:37 -0600
Subject: [PATCH] Added new debug commands

---
 quad/sw/modular_quad_pid/src/commands.c   |  43 ++++++++-
 quad/sw/modular_quad_pid/src/commands.h   |   2 +
 quad/sw/modular_quad_pid/src/uart.c       | 103 ----------------------
 quad/sw/modular_quad_pid/src/user_input.c |   2 +-
 4 files changed, 45 insertions(+), 105 deletions(-)

diff --git a/quad/sw/modular_quad_pid/src/commands.c b/quad/sw/modular_quad_pid/src/commands.c
index 3f2a62e83..471b09b68 100644
--- a/quad/sw/modular_quad_pid/src/commands.c
+++ b/quad/sw/modular_quad_pid/src/commands.c
@@ -33,7 +33,29 @@ struct MessageType MessageTypes[MAX_TYPE] =
 				// Type of the command data
 				intType,
 				// Function pointer
-				NULL
+				&debug
+			},
+			// Log packet receiving
+			{
+				// ID
+				0x02,
+				// Command text
+				"packetlog",
+				// Type of the command data
+				stringType,
+				// Function pointer
+				&packetlog
+			},
+			// Get packet receiving logs
+			{
+				// ID
+				0x03,
+				// Command text
+				"getpacketlogs",
+				// Type of the command data
+				stringType,
+				// Function pointer
+				&getpacketlogs
 			}
 		}
 	},
@@ -371,6 +393,25 @@ int debug(unsigned char *packet, int dataLen, modular_structs_t *structs)
 	return 0;
 }
 
+static int n_msg_received = 0;
+static size_t total_payload_received = 0;
+
+int packetlog(unsigned char* packet, int dataLen, modular_structs_t* structs) {
+	n_msg_received += 1;
+	total_payload_received += dataLen;
+	return 0;
+}
+
+int getpacketlogs(unsigned char* packet, int dataLen, modular_structs_t* structs) {
+	char buf[255];
+
+	// Message logging number of messages received and size of payload received
+	int length = snprintf(buf, sizeof buf, "%d,%d", n_msg_received, total_payload_received);
+
+	send_data(MessageTypes[5].ID, MessageTypes[5].subtypes[1].ID, 0, buf, length >= sizeof(buf) ? 255 : length + 1);
+	return 0;
+}
+
 /* Handles receiving new location updates */
 int update(unsigned char *packet, int dataLen,	modular_structs_t *structs)
 {
diff --git a/quad/sw/modular_quad_pid/src/commands.h b/quad/sw/modular_quad_pid/src/commands.h
index cf234f0f8..45be51e8c 100644
--- a/quad/sw/modular_quad_pid/src/commands.h
+++ b/quad/sw/modular_quad_pid/src/commands.h
@@ -41,6 +41,8 @@ struct MessageType{
 };
 
 int debug(unsigned char *c, int dataLen, modular_structs_t *structs);
+int packetlog(unsigned char* packet, int dataLen, modular_structs_t* structs);
+int getpacketlogs(unsigned char* packet, int dataLen, modular_structs_t* structs);
 int update(unsigned char *c, int dataLen, modular_structs_t *structs);
 int beginupdate(unsigned char *c, int dataLen, modular_structs_t *structs);
 int logdata(unsigned char *c, int dataLen, modular_structs_t *structs);
diff --git a/quad/sw/modular_quad_pid/src/uart.c b/quad/sw/modular_quad_pid/src/uart.c
index d4bf4ed44..a31256e43 100644
--- a/quad/sw/modular_quad_pid/src/uart.c
+++ b/quad/sw/modular_quad_pid/src/uart.c
@@ -378,107 +378,4 @@ char uart1_recvByte() {
 }
 
 /************************************************/
-/************************************************/
-
-int tryReceivePacket(stringBuilder_t* sb, int echo) {
-	while(uart0_hasData()) {
-		char c = uart0_recvByte(); // begin char
-		if(c == 0xBE) {
-//			printf("Beginning to read packet from UART.\n");
-
-			sb->addChar(sb, 0xBE);
-			char type = uart0_recvByte();
-			sb->addChar(sb, type); // type
-			sb->addChar(sb, uart0_recvByte()); // subtype
-			sb->addChar(sb, uart0_recvByte()); // id
-			sb->addChar(sb, uart0_recvByte()); // id
-
-			unsigned char byte5 = uart0_recvByte(); // data length
-			unsigned char byte6 = uart0_recvByte(); // data length
-
-			int datalen = (byte6 << 8) | byte5;
-//			printf("Received packet with data length: %d", datalen);
-
-			sb->addChar(sb, byte5);
-			sb->addChar(sb, byte6);
-
-			// Read all the data and the checksum byte
-			int i;
-			for(i=0; i < datalen + 1; i++)
-			{
-				sb->addChar(sb, uart0_recvByte());
-			}
-
-//			printf("Done reading packet from UART.\n");
-			return type;
-		} else {
-//			printf("The first byte was not the begin char: %x\n", c);
-			return -1;
-		}
-	}
-	return -1;
-/*
-
-	while (uart0_hasData()) {
-		char c = uart0_recvByte();
-		if (c == PACKET_START_CHAR) {
-#if DEBUG
-			uart0_sendStr("Start ");
-#endif
-			c = uart0_recvByte();
-			char type = c;
-//			sb->addChar(sb, type);
-			int count = 0;
-
-			//uart0_sendByte(c);
-
-			// if it's a 'C' packet (a command for the quad), then
-			// wait for the packet end char. Else, if it's a 'U' packet
-			// which is an update from the camera system, then we read
-			// a fixed number of bytes (UPDATE_SIZE # of bytes)
-			if(type == 'C')
-			{
-				while (c != PACKET_END_CHAR)
-				{
-					c = uart0_recvByte();
-					count++;
-					if(c == PACKET_END_CHAR)
-						break;
-					if ((c != 0 && c != '\r' && c != '\n'))
-					{
-						sb->addChar(sb, c);
-						if (echo) {
-							uart0_sendByte(c);
-						}
-					}
-				}
-				return type;
-			}
-
-			else if(type == 'U')
-			{
-				while(count < UPDATE_SIZE)
-				{
-					c = uart0_recvByte();
-					count++;
-
-					sb->addChar(sb, c);
-					if (echo) {
-						uart0_sendByte(c);
-					}
-				}
-				return type;
-			}
-#if DEBUG
-			uart0_sendStr("End:[");
-			uart0_sendStr(sb->buf);
-			uart0_sendStr("] ");
-#endif
-			return 0;
-		}
-	}
-
-	return 0;
-	*/
-}
 
diff --git a/quad/sw/modular_quad_pid/src/user_input.c b/quad/sw/modular_quad_pid/src/user_input.c
index 403aed279..bc0c4c5b7 100644
--- a/quad/sw/modular_quad_pid/src/user_input.c
+++ b/quad/sw/modular_quad_pid/src/user_input.c
@@ -28,7 +28,7 @@ int get_user_input(log_t* log_struct, user_input_t* user_input_struct)
 	// then receive the packet and set hasPacket for later processing
 	// "update packet" type processing is done in sensor.c
 	// "command packet" type processing is done in control_algorithm.c
-	user_input_struct->hasPacket = tryReceivePacket(user_input_struct->sb, 0);
+	//user_input_struct->hasPacket = tryReceivePacket(user_input_struct->sb, 0);
 
     return 0;
 }
-- 
GitLab