From fb5bce1847c6676eb9b15c683d8e9e024875fde3 Mon Sep 17 00:00:00 2001
From: Jake Drahos <j@kedrahos.com>
Date: Sat, 3 Dec 2016 14:35:21 -0600
Subject: [PATCH] Removed groundstation from quad branch

---
 groundStation/.gitignore                      |   44 -
 groundStation/Makefile                        |   76 --
 groundStation/README.md                       |   63 -
 groundStation/src/backend/backend.c           |  773 -----------
 groundStation/src/backend/commands.c          | 1150 -----------------
 groundStation/src/backend/commands.h          |  105 --
 groundStation/src/backend/communication.c     |  271 ----
 groundStation/src/backend/communication.h     |   19 -
 groundStation/src/backend/config.h            |   20 -
 groundStation/src/backend/logger.c            |  108 --
 groundStation/src/backend/logger.h            |   21 -
 groundStation/src/backend/old_main.cold       |   73 --
 groundStation/src/backend/type_def.h          |  361 ------
 groundStation/src/backend/vrpn_tracker.cpp    |  178 ---
 groundStation/src/backend/vrpn_tracker.hpp    |  100 --
 groundStation/src/cli/cli.c                   |   53 -
 groundStation/src/cli/cli.h                   |   32 -
 groundStation/src/cli/cli_getimu.h            |    9 -
 groundStation/src/cli/cli_getpid.c            |  105 --
 groundStation/src/cli/cli_getpid.h            |    9 -
 groundStation/src/cli/cli_monitor.c           |  102 --
 groundStation/src/cli/cli_monitor.h           |   14 -
 groundStation/src/cli/cli_setpid.c            |   81 --
 groundStation/src/cli/cli_setpid.h            |    8 -
 groundStation/src/frontend/frontend_common.c  |   93 --
 groundStation/src/frontend/frontend_common.h  |   22 -
 groundStation/src/frontend/frontend_getpid.c  |   46 -
 groundStation/src/frontend/frontend_getpid.h  |   26 -
 groundStation/src/frontend/frontend_setpid.c  |   82 --
 groundStation/src/frontend/frontend_setpid.h  |   17 -
 groundStation/src/frontend/frontend_tracker.c |   42 -
 groundStation/src/frontend/frontend_tracker.h |   27 -
 groundStation/src/frontend/pid_common.h       |   26 -
 groundStation/src/vrpn                        |    1 -
 34 files changed, 4157 deletions(-)
 delete mode 100644 groundStation/.gitignore
 delete mode 100644 groundStation/Makefile
 delete mode 100644 groundStation/README.md
 delete mode 100644 groundStation/src/backend/backend.c
 delete mode 100644 groundStation/src/backend/commands.c
 delete mode 100644 groundStation/src/backend/commands.h
 delete mode 100644 groundStation/src/backend/communication.c
 delete mode 100644 groundStation/src/backend/communication.h
 delete mode 100644 groundStation/src/backend/config.h
 delete mode 100644 groundStation/src/backend/logger.c
 delete mode 100644 groundStation/src/backend/logger.h
 delete mode 100644 groundStation/src/backend/old_main.cold
 delete mode 100644 groundStation/src/backend/type_def.h
 delete mode 100644 groundStation/src/backend/vrpn_tracker.cpp
 delete mode 100644 groundStation/src/backend/vrpn_tracker.hpp
 delete mode 100644 groundStation/src/cli/cli.c
 delete mode 100644 groundStation/src/cli/cli.h
 delete mode 100644 groundStation/src/cli/cli_getimu.h
 delete mode 100644 groundStation/src/cli/cli_getpid.c
 delete mode 100644 groundStation/src/cli/cli_getpid.h
 delete mode 100644 groundStation/src/cli/cli_monitor.c
 delete mode 100644 groundStation/src/cli/cli_monitor.h
 delete mode 100644 groundStation/src/cli/cli_setpid.c
 delete mode 100644 groundStation/src/cli/cli_setpid.h
 delete mode 100644 groundStation/src/frontend/frontend_common.c
 delete mode 100644 groundStation/src/frontend/frontend_common.h
 delete mode 100644 groundStation/src/frontend/frontend_getpid.c
 delete mode 100644 groundStation/src/frontend/frontend_getpid.h
 delete mode 100644 groundStation/src/frontend/frontend_setpid.c
 delete mode 100644 groundStation/src/frontend/frontend_setpid.h
 delete mode 100644 groundStation/src/frontend/frontend_tracker.c
 delete mode 100644 groundStation/src/frontend/frontend_tracker.h
 delete mode 100644 groundStation/src/frontend/pid_common.h
 delete mode 160000 groundStation/src/vrpn

diff --git a/groundStation/.gitignore b/groundStation/.gitignore
deleted file mode 100644
index 508a8f243..000000000
--- a/groundStation/.gitignore
+++ /dev/null
@@ -1,44 +0,0 @@
-# Object files
-*.o
-*.ko
-*.obj
-*.elf
-
-# Precompiled Headers
-*.gch
-*.pch
-
-# Libraries
-*.lib
-*.a
-*.la
-*.lo
-
-# Shared objects (inc. Windows DLLs)
-*.dll
-*.so
-*.so.*
-*.dylib
-
-# Executables
-*.exe
-*.out
-*.app
-*.i*86
-*.x86_64
-*.hex
-
-# Debug files
-*.dSYM/
-*.su
-
-
-# vrpn/build files
-src/vrpn/build*
-src/vrpn/pc_linux64/*
-
-#Exacutables
-logs
-BackEnd
-obj
-Cli
diff --git a/groundStation/Makefile b/groundStation/Makefile
deleted file mode 100644
index 50c78782e..000000000
--- a/groundStation/Makefile
+++ /dev/null
@@ -1,76 +0,0 @@
-# Declaration of variables
-
-# Generic Variables
-GCC=gcc
-GXX=g++
-CFLAGS= -Wall -pedantic -Wextra -Werror -std=gnu99 -g -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable
-CXXFLAGS= -Wall -pedantic -Wextra -Werror -Wno-reorder -Wno-unused-variable -std=c++0x -g
-INCLUDES = $(foreach dir, $(INCDIR), -I$(dir))
-INCDIR=inc src/vrpn src/vrpn/quat src/vrpn/build $(BESRCDIR) $(CLISRCDIR) $(FESRCDIR)
-LIBS= -lpthread -lbluetooth -lvrpn -lquat -Lsrc/vrpn/build -Lsrc/vrpn/build/quat 
-OBJDIR=obj
-
-# Backend Specific Variables
-BEBINARY=BackEnd
-BESRCDIR=src/backend
-BECSOURCES := $(wildcard $(BESRCDIR)/*.c )
-BECOBJECTS = $(BECSOURCES:$(BESRCDIR)/%.c=$(OBJDIR)/%.o)
-BECPPSOURCES := $(wildcard $(BESRCDIR)/*.cpp )
-BECPPOBJECTS = $(BECPPSOURCES:$(BESRCDIR)/%.cpp=$(OBJDIR)/%.o)
-
-# CLI Specific Variables
-CLIBINARY=Cli
-CLISRCDIR=src/cli
-CLISOURCES := $(wildcard $(CLISRCDIR)/*.c)
-CLIOBJECTS = $(CLISOURCES:$(CLISRCDIR)/%.c=$(OBJDIR)/%.o)
-
-# Frontend-common stuff
-FESRCDIR=src/frontend
-FECSOURCES := $(wildcard $(FESRCDIR)/*.c )
-FECOBJECTS = $(FECSOURCES:$(FESRCDIR)/%.c=$(OBJDIR)/%.o)
-
-
-OBJECTS= $(CLIOBJECTS) $(BECOBJECTS) $(BECPPOBJECTS) $(FECOBJECTS)
-
-# Default target
-all: logs objdir backend cli
-
-vrpn: vrpn/build
-
-cli:  $(CLIOBJECTS) $(FECOBJECTS)
-	$(GCC) $(CFLAGS) $^ -o $(CLIBINARY) $(INCLUDES) $(LIBS)
-
-$(CLIOBJECTS) : $(OBJDIR)/%.o : $(CLISRCDIR)/%.c
-	$(GCC)  $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS)
-
-
-backend: $(BECPPOBJECTS) $(BECOBJECTS)
-	$(GXX) $(CXXFLAGS) $^ -o $(BEBINARY) $(INCLUDES) $(LIBS)
-
-$(FECOBJECTS) : $(OBJDIR)/%.o : $(FESRCDIR)/%.c
-	$(GCC)  $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS)
-
-$(BECOBJECTS) : $(OBJDIR)/%.o : $(BESRCDIR)/%.c
-	$(GCC)  $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS)
-
-$(BECPPOBJECTS) : $(OBJDIR)/%.o : $(BESRCDIR)/%.cpp
-	$(GXX)  $(CXXFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS)
-
-vrpn/build:
-	mkdir -p src/vrpn/build
-	cd src/vrpn/build && cmake .. && make
-
-logs:
-	mkdir -p logs
-
-objdir:
-	mkdir -p obj
-
-clean_logs:
-	rm -f logs/*
-
-clean:
-	rm -rf $(OBJDIR)/ $(BEBINARY) $(CLIBINARY)
-
-debug:
-	@echo $(OBJECTS)
diff --git a/groundStation/README.md b/groundStation/README.md
deleted file mode 100644
index a54b1f436..000000000
--- a/groundStation/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# groundStation
-
-## Make Process
-
-First, if submodules were not recursevly added through git. Run this command if you have made any attempt to make vrpn manually. 
-run
-	'git submodule update --init --recursive'
-
-Now that you have all of the files necissary.
-
-cd into the groundstation folder.
-	cd groundStation
-	make vrpn
-	make
-
-run the program with sudo privledges
-	sudo -E ./BackEnd
-
-If you wish to change the way the backend communicates to the quad and vice versa, look at src/config.h. 
-	This provides a list of environment variables which you can set and use for your computer or time of use.
-	Because the backend must be ran with sudo privledges, you will need to preserve the env. vars. with sudo rights.
-	Hence the "-E" flag.
-
-## Modifying
-See MODIFYING for the software architecture/organization and how to add new functionality.
-
-## Using
-First, the backend daemon must be running. Run the backend with ./BackEnd. Note
-the environment variables in config.h, especially the backend socket path. The backend
-requires root for bluetooth, but can run as a normal user with TCP, as long as the
-socket path is writable by the user.
-
-Once the backend is running, various CLI tools can be used to view the state of the
-quad and send commands. Each of these tools is given as the first argument
-to the CLI program, for example, to monitor the quad, use `cli monitor`. Note that
-the backend socket environment variable must be set to the same value as it
-was for the backend. The CLI program also supports busybox-style symbolic links.
-For example, if there is a symlink named `monitor` that points to the `cli` binary,
-running the `monitor` program will effectively run `cli monitor`.
-
-The names of the binaries is subject to change.
-
-### Example
-In one terminal or screen, run the backend:
-
-`UCART_SOCKET=./ucart.socket ./BackEnd`
-
-This will activate the quad and the backend, and the backend will be available for
-connections from the frontend tools. One useful tool is the monitor. In another
-terminal window, run the monitor forever:
-
-`UCART_SOCKET=./ucart.socket ./cli monitor -f`
-
-This will begin a periodic monitoring that updates 10 times per second.
-
-Finally, in a third window, export the socket path:
-
-`export UCART_SOCKET=./ucart.socket`
-
-and then run any other tools to modify the quad, for example modifying PID constants:
-
-`./cli setpid --pitch -p 1.000`
-
diff --git a/groundStation/src/backend/backend.c b/groundStation/src/backend/backend.c
deleted file mode 100644
index 5c4dc9fa6..000000000
--- a/groundStation/src/backend/backend.c
+++ /dev/null
@@ -1,773 +0,0 @@
-/* Author: Kris Burney & Jake Drahos
- *
- * BlueTooth socket program for passing vrpn data to quad.
- */
-
-#define _GNU_SOURCE
-#define _BSD_SOURCE
-
-//system includes
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <signal.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/select.h>
-#include <bluetooth/bluetooth.h>
-#include <bluetooth/rfcomm.h>
-#include <pthread.h>
-#include <assert.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <netinet/tcp.h>
-
-//user created includes
-#include "communication.h"
-#include "commands.h"
-#include "vrpn_tracker.hpp"
-#include "type_def.h"
-#include "logger.h"
-#include "config.h"
-
-#define QUAD_BT_ADDR  "00:06:66:64:61:D6"
-#define QUAD_BT_CHANNEL  0x01
-#define CMD_MAX_LENGTH 1024
-#define MAX_HASH_SIZE 50
-
-/* Backend-internal command magics */
-#define TD_MAGIC "TRACKERDATA"
-
-// function prototypes
-void readAndPrint(void);
-void sendVrpnPacket(struct ucart_vrpn_TrackerData *);
-void sendStartPacket(void);
-void getVRPNPacket(struct ucart_vrpn_TrackerData *);
-void printVrpnData(struct ucart_vrpn_TrackerData *);
-int connectToZybo();
-int safe_fd_set(int , fd_set* , int* );
-int safe_fd_clr(int , fd_set* , int* );
-static void safe_close_fd(int fd, pthread_mutex_t *mutexLock);
-
-static void cb(struct ucart_vrpn_TrackerData *);
-static int new_client(int fd);
-/* Return index of client, or -1 */
-static ssize_t get_client_index(int fd);
-/* Returns pointer to client buffer, or -1 */
-static char * get_client_buffer(int fd);
-/* Return pointer to client pending responses, or -1*/ 
-static int * get_client_pend_responses(int fd);
-/* Return positive integer if successful, -1 otherwise */
-static int clientAddPendResponses(int fd, unsigned char *packet);
-/* Returns -1 on error */
-static int remove_client(int fd);
-/* Receive data from client */
-static void client_recv(int fd);
-/* Receive data from quad */
-static void quad_recv(const char * buf, size_t len);
-/* Checks to see if socket has disconnected. Returns 1 on disconnect, else returns 0 */
-static int wasDisconnected(int fd);
-
-/* Thread-safe wrappers */
-pthread_mutex_t quadSocketMutex;
-static ssize_t writeQuad(const char * buf, size_t count);
-static ssize_t readQuad(char * buf, size_t count);
-
-/* Functions for recording Latencies */
-void findTimeDiff(int respID);
-int timeval_subtract (struct timeval *result, struct timeval *x, struct timeval *y);
-//time stamp checking
-static unsigned int currMessageID = 0;
-struct timeval timeArr[MAX_HASH_SIZE];
-
-// global variables
-static volatile int keepRunning = 1;
-const char *TRACKER_IP = "UAV@192.168.0.120:3883";
-static int zyboSocket;
-static int backendSocket;
-struct ucart_vrpn_tracker * tracker = NULL;
-const char *logHeader = "";//"#\n#\tDefault log header\n#\tEverything after '#'`s will be printed as is in the processed logs.\n#\n\0";
-
-#define MAX_CLIENTS 32
-#define CLIENT_BUFFER_SIZE 1024
-#define CLIENT_MAX_PENDING_RESPONSES 5
-static char client_buffers[MAX_CLIENTS][CLIENT_BUFFER_SIZE];
-static int client_fds[MAX_CLIENTS];
-static int client_pending_responses[MAX_CLIENTS][CLIENT_MAX_PENDING_RESPONSES];
-fd_set rfds_master;
-int max_fd = 0;
-
-pthread_mutex_t quadResponseMutex, cliInputMutex ;
-char *respBuf, *commandBuf;
-int newQuadResponse = 0, newCliInput = 0;
-
-// Structures to be used throughout
-modular_structs_t structs;
-
-// Callback to be ran whenever the tracker receives data.
-// Currently doing much more than it should. It will be slimmed down 
-// 		in the future.
-static void cb(struct ucart_vrpn_TrackerData * td) {
-	static int count = 0;
-
-	if(!(count % 10)) {
-		sendVrpnPacket(td);
-		//updateLogFile(td);
-	}
-	count++;
-}
-
-int main(int argc, char **argv)
-{
-	int activity;
-	FD_ZERO(&rfds_master);
-
-	/* 
-	 * Create backend listening socket
-	 */
-	/* Determine socket path */
-	char * backend_socket_path = DEFAULT_SOCKET;
-	if (getenv(SOCKET_ENV)) {
-		backend_socket_path = getenv(SOCKET_ENV);
-	}
-	/* Unlink if it exists */
-	unlink(backend_socket_path);
-
-	/* Create socket */
-	backendSocket = socket(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0);
-	if (backendSocket < 0) {
-		err(-1, "socket");
-	}
-
-	/* Create sockaddr and bind */
-	struct sockaddr_un sa;
-	sa.sun_family = AF_UNIX;
-	strncpy(sa.sun_path, backend_socket_path, 107);
-	sa.sun_path[107] = '\0';
-	if (bind(backendSocket, (struct sockaddr *) &sa, sizeof(sa))) {
-		err(-1, "bind");
-	}
-
-	/* Listen */
-	if (listen(backendSocket, 16)) {
-		err(-1, "listen");
-	}
-
-	/* Add to socket set */
-	safe_fd_set(backendSocket, &rfds_master, &max_fd);
-	
-
-	/* Initialize client buffers */
-	for (int i = 0; i < MAX_CLIENTS; i++) {
-		client_fds[i] = -1;
-		client_buffers[i][0] = '\n';
-		for(int j = 0; j < CLIENT_MAX_PENDING_RESPONSES; j++) {
-			client_pending_responses[i][j] = -1;
-		}
-	}
-
-	if (pthread_mutex_lock(&quadSocketMutex)) {
-		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
-	}
-
-	if ((zyboSocket = connectToZybo()) < 0)
-	{
-		perror("Error connecting to Quad...");
-		free(respBuf);
-		free(commandBuf);
-		exit(1);
-	}
-
-	if (pthread_mutex_unlock(&quadSocketMutex)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-	
-	// open the log file
-	if(createLogFile(argc, argv[1]))
-	{
-		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);
-
-	if (!getenv(NOQUAD_ENV)) {
-		// watch for input from the zybo socket
-		safe_fd_set(zyboSocket, &rfds_master, &max_fd);
-
-	}
-	// Tell the quad we are ready to send it vrpn data
-	sendStartPacket();
-
-	if(!getenv(NOVRPN_ENV)){
-		// create vrpnTracker instance
-		tracker = ucart_vrpn_tracker_createInstance(TRACKER_IP);
-		// this function will be called whenever tracker receives data
-		ucart_vrpn_tracker_addCallback(tracker, cb);	
-	}
-
-	struct timeval timeout = {
-		.tv_sec = 1,
-		.tv_usec = 0
-	};
-
-	respBuf = calloc(CMD_MAX_LENGTH, sizeof(unsigned char));
-	sleep(3);
-	while(keepRunning)
-	{
-		fd_set rfds;
-		rfds = rfds_master;
-		activity = select(max_fd+1, &rfds, NULL, NULL, NULL);
-		if(activity == -1) {
-			perror("select() ");
-		} else if (activity) {
-			for(int fd = 0; fd <= max_fd; ++fd) {
-				if (FD_ISSET(fd, &rfds)) {
-					if(wasDisconnected(fd)){
-						break;
-					}
-
-					if (fd == fileno(stdin)) {
-						/**
-						 * Ignore stdin from the backend
-						 */
-					} else if (fd == zyboSocket) {
-						printf("recieving from quad\n");
-
-						/**
-						 * Read the response from the control loop
-						 */
-						int available;
-						ioctl(fd, FIONREAD, &available);
-						if (available < 12) {
-							continue;
-						}
-						int respLen = readQuad(respBuf, CMD_MAX_LENGTH);
-						if(respLen <= 0) {
-							perror("ERROR reading from quad...\n");
-						}
-
-						//int id = getInt((unsigned char *)respBuf, 7);
-						//findTimeDiff(id);
-
-						quad_recv(respBuf, respLen);
-						// if(respLen == 11) {
-						// 	int id = getInt((unsigned char *)respBuf, 7);
-						// 	findTimeDiff(id);
-						// 	printf("respLen = %d : id = %d'\n", respLen, id);
-						// 	for(int i = 0; i <= respLen -1; ++i)
-						// 		printf("%x ", (unsigned char)respBuf[i]);
-						// 	printf("'\n");
-						// }
-						memset(respBuf, 0, respLen);
-					} else if (fd == backendSocket) {
-						int new_fd = 0;
-						new_fd = accept(backendSocket, NULL, NULL);
-						if (new_fd < 0) {
-							warn("accept");
-						} else {
-							printf("Connection\n");
-							if (new_client(new_fd)) {
-								printf("Added client\n");
-								safe_fd_set(new_fd, &rfds_master, &max_fd);
-							}
-						}
-					} else if (get_client_index(fd) > -1) {
-						/* It is a socket to a frontend */
-						client_recv(fd);
-					}
-				}
-			}
-		} else {
-			timeout.tv_sec = 1;
-			timeout.tv_usec = 0;
-		}
-	}
-
-	ucart_vrpn_tracker_freeInstance(tracker);
-	
-	safe_close_fd(zyboSocket, &quadSocketMutex);
-
-	closeLogFile();
-	return 0;
-}
-
-void sendStartPacket() {
-	unsigned char packet[8] = {0};
-	currMessageID++;
-	metadata_t metadata = 
-	{
-		(char) BEGIN_CHAR,
-		0x04,
-		0x01,
-		0x01,
-		0
-	};
-
-	packet[0] = metadata.begin_char; // BEGIN					//PACKET_START_BYTE;
-	packet[1] = metadata.msg_type;	// UPDATE				//'U'; // U for vrpn camera update, C for command
-	packet[2] = metadata.msg_subtype; // BEGIN UPDATE
-	packet[3] = (currMessageID & 0x000000ff); 			// MSG ID(1)
-	packet[4] =	((currMessageID >> 8) & 0x000000ff); // MSG ID(2)
-	packet[5] = 0; 			// DATALEN(1)
-	packet[6] = 0; 	// DATALEN(2)
-	
-	char checksum = 0;
-	int i;
-	for(i=0; i < metadata.data_len + 7; i++)
-		checksum ^= packet[i];
-
-	packet[metadata.data_len + 7] = checksum; //PACKET_END_BYTE;
-	int status = writeQuad((char * ) packet, metadata.data_len + 8);
-	if (status != 8)
-	{
-		perror("Error sending start packet...\n");
-		keepRunning = 0;
-	}else
-	{
-		printf("Start packet successfuly sent...\n");
-	}	
-}
-
-void sendVrpnPacket(struct ucart_vrpn_TrackerData *info) {
-	int pSize = sizeof(struct ucart_vrpn_TrackerData) + 8;
-	int n;
-	unsigned char packet[pSize];
-	currMessageID++;
-	packet[0] = 0xBE; // BEGIN					//PACKET_START_BYTE;
-	packet[1] = 0x04;	// UPDATE				//'U'; // U for vrpn camera update, C for command
-	packet[2] = 0x00; // N/A
-	//TODO Figure out Packet ID with this new ucar_vrpn_TrackerData struct
-	packet[3] = (currMessageID & 0x000000ff); 			// MSG ID(1)
-	packet[4] =	((currMessageID >> 8) & 0x000000ff); // MSG ID(2)
-	packet[5] = (sizeof(struct ucart_vrpn_TrackerData) & 0x000000ff); 			// DATALEN(1)
-	packet[6] = ((sizeof(struct ucart_vrpn_TrackerData) >> 8) & 0x00000ff); 	// DATALEN(2)
-	memcpy(&packet[7], &info, sizeof(struct ucart_vrpn_TrackerData));
-
-	char checksum = 0;
-	int i;
-	for(i=0; i < pSize - 1; i++)
-		checksum ^= packet[i];
-
-	packet[pSize - 1] = checksum; //PACKET_END_BYTE;
-
-	n = writeQuad((char *) packet, pSize);
-	if(n < 0) {	
-		perror("vrpnhandler: ERROR writing to socket");
-		keepRunning = 0;
-	}
-	struct timeval tstart;
-	gettimeofday(&tstart, NULL);
-	timeArr[currMessageID%MAX_HASH_SIZE] = tstart;
-}
-
-void getVRPNPacket(struct ucart_vrpn_TrackerData *td) {
-	int status;
-	if((status = ucart_vrpn_tracker_getData(tracker, td)) < 0)
-	{
-		perror("Error receiving VRPN data from tracker...");
-		keepRunning = 0;
-	}
-}
-
-void printVrpnData(struct ucart_vrpn_TrackerData * td) {
-	printf("FPS: %lf Pos (xyz): (%lf %lf %lf) Att (pry): (%lf %lf %lf)\n",
-		td->fps, td->x, td->y, td->z, td->pitch, td->roll, td->yaw);
-}
-
-int connectToZybo() {
-	int sock;
-	int status = 0;
-
-	if (getenv(NOQUAD_ENV)) {
-		return 0;
-	}
-
-	/* Use bluetooth by default */
-	if (!getenv(QUAD_WIFI_ENV)) {
-		printf("Using BT Settings\n");
-		struct sockaddr_rc addr;
-
-		// allocate a socket	
-		sock = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
-
-		//set the connection params ie. who to connect to	
-		addr.rc_family = AF_BLUETOOTH;
-		addr.rc_channel = (uint8_t) QUAD_BT_CHANNEL;
-		str2ba( QUAD_BT_ADDR, &addr.rc_bdaddr );
-		
-		printf("Attempting to connect to zybo. Please be patient...\n");
-		// blocking call to connect to socket sock ie. zybo board
-		status = connect(sock, (struct sockaddr *)&addr, sizeof(addr));
-	} else {
-		printf("Using WIFI settings\n");
-		struct sockaddr_in addr;
-
-		addr.sin_family = AF_INET;
-
-		/* Quick and Dirty */
-		if (getenv(QUAD_IP_ENV)) {
-			 if (!inet_aton(getenv(QUAD_IP_ENV), &addr.sin_addr)) {
-				printf("Env var %s invalid IP %s\n",
-					     	QUAD_IP_ENV, getenv(QUAD_IP_ENV));
-				return -1;
-			 }
-		} else {
-			if (!inet_aton(QUAD_IP_DEFAULT, &addr.sin_addr)) {
-				printf("Default IP %s is invalid\n",
-					     	QUAD_IP_DEFAULT);
-				return -1;
-			}
-		}
-
-		if (getenv(QUAD_PORT_ENV)) {
-			/* Quick 'n dirty, oh yeah! */
-			addr.sin_port = htons(atoi(getenv(QUAD_PORT_ENV)));		
-		} else {
-			addr.sin_port = htons(QUAD_PORT_DEFAULT);
-		}
-
-		sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
-		if (sock < 0) {
-			perror("socket");
-			return -1;
-		}
-		printf("Connecting to Quad @ %s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
-
-		status = connect(sock, (struct sockaddr *)&addr, sizeof(addr));
-	}
-
-	// connection failed
-	if(status < 0)
-	{
-		close(sock);
-		perror("connect");
-		return -1;
-	}
-	else
-	{
-		// int result = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (int[]){1}, sizeof(int));
-		// printf("result = %d\n", result);
-		printf("connection successful!...\n");
-		return sock;
-	}
-}
-
-/* add a fd to fd_set, and update max_fd */
-int safe_fd_set(int fd, fd_set* fds, int* max_fd) {
-    assert(max_fd != NULL);
-
-    FD_SET(fd, fds);
-    if (fd > *max_fd) {
-        *max_fd = fd;
-    }
-    return 0;
-}
-
-/* clear fd from fds, update max fd if needed */
-int safe_fd_clr(int fd, fd_set* fds, int* max_fd) {
-    assert(max_fd != NULL);
-
-    FD_CLR(fd, fds);
-    if (fd == *max_fd) {
-        (*max_fd)--;
-    }
-    return 0;
-}
-
-static ssize_t writeQuad(const 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__);
-	}
-	//setsockopt(zyboSocket, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int));
-	retval = write(zyboSocket, buf, count);
-	if (pthread_mutex_unlock(&quadSocketMutex)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-
-	return retval;
-}
-
-static ssize_t readQuad(char * buf, size_t count) {
-	ssize_t retval;
-	if (pthread_mutex_lock(&quadSocketMutex)) {
-		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
-	}
-	retval = read(zyboSocket, buf, count);
-	//int result = setsockopt(zyboSocket, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int));
-	//printf("result = %d\n", result);
-		
-	if (pthread_mutex_unlock(&quadSocketMutex)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-	return retval;
-}
-
-static int new_client(int fd) {
-	ssize_t new_slot = -1;
-	for (ssize_t i = 0; i < MAX_CLIENTS; i++) {
-		if (client_fds[i] < 0) {
-			new_slot = i;
-			break;
-		}
-	}
-	if (new_slot == -1) {
-		warnx("Ran out of room! Consider increasing MAX_CLIENTS!");
-		return 0;
-	}
-
-	client_fds[new_slot] = fd;
-	client_buffers[new_slot][0] = '\0';
-
-	return 1;
-}
-
-static ssize_t get_client_index(int fd) {
-	for (ssize_t i = 0; i < MAX_CLIENTS; i++) {
-		if (client_fds[i] == fd) {
-			return i;
-		}
-	}
-
-	return -1;
-}
-
-static char * get_client_buffer(int fd) {
-	ssize_t slot = get_client_index(fd);
-	if (slot == -1) {
-		return NULL;
-	} else {
-		return client_buffers[slot];
-	}
-}
-
-static int * get_client_pend_responses(int fd) {
-	ssize_t slot = get_client_index(fd);
-	if (slot == -1) {
-		return NULL;
-	} else {
-		return client_pending_responses[slot];
-	}
-}
-
-static int clientAddPendResponses(int fd, unsigned char *packet) {
-	int *pendingResponses = get_client_pend_responses(fd);
-	int packetID = (packet[4] << 8) | (packet[3]);
-	for(int i = 0; i < CLIENT_MAX_PENDING_RESPONSES; i++) {
-		if(pendingResponses[i] == -1) {
-			pendingResponses[i] = packetID;
-			return i;
-		}
-	}
-	return -1;
-}
-
-static int remove_client(int fd) {
-	ssize_t slot = get_client_index(fd);
-	if(slot == -1)
-		return -1;
-	char *clientBuffer = get_client_buffer(fd);
-	if(clientBuffer == NULL)
-		return -1;
-	clientBuffer[0] = '\0';
-	int *pendingResponses = get_client_pend_responses(fd);
-	if(pendingResponses == NULL)
-		return -1;
-	for(int i = 0; i < CLIENT_MAX_PENDING_RESPONSES; i++) {
-		pendingResponses[i] = -1;
-	}
-	client_fds[slot] = -1;
-	return 0;
-}
-
-static void safe_close_fd(int fd, pthread_mutex_t *mutexLock) {
-	if (pthread_mutex_lock(mutexLock)) {
-		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
-	}
-	close(fd);
-	if (pthread_mutex_unlock(mutexLock)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-}
-
-static void client_recv(int fd) {
-	char * buffer;
-	ssize_t len_pre;
-     	buffer = get_client_buffer(fd);
-	len_pre = strlen(buffer);
-
-	char * cursor;
-	cursor = buffer + len_pre;
-
-	ssize_t r;
-	r = read(fd, cursor, CLIENT_BUFFER_SIZE - len_pre - 1);
-	if (r < 0) {
-		warn("read (fd: %d)", fd);
-	}
-	buffer[len_pre + r] = '\0';
-
-	int index = 0;
-	/* Parse buffer and handle commands */
-	while (1) {
-		/* not using strtok because reasons */
-		size_t len = strlen(buffer);
-		ssize_t newline = -1;
-		for (size_t i = 0; i < len; i++) {
-			if (buffer[i] == '\n') {
-				newline = i;
-				break;
-			}
-		}
-
-		/* No newline found. End parsing */
-		if (newline == -1) {
-			break;
-		}
-		buffer[newline] = '\0';
-		
-		printf("Client(%d) : '%s'\n",fd, buffer);
-		unsigned char * packet;
-		if(formatCommand(buffer, &packet) == -1) {
-			/* buffer was not a quad command, handling internally to
-			 * backend instead of forwarding to quad
-			 */
-			if (strncmp(buffer, TD_MAGIC, strlen(TD_MAGIC)) == 0) {
-				/* Request for tracker data */
-				struct ucart_vrpn_TrackerData td;
-				if (tracker == NULL) {
-					char * dummy = TD_MAGIC " 1.0 2.0 3.0 4.0 5.0 6.0\n";
-					write(fd, dummy, strlen(dummy));
-				}else if (ucart_vrpn_tracker_getData(tracker, &td)) {
-					write(fd, TD_MAGIC " ERROR\n", strlen(TD_MAGIC " ERROR\n"));
-				} else { 
-					/* more than sufficient buffer */
-					char buffer[2048];
-					/* Map VRPN XYZ to Height Lat Long (right now it's
-					 * a guess). Format is Height Lat Long P R Y */
-					if (snprintf(buffer,
-							2048,
-							TD_MAGIC " %lf %lf %lf %lf %lf %lf\n",
-							td.z,
-							td.y,
-							td.x,
-							td.pitch,
-							td.roll,
-							td.yaw) >= 2048) {
-
-						/* Output longer than buffer */
-						warnx("Increase format buffer size, output was too long!");
-						write(fd, TD_MAGIC " ERROR\n", strlen(TD_MAGIC " ERROR\n"));
-					}
-					write(fd, buffer, strlen(buffer));
-				}
-			}
-		} else {
-			if(clientAddPendResponses(fd, packet) == -1) {
-				warnx("Ran out of room! Consider increasing CLIENT_MAX_PENDING_RESPONSES!\n");
-			} else {	
-				int datalen = (packet[6] << 8) | (packet[5]);
-				printf("sending %lf '", getFloat(packet, 7));
-				for(int i = 0; i < datalen + 8; ++i) {
-					printf(" 0x%x", (signed) packet[i]);
-				}
-				printf("'\n");
-				writeQuad((char *) packet, datalen +8);
-			}
-		}
-		
-		char * rest = &buffer[newline] + 1;
-		size_t restLen = (strlen(rest) == 0) ? 1 : strlen(rest);
-		/* Delete parsed data and move the rest to the left */
-		memmove(buffer, rest, restLen +1);
-	}
-}
-
-static void quad_recv(const char * buf, size_t len) {
-	/* Check to see which command we are receiving. If it is one that needs to be passed on
-		onto  the clients, do so.
-	 */
-	
-	char packet[len];
-	int validPacket;
-	unsigned char *data;
-	metadata_t metadata;
-
-	memcpy(packet, buf, len);
-	
-	// Validate the message is correctly formatted
-	validPacket = parse_packet((unsigned char *) packet, &data, &metadata);
-	if(validPacket != 0) {
-		warnx("Could not recognize packet from quad.\n");
-		return;
-	}
-
-	int datalen = (packet[6] << 8) | (packet[5]);
-	char * cmdText = MessageTypes[(int)metadata.msg_type].subtypes[(int)metadata.msg_subtype].cmdText;
-	float value = getFloat((unsigned char *)packet, 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.
-	*/
-	char buffer[1048];
-	sprintf(buffer, "%s %lf\n", cmdText, value);
-
-	for(int fd = 0; fd <= max_fd; ++fd) {
-		if (get_client_index(fd) > -1) {
-			write(fd, buffer, datalen + 8);
-		}
-	}
-}
-
-static int wasDisconnected(int fd) {
-	char buff;
-	if(recv(fd, &buff, 1, MSG_PEEK | MSG_DONTWAIT) == 0)
-	{
-		remove_client(fd);
-		safe_fd_clr(fd, &rfds_master, &max_fd);
-		printf("fd %d has disconnect and was removed\n", fd);
-		return 1;
-	}
-	return 0;
-}
-
-int timeval_subtract (struct timeval *result, struct timeval *x, struct timeval *y) {
-  /* Perform the carry for the later subtraction by updating y. */
-  if (x->tv_usec < y->tv_usec) {
-    int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
-    y->tv_usec -= 1000000 * nsec;
-    y->tv_sec += nsec;
-  }
-  if (x->tv_usec - y->tv_usec > 1000000) {
-    int nsec = (x->tv_usec - y->tv_usec) / 1000000;
-    y->tv_usec += 1000000 * nsec;
-    y->tv_sec -= nsec;
-  }
-  /* Compute the time remaining to wait.
-     tv_usec is certainly positive. */
-  result->tv_sec = x->tv_sec - y->tv_sec;
-  result->tv_usec = x->tv_usec - y->tv_usec;
-  /* Return 1 if result is negative. */
-  return x->tv_sec < y->tv_sec;
-}
-
-void findTimeDiff(int respID) {
-	struct timeval result, tend;
-	gettimeofday(&tend, NULL);
-	timeval_subtract(&result, &tend, &timeArr[respID%MAX_HASH_SIZE]);
-	printf("elapsed time = %ld ms\n", result.tv_usec/1000);
-	// char tmp[8];
-	// snprintf(tmp, 8, "%ld \tms\n", result.tv_usec/1000);
-	// writeStringToLog(tmp);
-}
diff --git a/groundStation/src/backend/commands.c b/groundStation/src/backend/commands.c
deleted file mode 100644
index a97197b81..000000000
--- a/groundStation/src/backend/commands.c
+++ /dev/null
@@ -1,1150 +0,0 @@
-#include "commands.h"
-
-// TAKE THESE OUT WHEN IMPLEMENTING ON THE QUAD SIDE
-float getFloat(unsigned char* str, int pos) {
-	union {
-		float f;
-		int i;
-	} x;
-	x.i = ((str[pos+3] << 24) | (str[pos+2] << 16) | (str[pos+1] << 8) | (str[pos]));
-	return x.f;
-}
-
-int getInt(unsigned char* str, int pos) {
-	int i = ((str[pos+3] << 24) | (str[pos+2] << 16) | (str[pos+1] << 8) | (str[pos]));
-	return i;
-}
-//------------------------------------------------
-
-struct MessageType MessageTypes[MAX_TYPE] = 
-{
-	// DEBUG
-	{
-		// Message Type ID
-		0x00,
-		
-		// Debug Subtypes
-		{
-			// NONE subtype
-			{
-				// ID
-				0x00,
-				// Command text
-				"debug",
-				// Type of the command data
-				stringType,
-				// Function pointer
-				&debug
-			}
-		}
-	},
-	
-	// CALIBRATION
-	{
-		// Message Type ID
-		0x01,
-		
-		// Calibration Subtypes (PID coefficients)
-		{
-			// yaw p constant subtype
-			{
-				// ID
-				0x00,
-				// Command text
-				"setyawp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// yaw i constant subtype
-			{
-				// ID
-				0x01,
-				// Command text
-				"setyawi",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// yaw d constant subtype
-			{
-				// ID
-				0x02,
-				// Command text
-				"setyawd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// roll p constant subtype
-			{
-				// ID
-				0x03,
-				// Command text
-				"setrollp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// roll i constant subtype
-			{
-				// ID
-				0x04,
-				// Command text
-				"setrolli",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// roll d constant subtype
-			{
-				// ID
-				0x05,
-				// Command text
-				"setrolld",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// pitch p constant subtype
-			{
-				// ID
-				0x06,
-				// Command text
-				"setpitchp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// pitch i constant subtype
-			{
-				// ID
-				0x07,
-				// Command text
-				"setpitchi",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// pitch d constant subtype
-			{
-				// ID
-				0x08,
-				// Command text
-				"setpitchd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// yawrate p constant subtype
-			{
-				// ID
-				0x09,
-				// Command text
-				"setyawratep",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// yawrate i constant subtype
-			{
-				// ID
-				0x0A,
-				// Command text
-				"setyawratei",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// yawrate d constant subtype
-			{
-				// ID
-				0x0B,
-				// Command text
-				"setyawrated",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// rollrate p constant subtype
-			{
-				// ID
-				0x0C,
-				// Command text
-				"setrollratep",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// rollrate i constant subtype
-			{
-				// ID
-				0x0D,
-				// Command text
-				"setrollratei",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// rollrate d constant subtype
-			{
-				// ID
-				0x0E,
-				// Command text
-				"setrollrated",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// pitchrate p constant subtype
-			{
-				// ID
-				0x0F,
-				// Command text
-				"setpitchratep",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// pitchrate i constant subtype
-			{
-				// ID
-				0x10,
-				// Command text
-				"setpitchratei",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// pitchrate d constant subtype
-			{
-				// ID
-				0x11,
-				// Command text
-				"setpitchrated",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// height p constant subtype
-			{
-				// ID
-				0x12,
-				// Command text
-				"setheightp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// height i constant subtype
-			{
-				// ID
-				0x13,
-				// Command text
-				"setheighti",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// height d constant subtype
-			{
-				// ID
-				0x14,
-				// Command text
-				"setheightd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// lat p constant subtype
-			{
-				// ID
-				0x15,
-				// Command text
-				"setlatp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// lat i constant subtype
-			{
-				// ID
-				0x16,
-				// Command text
-				"setlati",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// lat d constant subtype
-			{
-				// ID
-				0x17,
-				// Command text
-				"setlatd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// long p constant subtype
-			{
-				// ID
-				0x18,
-				// Command text
-				"setlongp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// long i constant subtype
-			{
-				// ID
-				0x19,
-				// Command text
-				"setlongi",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			},
-			// long d constant subtype
-			{
-				// ID
-				0x1A,
-				// Command text
-				"setlongd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				NULL
-			}
-		}
-	},
-	
-	// REQUEST
-	{
-		// Message Type ID
-		0x02,
-		
-		// Request Subtypes
-		{
-			// accelerometer subtype
-			{
-				// ID 
-				0x00,
-				// Command text
-				"getaccel",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getaccel
-			},
-			// gyroscope subtype
-			{
-				// ID 
-				0x01,
-				// Command text
-				"getgyro",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getgyro
-			},
-			// pitch angle subtype
-			{
-				// ID 
-				0x02,
-				// Command text
-				"getpitchangle",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getpitchangle
-			},
-			// roll angle subtype
-			{
-				// ID 
-				0x03,
-				// Command text
-				"getrollangle",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getrollangle
-			},
-			// get yaw setpoint subtype
-			{
-				// ID
-				0x04,
-				// Command text
-				"getyaw",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&setyaw
-			},
-			// get yaw p constant subtype
-			{
-				// ID
-				0x05,
-				// Command text
-				"getyawp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getyawp
-			},
-			// get yaw d constant subtype
-			{
-				// ID
-				0x06,
-				// Command text
-				"getyawd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getyawd
-			},
-			// get roll setpoint subtype
-			{
-				// ID
-				0x07,
-				// Command text
-				"getroll",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getroll
-			},
-			// get roll p constant subtype
-			{
-				// ID
-				0x08,
-				// Command text
-				"getrollp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getrollp
-			},
-			// getroll d constant subtype
-			{
-				// ID
-				0x09,
-				// Command text
-				"getrolld",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getrolld
-			},
-			// get pitch setpoint subtype
-			{
-				// ID
-				0x0A,
-				// Command text
-				"getpitch",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getpitch
-			},
-			// get pitch p constant subtype
-			{
-				// ID
-				0x0B,
-				// Command text
-				"getpitchp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getpitchp
-			},
-			// get pitch d constant subtype
-			{
-				// ID
-				0x0C,
-				// Command text
-				"getpitchd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getpitchd
-			},
-			// get throttle setpoint subtype
-			{
-				// ID
-				0x0D,
-				// Command text
-				"getthrottle",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getthrottle
-			},
-			// get throttle p constant subtype
-			{
-				// ID
-				0x0E,
-				// Command text
-				"getthrottlep",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getthrottlep
-			},
-			// get throttle i constant subtype
-			{
-				// ID
-				0x0F,
-				// Command text
-				"getthrottlei",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getthrottlei
-			},
-			// get throttle d constant subtype
-			{
-				// ID
-				0x10,
-				// Command text
-				"getthrottled",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&getthrottled
-			}
-		}
-	},
-	
-	// RESPONSE
-	{
-		// Message Type ID
-		0x03,
-		
-		// Response Subtypes
-		{
-			// accelerometer subtype
-			{
-				// ID
-				0x00,
-				// Command text
-				"respaccel",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respaccel
-			},
-			// gyroscope subtype
-			{
-				// ID
-				0x01,
-				// Command text
-				"respgyro",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respgyro
-			},
-			// pitch angle subtype
-			{
-				// ID 
-				0x02,
-				// Command text
-				"resppitchangle",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resppitchangle
-			},
-			// roll angle subtype
-			{
-				// ID 
-				0x03,
-				// Command text
-				"resprollangle",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resprollangle
-			},
-			// resp yaw setpoint subtype
-			{
-				// ID
-				0x04,
-				// Command text
-				"respyaw",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&setyaw
-			},
-			// resp yaw p constant subtype
-			{
-				// ID
-				0x05,
-				// Command text
-				"respyawp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respyawp
-			},
-			// resp yaw d constant subtype
-			{
-				// ID
-				0x06,
-				// Command text
-				"respyawd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respyawd
-			},
-			// resp roll setpoint subtype
-			{
-				// ID
-				0x07,
-				// Command text
-				"resproll",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resproll
-			},
-			// resp roll p constant subtype
-			{
-				// ID
-				0x08,
-				// Command text
-				"resprollp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resprollp
-			},
-			// resproll d constant subtype
-			{
-				// ID
-				0x09,
-				// Command text
-				"resprolld",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resprolld
-			},
-			// resp pitch setpoint subtype
-			{
-				// ID
-				0x0A,
-				// Command text
-				"resppitch",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resppitch
-			},
-			// resp pitch p constant subtype
-			{
-				// ID
-				0x0B,
-				// Command text
-				"resppitchp",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resppitchp
-			},
-			// resp pitch d constant subtype
-			{
-				// ID
-				0x0C,
-				// Command text
-				"resppitchd",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&resppitchd
-			},
-			// resp throttle setpoint subtype
-			{
-				// ID
-				0x0D,
-				// Command text
-				"respthrottle",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respthrottle
-			},
-			// resp throttle p constant subtype
-			{
-				// ID
-				0x0E,
-				// Command text
-				"respthrottlep",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respthrottlep
-			},
-			// resp throttle i constant subtype
-			{
-				// ID
-				0x0F,
-				// Command text
-				"respthrottlei",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respthrottlei
-			},
-			// resp throttle d constant subtype
-			{
-				// ID
-				0x10,
-				// Command text
-				"respthrottled",
-				// Type of the command data
-				floatType,
-				// Function pointer
-				&respthrottled
-			}
-		}
-	},
-	
-	// UPDATE
-	{
-		// Message Type ID
-		0x04,
-		
-		// Update Subtypes
-		{
-			// NONE subtype
-			{
-				// ID 
-				0x00,
-				// Command text
-				"update",
-				// Type of the command data
-				stringType,
-				// Function pointer
-				&update
-			}
-		}
-	},
-	
-	// LOG
-	{
-		// Message Type ID
-		0x05,
-		
-		// Log Subtypes
-		{
-			// NONE subtype
-			{
-				// ID
-				0x00,
-				// Command text
-				"log",
-				// Type of the command data
-				stringType,
-				// Function pointer
-				&logdata
-			},
-			// Response subtype
-			{
-				// ID
-				0x01,
-				// Command text
-				"response",
-				// Type of the command data
-				stringType,
-				// Function pointer
-				&response
-			}
-		}
-	},
-	
-};
-
-int debug(unsigned char *packet, int dataLen, modular_structs_t *structs)
-{
-	printf("function for debug\n");
-	return 0;
-}
-
-int update(unsigned char *packet, int dataLen,	modular_structs_t *structs)
-{
-	unsigned char update[28];
-	memcpy(update, ((float *)packet), 28);
-	
-	int packetId = getInt(update, 0);
-	float y_pos = getFloat(update, 4);
-	float x_pos = getFloat(update, 8);
-	float alt_pos = getFloat(update, 12);
-	float roll = getFloat(update, 16);
-	float pitch = getFloat(update, 20);
-	float yaw = getFloat(update, 24);
-
-	structs->log_struct.currentQuadPosition.packetId = packetId;
-	structs->log_struct.currentQuadPosition.y_pos = y_pos;
-	structs->log_struct.currentQuadPosition.x_pos = x_pos;
-	structs->log_struct.currentQuadPosition.alt_pos = alt_pos;
-	structs->log_struct.currentQuadPosition.roll = roll;
-	structs->log_struct.currentQuadPosition.pitch = pitch;
-	structs->log_struct.currentQuadPosition.yaw = yaw;
-	
-	printf("QUAD: VRPN Packet:");
-	printf("Packet ID: %d\n", packetId);
-	printf("Y Position: %f\n", y_pos);
-	printf("X Position: %f\n", x_pos);
-	printf("Altitude Position: %f\n", alt_pos);
-	printf("Roll: %f\n", roll);
-	printf("Pitch: %f\n", pitch);
-	printf("Yaw: %f\n", yaw);
-	
-	printf("function for update\n");
-	return 0;
-}
-
-// Why is this here?
-// This should be on the ground station side
-int logdata(unsigned char *packet, int dataLen, modular_structs_t *structs)
-{
-	printf("Logging: %s\n", packet);
-	return 0;
-}
-
-int response(unsigned char *packet, int dataLen, modular_structs_t *structs)
-{
-	printf("This is the response: %s\n", packet);
-	
-	return 0;
-}
-
-// ------------------------------------------------------------------
-
-int setyaw(unsigned char *packet, int dataLen, modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	
-	printf("%f\n", value);
-	
-	structs->setpoint_struct.desiredQuadPosition.yaw = value;
-
-	printf("function for setyaw: %f\n", structs->setpoint_struct.desiredQuadPosition.yaw);
-	
-	return 0;
-}
-
-int setyawp(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.yaw_angle_pid.Kp = value;
-	
-	printf("function for setyawp: %f\n", structs->parameter_struct.yaw_angle_pid.Kp);
-	
-	return 0;
-}
-
-int setyawd(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.yaw_angle_pid.Kd = value;
-	
-	printf("function for setyawd: %f\n", structs->parameter_struct.yaw_angle_pid.Kd);
-	
-	return 0;
-}
-
-int setroll(unsigned char *packet, int dataLen,	 modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->setpoint_struct.desiredQuadPosition.roll = value;
-	
-	printf("function for setroll: %f\n", structs->setpoint_struct.desiredQuadPosition.roll);
-	
-	return 0;
-}
-
-int setrollp(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.local_y_pid.Kp = value;
-	
-	printf("function for setrollp: %f\n", structs->parameter_struct.local_y_pid.Kp);
-	
-	return 0;
-}
-
-int setrolld(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.local_y_pid.Kd = value;
-	
-	printf("function for setrolld: %f\n", structs->parameter_struct.local_y_pid.Kd);
-	
-	return 0;
-}
-
-int setpitch(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->setpoint_struct.desiredQuadPosition.pitch = value;
-	
-	printf("function for setpitch: %f\n", structs->setpoint_struct.desiredQuadPosition.pitch);
-	
-	return 0;
-}
-
-int setpitchp(unsigned char *packet, int dataLen,	modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.local_x_pid.Kp = value;
-	
-	printf("function for setpitchp: %f\n", structs->parameter_struct.local_x_pid.Kp);
-	
-	return 0;
-}
-
-int setpitchd(unsigned char *packet, int dataLen,	modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.local_x_pid.Kd = value;
-	
-	printf("function for setpitchd: %f\n", structs->parameter_struct.local_x_pid.Kd);
-	
-	return 0;
-}
-
-// ------------------------------------------------------------
-// These should be renamed to altitude!
-int setthrottle(unsigned char *packet, int dataLen,	 modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->setpoint_struct.desiredQuadPosition.alt_pos = value;
-	
-	printf("function for setthrottle: %f\n", structs->setpoint_struct.desiredQuadPosition.alt_pos);
-	
-	return 0;
-}
-
-int setthrottlep(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.alt_pid.Kp = value;
-	
-	printf("function for setthrottlep: %f\n", structs->parameter_struct.alt_pid.Kp);
-	
-	return 0;
-}
-
-int setthrottlei(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.alt_pid.Ki = value;
-	
-	printf("function for setthrottlei: %f\n", structs->parameter_struct.alt_pid.Ki);
-	
-	return 0;
-}
-
-int setthrottled(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	float value;
-	
-	memcpy(&value, ((float *)packet), dataLen);
-	structs->parameter_struct.alt_pid.Kd = value;
-	
-	printf("function for setthrottled: %f\n", structs->parameter_struct.alt_pid.Kd);
-	
-	return 0;
-}
-int getyaw(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getyawp(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getyawd(unsigned char *packet, int dataLen, modular_structs_t *structs) {
-	return 0;
-}
-int getroll(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getrollp(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getrolld(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getpitch(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getpitchp(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getpitchd(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getthrottle(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getthrottlep(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getthrottlei(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int getthrottled(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-
-// These should be renamed to altitude!
-// ------------------------------------------------------------
-
-
-
-
-int getgyro(unsigned char *packet, int dataLen,	 modular_structs_t *structs)
-{
-	printf("function for getgyro\n");
-	return 0;
-}
-
-int getpitchangle(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	printf("function for getpitchangle\n");
-	return 0;
-}
-
-int getrollangle(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	printf("function for getrollangle\n");
-	return 0;
-}
-
-
-int getaccel(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	printf("function for getaccel\n");
-	return 0;
-}
-
-
-int respgyro(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	printf("function for respgyro\n");
-	return 0;
-}
-
-int resppitchangle(unsigned char *packet, int dataLen,	modular_structs_t *structs)
-{
-	printf("function for resppitchangle\n");
-	return 0;
-}
-
-int resprollangle(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	printf("function for resprollangle\n");
-	return 0;
-}
-
-
-int respaccel(unsigned char *packet, int dataLen,  modular_structs_t *structs)
-{
-	printf("function for respaccel\n");
-	return 0;
-}
-
-int respyaw(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int respyawp(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int respyawd(unsigned char *packet, int dataLen, modular_structs_t *structs) {
-	return 0;
-}
-int resproll(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int resprollp(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int resprolld(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int resppitch(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int resppitchp(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int resppitchd(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int respthrottle(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int respthrottlep(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int respthrottlei(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
-int respthrottled(unsigned char *packet, int dataLen, modular_structs_t *structs){
-	return 0;
-}
diff --git a/groundStation/src/backend/commands.h b/groundStation/src/backend/commands.h
deleted file mode 100644
index b9c9956ea..000000000
--- a/groundStation/src/backend/commands.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef _COMMANDS_H
-#define _COMMANDS_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "type_def.h"
-
-
-// ----------------------
-// Helper stuff
-
-#define MAX_TYPE 6
-#define MAX_SUBTYPE 100
-
-enum Message{
-	BEGIN_CHAR = 0xBE,
-	END_CHAR   = 0xED
-};
-
-// This should also have double to avoid confusion with float values.
-enum DataType
-{
-	floatType,
-	intType,
-	stringType
-};
-
-// MESSAGE SUBTYPES
-struct MessageSubtype{
-	char ID;
-	char cmdText[100];
-	char cmdDataType;
-	int (*functionPtr)(unsigned char *command, int dataLen, modular_structs_t *structs);
-};
-
-// MESSAGE TYPES
-struct MessageType{
-	char ID;
-	struct MessageSubtype subtypes[MAX_SUBTYPE];
-};
-
-int debug(unsigned char *c, int dataLen, modular_structs_t *structs);
-int update(unsigned char *c, int dataLen, modular_structs_t *structs);
-int logdata(unsigned char *c, int dataLen, modular_structs_t *structs);
-int response(unsigned char *packet, int dataLen, modular_structs_t *structs);
-int setyaw(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setyawp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setyawd(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setroll(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setrollp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setrolld(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setpitch(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setpitchp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setpitchd(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setthrottle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setthrottlep(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setthrottlei(unsigned char *c, int dataLen, modular_structs_t *structs);
-int setthrottled(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getyaw(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getyawp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getyawd(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getroll(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getrollp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getrolld(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getpitch(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getpitchp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getpitchd(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getthrottle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getthrottlep(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getthrottlei(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getthrottled(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getaccel(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getgyro(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getpitchangle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int getrollangle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respaccel(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respgyro(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resppitchangle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resprollangle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respyaw(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respyawp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respyawd(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resproll(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resprollp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resprolld(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resppitch(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resppitchp(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resppitchd(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respthrottle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respthrottlep(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respthrottlei(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respthrottled(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respaccel(unsigned char *c, int dataLen, modular_structs_t *structs);
-int respgyro(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resppitchangle(unsigned char *c, int dataLen, modular_structs_t *structs);
-int resprollangle(unsigned char *c, int dataLen, modular_structs_t *structs);
-
-float getFloat(unsigned char* str, int pos);
-int getInt(unsigned char* str, int pos);
-
-// TODO add in string to be read from the command line when sending a subtype of message
-extern struct MessageType MessageTypes[MAX_TYPE];
-
-#endif
\ No newline at end of file
diff --git a/groundStation/src/backend/communication.c b/groundStation/src/backend/communication.c
deleted file mode 100644
index 2dacd03f9..000000000
--- a/groundStation/src/backend/communication.c
+++ /dev/null
@@ -1,271 +0,0 @@
-#include "communication.h"
-#include "commands.h"
-#include <string.h>
-#include <ctype.h>
-
-static int msgNum = 0;
-
-tokenList_t tokenize(char* cmd) {
-	int maxTokens = 16;
-	tokenList_t ret;
-	ret.numTokens = 0;
-	ret.tokens = malloc(sizeof(char*) * maxTokens);
-	ret.tokens[0] = NULL;
-
-	int i = 0;
-	char* token = strtok(cmd, " ");
-	while (token != NULL && i < maxTokens - 1) {
-		ret.tokens[i++] = token;
-		ret.tokens[i] = NULL;
-		ret.numTokens++;
-		token = strtok(NULL, " ");
-	}
-
-	return ret;
-}
-
-int checkFloat(char *floatString, float *value) {
-	char *tmp;
-	*value = strtod(floatString, &tmp);
-	if(!(isspace(*tmp) || *tmp == 0)) {
-		fprintf(stderr, "%s is not a valid floating-point number\n", floatString);
-		return 0;
-	}
-	return 1;
-}
-
-int checkInt(char *intString, int *value) {
-	char *tmp;
-	long temp_long;
-	temp_long = strtol(intString, &tmp, 0); // base 10 number inputted
-	if(temp_long < INT_MIN || temp_long > INT_MAX ||  !(isspace(*tmp) || *tmp == 0)) {
-		fprintf(stderr, "%s is not a valid integer number\n", intString);
-		return 0;
-	}
-	printf("temp: %ld\n\n", temp_long);
-	*value = (int) temp_long;
-	return 1;
-}
-
-//--------------------------------
-// Ground Station
-//--------------------------------
-
-// Formatting commands from ground station CLI
-int formatCommand(char *command, unsigned char **formattedCommand) {
-	//fprintf(stderr, "length = %li , received '%s'\n", strlen(command), command);
-	char cmd[strlen(command)];
-	strncpy(cmd, command, strlen(command));
-	cmd[strlen(command)] = '\0';
-
-	tokenList_t tokens = tokenize(cmd);
-	float floatValue = 0.0;
-	int intValue = 0;
-	int valid;
-	metadata_t metadata;
-	
-	// ----------------------------------------------
-	if(tokens.numTokens > 0) {
-		for(int type = 0; type < MAX_TYPE; type++)
-		{
-			for(int subtype = 0; subtype < MAX_SUBTYPE; subtype++)
-			{
-				if(strcmp(tokens.tokens[0], MessageTypes[type].subtypes[subtype].cmdText) == 0)
-				{
-					printf("Sending\n\ttype: %d, \n\tsubtype: %d\n\tcommand: %s\n", type, subtype, MessageTypes[type].subtypes[subtype].cmdText);
-					
-					// Make sure the second token is the right type
-					switch (MessageTypes[type].subtypes[subtype].cmdDataType)
-					{
-						// Validate the float input
-						case floatType:
-							metadata.begin_char = (char) BEGIN_CHAR;
-							metadata.msg_type = MessageTypes[type].ID;
-							metadata.msg_subtype = MessageTypes[type].subtypes[subtype].ID;
-
-							if(MessageTypes[type].ID == 0x01) {
-								valid = checkFloat(tokens.tokens[1], &floatValue);
-								if(!valid) {
-									return -1;
-								}
-								metadata.data_len = sizeof(floatValue);
-							} else {
-								metadata.data_len = 0;
-							}
-							
-							metadata.msg_id = msgNum++;
-							formatPacket(&metadata, &floatValue, formattedCommand);
-							break;
-						
-						// Validate the integer input
-						case intType:
-							metadata.begin_char = (char) BEGIN_CHAR;
-							metadata.msg_type = MessageTypes[type].ID;
-							metadata.msg_subtype = MessageTypes[type].subtypes[subtype].ID;
-							
-							if(MessageTypes[type].ID == 0x01) {
-								valid = checkInt(tokens.tokens[1], &intValue);
-								if(!valid) {
-									return -1;
-								}
-								metadata.data_len = sizeof(intValue);
-							} else {
-								metadata.data_len = 0;
-							}
-							
-							metadata.msg_id = msgNum++;
-							formatPacket(&metadata, &intValue, formattedCommand);
-							
-							break;
-						
-						// Validate the string input (doesn't need to happen)
-						case stringType:
-							metadata.begin_char = (char) BEGIN_CHAR;
-							metadata.msg_type = MessageTypes[type].ID;
-							metadata.msg_subtype = MessageTypes[type].subtypes[subtype].ID;
-							metadata.msg_id = msgNum++;
-							metadata.data_len = strlen(tokens.tokens[1]);
-							
-							formatPacket(&metadata, &tokens.tokens[1], formattedCommand);
-							
-							break;
-						default:
-							return -1;
-					}
-					return 0;
-				}
-			}
-		}
-	}
-
-	// Only gets here if the command does not exist
-	return -1;	
-}
-// QUAD & Ground Station
-// Format the log data from log_message
-//int formatData(unsigned char *log_msg, unsigned char *formattedCommand)
-int formatPacket(metadata_t *metadata, void *data, unsigned char **formattedCommand)
-{
-	*formattedCommand = malloc(sizeof(unsigned char) * metadata->data_len + 8);
-	//----------------------------------------------------------------------------------------------
-	//	   index||	   0	|	  1	   |	  2		 |	3 & 4 |		 5 & 6		 |	7+	|	end	   |
-	//---------------------------------------------------------------------------------------------|
-	// msg param|| beg char | msg type | msg subtype | msg id | data len (bytes) | data | checksum |
-	//-------------------------------------------------------------------------------------------- |
-	//	   bytes||	   1	|	  1	   |	  1		 |	  2	  |		   2		 | var	|	 1	   |
-	//----------------------------------------------------------------------------------------------
-	
-	// Begin Char:
-	(*formattedCommand)[0] = metadata->begin_char;
-
-	// Msg type:
-	(*formattedCommand)[1] = metadata->msg_type;
-	
-	// Msg subtype
-	(*formattedCommand)[2] = metadata->msg_subtype;
-	
-	//Msg id (msgNum is 2 bytes)
-	(*formattedCommand)[3] = (metadata->msg_id & 0x000000ff);
-	(*formattedCommand)[4] = ((metadata->msg_id >> 8) & 0x000000ff);
-	
-	// Data length and data - bytes 5&6 for len, 7+ for data
-	(*formattedCommand)[5] = metadata->data_len & 0x000000ff;
-	(*formattedCommand)[6] = (metadata->data_len >> 8) & 0x000000ff;
-	
-	memcpy(&((*formattedCommand)[7]), data, metadata->data_len);
-	
-	// Checksum
-	// receive data and calculate checksum
-	int i;
-	char data_checksum;
-	for(i = 0; i < 7 + metadata->data_len; i++)
-	{
-		data_checksum ^= (*formattedCommand)[i];
-	}
-	
-	(*formattedCommand)[7 + metadata->data_len] = data_checksum;
-	
-	return 0;
-}
-
-// returns the length of the data in bytes (datalen from packet) and fills data
-// and metadata with the packet information
-// use as follows:
-//
-//		packet is the entire packet message (formatted) 
-//		data is an unallocated (char *) (pass it to this function as &data) 
-//		meta_data is a pointer to an instance of metadata_t
-//
-int parse_packet(unsigned char * packet, unsigned char ** data, metadata_t * meta_data)
-{
-	//----------------------------------------------------------------------------------------------
-	//     index||     0    |     1    |      2      |  3 & 4 |      5 & 6       |  7+  |   end    |
-	//---------------------------------------------------------------------------------------------|
-	// msg param|| beg char | msg type | msg subtype | msg id | data len (bytes) | data | checksum |
-	//-------------------------------------------------------------------------------------------- |
-	//     bytes||     1    |     1    |      1      |    2   |        2         | var  |    1     |
-	//----------------------------------------------------------------------------------------------	
-	
-	// first byte must be the begin char
-	if(packet[0] != 0xBE)
-		return -1;
-
-	// receive metadata
-	meta_data->begin_char = packet[0];
-	meta_data->msg_type = packet[1];
-	meta_data->msg_subtype = packet[2];
-	meta_data->msg_id = (packet[4] << 8) | (packet[3]);
-	meta_data->data_len = (packet[6] << 8) | (packet[5]);
-	unsigned char packet_checksum = packet[7+meta_data->data_len];
-	//fprintf(stderr, "datalen: %d\n", meta_data->data_len);
-	
-	int i;
-	
-	// receive data
-	*data = malloc(meta_data->data_len);
-	for(i = 0; i < meta_data->data_len; i++)
-	{
-		(*data)[i] = packet[7+i];
-	}
-
-	// calculate checksum
-	unsigned char calculated_checksum = 0;
-	for(i = 0; i < meta_data->data_len + 7; 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 0;
-}
-
-// QUAD & Ground Station
-// Process the command received
-int processCommand(unsigned char *packet, modular_structs_t *structs) {
-	int validPacket;
-	unsigned char *data;
-	metadata_t metadata;
-	
-	// Validate the message is correctly formatted
-	validPacket = parse_packet(packet, &data, &metadata);
-	if(validPacket != 0) {
-		return -1;
-	}
-	
-	if(metadata.data_len >= 0) {
-		/* Null check*/
-		if (MessageTypes[(unsigned char)metadata.msg_type].subtypes[
-				(unsigned char) metadata.msg_subtype].functionPtr) {
-			// Call the appropriate subtype function
-			(* (MessageTypes[(unsigned char)metadata.msg_type].subtypes[(unsigned char)metadata.msg_subtype].functionPtr))(data, metadata.data_len, structs);
-		}
-			
-		return 0;
-	}
-	
-	// Only gets here if there is an error
-	return -1;
-}
diff --git a/groundStation/src/backend/communication.h b/groundStation/src/backend/communication.h
deleted file mode 100644
index 746b9f5d4..000000000
--- a/groundStation/src/backend/communication.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef _COMMUNICATION_H
-#define _COMMUNICATION_H
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <limits.h>
-#include "type_def.h"
-
-tokenList_t tokenize(char* cmd);
-int checkFloat(char *floatString, float *value);
-int checkInt(char *intString, int *value);
-int formatCommand(char *command, unsigned char **formattedCommand);
-int formatPacket(metadata_t *metadata, void *data, unsigned char **formattedCommand);
-int parse_packet(unsigned char * packet, unsigned char ** data, metadata_t * meta_data);
-int processCommand(unsigned char *command, modular_structs_t *structs);
-int logData(unsigned char *log_msg, unsigned char *formattedCommand);
-
-#endif
\ No newline at end of file
diff --git a/groundStation/src/backend/config.h b/groundStation/src/backend/config.h
deleted file mode 100644
index bf88e6e2b..000000000
--- a/groundStation/src/backend/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-
-#define DEFAULT_SOCKET "/var/run/ucart.socket"
-#define SOCKET_ENV "UCART_SOCKET"
-#define NOQUAD_ENV "UCART_NO_QUAD"
-#define NOVRPN_ENV "UCART_NO_VRPN"
-
-
-// If you are planning on using any of these env vars and you have
-// 	exported them with normal user rights. You will need to run the 
-// 	backend with sudo elevation and with the --preserve-env flag or -E
-#define QUAD_WIFI_ENV "UCART_USE_WIFI"
-#define QUAD_IP_ENV "UCART_QUAD_IP"
-#define QUAD_IP_DEFAULT "192.168.4.1"
-#define QUAD_PORT_ENV "UCART_QUAD_PORT"
-#define QUAD_PORT_DEFAULT 8080
-
-#endif
diff --git a/groundStation/src/backend/logger.c b/groundStation/src/backend/logger.c
deleted file mode 100644
index 028cfeac1..000000000
--- a/groundStation/src/backend/logger.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Author: Kris Burney
- *
- * Logger file for holding functions pertaining to loging to a file.
- */
-#include "logger.h"
-#include <stdio.h>
-#include <err.h>
-#include <pthread.h>
-
-static FILE * quadlog_file = NULL;
-static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-
-int createLogFile(int argc, char* argv)
-{
-	if (quadlog_file != NULL) {
-		return -1;
-	}
-
-	if (pthread_mutex_lock(&mutex)) {
-		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
-	}
-
-	char log_file[300];
-	strcpy(log_file, "logs/");
-	if(argc >= 2)
-	{
-		strncat(log_file, argv, 294);
-		printf("Creating log file '%s'...\n",log_file);
-		quadlog_file = fopen(log_file, "a");
-	} else {
-		time_t rawtime;
-		char timestr [30];
-		time(&rawtime);
-		sprintf(timestr,"%s",ctime(&rawtime));
-
-		// Lets convert space to _ in
-		char *p = timestr;
-		size_t i = 0;
-		while(i < strlen(timestr))
-		{ 
-		    if (*p == ' ')
-		          *p = '_';
-			i++;
-			p++;
-		}
-
-		// timestr has a weird char at the end of it.
-		// we will not include it in our file name
-		strncat(log_file, timestr, strlen(timestr) -1 );
-		strcat(log_file, ".txt");
-		printf("Creating log file '%s'...\n",log_file);
-		quadlog_file = fopen(log_file, "a");
-	}
-	if (pthread_mutex_unlock(&mutex)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-	return 0;
-}
-
-int updateLogFile(const struct ucart_vrpn_TrackerData * td)
-{
-	int retval;
-
-	if (pthread_mutex_lock(&mutex)) {
-		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
-	}
-     
-	retval = fprintf(quadlog_file, 
-			"FPS: %lf Pos (xyz): (%lf %lf %lf) Att (pry): (%lf %lf %lf)\n",
-		td->fps, td->x, td->y, td->z, td->pitch, td->roll, td->yaw);
-
-	if (pthread_mutex_unlock(&mutex)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-	
-	return retval;
-}
-
-int writeStringToLog(const char * string)
-{
-	int retval;
-
-	if (pthread_mutex_lock(&mutex)) {
-		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
-	}
-
-	retval = fprintf(quadlog_file, "%s", string);
-
-	if (pthread_mutex_unlock(&mutex)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-
-	return retval;
-}
-
-void closeLogFile(void)
-{
-	if (pthread_mutex_lock(&mutex)) {
-		err(-2, "pthrtead_mutex_lock (%s:%d):", __FILE__, __LINE__);
-	}
-
-	fclose(quadlog_file);
-
-	if (pthread_mutex_unlock(&mutex)) {
-		err(-2, "pthrtead_mutex_unlock (%s:%d):", __FILE__, __LINE__);
-	}
-
-}
diff --git a/groundStation/src/backend/logger.h b/groundStation/src/backend/logger.h
deleted file mode 100644
index edfb365ff..000000000
--- a/groundStation/src/backend/logger.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Author: Kris Burney
- *
- * Logger header file for holding info pertaining to loging to a file.
- */
-#ifndef _LOGGER_H
-#define _LOGGER_H
-
-#include <fcntl.h>
-#include <time.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "vrpn_tracker.hpp"
-
-int createLogFile(int, char*);
-int writeStringToLog(const char*);
-int updateLogFile(const struct ucart_vrpn_TrackerData* );
-void closeLogFile();
-
-
-#endif
diff --git a/groundStation/src/backend/old_main.cold b/groundStation/src/backend/old_main.cold
deleted file mode 100644
index 5234bcc56..000000000
--- a/groundStation/src/backend/old_main.cold
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <libcli.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <string.h>
-#include <strings.h>
-#include <signal.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-
-
-#define CLITEST_PORT		8000
-
-int fn_help(struct cli_def *cli, const char *command, char *argv[], int argc);
-
-struct cli_def * cli;
-int on = 1;
-
-int main(int argc, char **argv)
-{
-	int s, x;
-    struct sockaddr_in addr;
-
-	if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
-    {
-        perror("socket");
-        return 1;
-    }
-    setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
-
-    memset(&addr, 0, sizeof(addr));
-    addr.sin_family = AF_INET;
-    addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    addr.sin_port = htons(CLITEST_PORT);
-
-    if (bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0)
-    {
-        perror("bind");
-        return 1;
-    }
-
-    if (listen(s, 50) < 0)
-    {
-        perror("listen");
-        return 1;
-    }
-
-    printf("Listening on port %d\n", CLITEST_PORT);
-
-	cli = cli_init();
-	cli_set_banner(cli, "Welcome to my test cli");
-
-	cli_register_command(cli, NULL, "helpme", fn_help, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "displays help info for a command");
-	
-	
-
-
-	while((x = accept(s, NULL, NULL)))
-	{
-		cli_loop(cli, x);
-    close(x);
-	}
-	
-
-	cli_done(cli);
-}
-
-
-int fn_help(struct cli_def *cli, const char *command, char *argv[], int argc) {
-	printf("you ran the help function!!\n");
-    return 0;   
-}
-
diff --git a/groundStation/src/backend/type_def.h b/groundStation/src/backend/type_def.h
deleted file mode 100644
index 55dca9e8f..000000000
--- a/groundStation/src/backend/type_def.h
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * struct_def.h
- *
- *  Created on: Mar 2, 2016
- *      Author: ucart
- */
-
-#ifndef TYPE_DEF_H_
-#define TYPE_DEF_H_
-
-/**
- * @brief
- *      The modes for autonomous and manual flight.
- *
- */
-enum flight_mode{
-	AUTO_FLIGHT_MODE,
-	MANUAL_FLIGHT_MODE
-};
-
-//----------------------------------------------------------------------------------------------
-//     index||     0    |     1    |      2      |  3 & 4 |      5 & 6       |  7+  |   end    |
-//---------------------------------------------------------------------------------------------|
-// msg param|| beg char | msg type | msg subtype | msg id | data len (bytes) | data | checksum |
-//-------------------------------------------------------------------------------------------- |
-//     bytes||     1    |     1    |      1      |    2   |        2         | var  |    1     |
-//----------------------------------------------------------------------------------------------
-typedef struct {
-	char begin_char;
-	char msg_type;
-	char msg_subtype;
-	int msg_id;
-	int data_len;
-} metadata_t;
-
-
-// String builder data type
-typedef struct stringBuilder_s {
-	char* buf;
-	int length;
-	int capacity;
-	int maxCapacity;
-
-	// Methods
-	int (*addStr)(struct stringBuilder_s*, char*);
-	int (*addStrAt)(struct stringBuilder_s*, char*, int);
-	int (*addChar)(struct stringBuilder_s*, char);
-	int (*addCharAt)(struct stringBuilder_s*, char, int);
-	int (*removeCharAt)(struct stringBuilder_s*, int);
-	void (*clear)(struct stringBuilder_s*);
-} stringBuilder_t;
-
-typedef struct {
-	char** tokens;
-	int numTokens;
-} tokenList_t;
-
-typedef struct commands{
-	int pitch, roll, yaw, throttle;
-}commands;
-
-typedef struct raw{
-	int x,y,z;
-}raw;
-typedef struct PID_Consts{
-	float P, I, D;
-}PID_Consts;
-
-//Camera system info
-typedef struct {
-	int packetId;
-
-	double y_pos;
-	double x_pos;
-	double alt_pos;
-
-	double yaw;
-	double roll;
-	double pitch;
-} quadPosition_t;
-
-typedef struct {
-	float yaw;
-	float roll;
-	float pitch;
-	float throttle;
-} quadTrims_t;
-
-//Gyro, accelerometer, and magnetometer data structure
-//Used for reading an instance of the sensor data
-typedef struct {
-
-	// GYRO
-	//Xint16 raw_gyro_x, raw_gyro_y, raw_gyro_z;
-
-	float gyro_xVel_p; // In degrees per second
-	float gyro_yVel_q;
-	float gyro_zVel_r;
-
-	// ACCELEROMETER
-	//Xint16 raw_accel_x, raw_accel_y, raw_accel_z;
-
-	float accel_x; //In g
-	float accel_y;
-	float accel_z;
-
-	float accel_roll;
-	float accel_pitch;
-
-
-	// MAG
-	//Xint16 raw_mag_x, raw_mag_y, raw_mag_z;
-
-	float heading; // In degrees
-
-	float mag_x; //Magnetic north: ~50 uT
-	float mag_y;
-	float mag_z;
-
-
-
-}gam_t;
-
-typedef struct PID_t {
-	double current_point;	// Current value of the system
-	double setpoint;		// Desired value of the system
-	float Kp;				// Proportional constant
-	float Ki;				// Integral constant
-	float Kd;				// Derivative constant
-	double prev_error;		// Previous error
-	double acc_error;		// Accumulated error
-	double pid_correction;	// Correction factor computed by the PID
-	float dt; 				// sample period
-} PID_t;
-
-typedef struct PID_values{
-	float P;	// The P component contribution to the correction output
-	float I;	// The I component contribution to the correction output
-	float D;	// The D component contribution to the correction output
-	float error; // the error of this PID calculation
-	float change_in_error; // error change from the previous calc. to this one
-	float pid_correction; // the correction output (P + I + D)
-} PID_values;
-
-///////// MAIN MODULAR STRUCTS
-/**
- * @brief
- *      Holds the data inputed by the user
- *
- */
-typedef struct user_input_t {
-	int rc_commands[6]; 	// Commands from the RC transmitter
-
-
-//	float cam_x_pos;	// Current x position from the camera system
-//	float cam_y_pos;	// Current y position from the camera system
-//	float cam_z_pos;	// Current z position from the camera system
-//	float cam_roll;		// Current roll angle from the camera system
-//	float cam_pitch;	// Current pitch angle from the camera system
-//	float cam_yaw;		// Current yaw angle from the camera system
-
-	float yaw_manual_setpoint;
-	float roll_angle_manual_setpoint;
-	float pitch_angle_manual_setpoint;
-
-	int hasPacket;
-	stringBuilder_t * sb;
-} user_input_t;
-
-/**
- * @brief
- *      Holds the log data to be sent to the ground station. It may hold the
- * timestamp of when a sensor's data was obtained.
- *
- */
-typedef struct log_t {
-	// Time
-	float time_stamp;
-	float time_slice;
-
-	// Id
-	int packetId;
-
-	gam_t gam; 	// Raw and calculated gyro, accel, and mag values are all in gam_t
-	float phi_dot, theta_dot, psi_dot; // gimbal equation values
-
-	quadPosition_t currentQuadPosition;
-
-	float roll_angle_filtered, pitch_angle_filtered;
-	float lidar_altitude;
-
-	float pid_P_component, pid_I_component, pid_D_component; // use these generically for any PID that you are testing
-
-	// PID coefficients and errors
-	PID_t local_x_PID, local_y_PID, altitude_PID;
-	PID_t angle_yaw_PID, angle_roll_PID, angle_pitch_PID;
-	PID_t ang_vel_yaw_PID, ang_vel_roll_PID, ang_vel_pitch_PID;
-
-	PID_values local_x_PID_values, local_y_PID_values, altitude_PID_values;
-	PID_values angle_yaw_PID_values, angle_roll_PID_values, angle_pitch_PID_values;
-	PID_values ang_vel_yaw_PID_values, ang_vel_roll_PID_values, ang_vel_pitch_PID_values;
-
-	// RC commands
-	commands commands;
-
-	//trimmed values
-	quadTrims_t trims;
-
-	int motors[4];
-
-} log_t;
-
-/**
- * @brief
- *      Holds the raw data from the sensors and the timestamp if available
- *
- */
-typedef struct raw_sensor {
-	int acc_x;		// accelerometer x data
-	int acc_x_t;	// time of accelerometer x data
-
-	int acc_y;		// accelerometer y data
-	int acc_y_t;	// time of accelerometer y data
-
-	int acc_z;		// accelerometer z data
-	int acc_z_t;	// time of accelerometer z data
-
-
-	int gyr_x;		// gyroscope x data
-	int gyr_x_t;	// time of gyroscope x data
-
-	int gyr_y;		// gyroscope y data
-	int gyr_y_t;	// time of gyroscope y data
-
-	int gyr_z;		// gyroscope z data
-	int gyr_z_t;	// time of gyroscope z data
-
-	int ldr_z;		//lidar z data (altitude)
-	int ldr_z_t;	//time of lidar z data
-
-	gam_t gam;
-
-	// Structures to hold the current quad position & orientation
-	quadPosition_t currentQuadPosition;
-
-} raw_sensor_t;
-
-/**
- * @brief
- *      Holds the processed data from the sensors and the timestamp if available
- *
- */
-typedef struct sensor {
-	int acc_x;		// accelerometer x data
-	int acc_x_t;	// time of accelerometer x data
-
-	int acc_y;		// accelerometer y data
-	int acc_y_t;	// time of accelerometer y data
-
-	int acc_z;		// accelerometer z data
-	int acc_z_t;	// time of accelerometer z data
-
-
-	int gyr_x;		// gyroscope x data
-	int gyr_x_t;	// time of gyroscope x data
-
-	int gyr_y;		// gyroscope y data
-	int gyr_y_t;	// time of gyroscope y data
-
-	int gyr_z;		// gyroscope z data
-	int gyr_z_t;	// time of gyroscope z data
-
-	int ldr_z;		//lidar z data (altitude)
-	int ldr_z_t;	//time of lidar z data
-
-	float pitch_angle_filtered;
-	float roll_angle_filtered;
-	float lidar_altitude;
-
-	float phi_dot, theta_dot, psi_dot;
-
-	// Structures to hold the current quad position & orientation
-	quadPosition_t currentQuadPosition;
-	quadTrims_t trims;
-
-} sensor_t;
-
-/**
- * @brief
- *      Holds the setpoints to be used in the controller
- *
- */
-typedef struct setpoint_t {
-	quadPosition_t desiredQuadPosition;
-} setpoint_t;
-
-/**
- * @brief
- *      Holds the parameters that are specific to whatever type of
- *      control algorithm is being used
- *
- */
-typedef struct parameter_t {
-	PID_t roll_angle_pid, roll_ang_vel_pid;
-	PID_t pitch_angle_pid, pitch_ang_vel_pid;
-	PID_t yaw_ang_vel_pid;
-	PID_t local_x_pid;
-	PID_t local_y_pid;
-	PID_t yaw_angle_pid;
-	PID_t alt_pid;
-} parameter_t;
-
-/**
- * @brief
- *      Holds user defined data for the controller
- *
- */
-typedef struct user_defined_t {
-	int flight_mode;
-	int engaging_auto;
-} user_defined_t;
-
-/**
- * @brief
- *      Holds the raw actuator values before processing
- *
- */
-typedef struct raw_actuator_t {
-
-	int controller_corrected_motor_commands[6];
-
-} raw_actuator_t;
-
-/**
- * @brief
- *      Holds processed commands to go to the actuators
- *
- */
-typedef struct actuator_command_t {
-	int pwms[4];
-} actuator_command_t;
-
-/**
- * @brief
- * 		Structures to be used throughout
- */
-typedef struct {
-	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;
-}modular_structs_t;
-
-//////// END MAIN MODULAR STRUCTS
-
-#endif /* TYPE_DEF_H_ */
diff --git a/groundStation/src/backend/vrpn_tracker.cpp b/groundStation/src/backend/vrpn_tracker.cpp
deleted file mode 100644
index 7f9b56a99..000000000
--- a/groundStation/src/backend/vrpn_tracker.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-#include <iostream>
-#include <algorithm>
-#include <functional>
-
-#include "vrpn_Tracker.h"
-#include "quat.h"
-
-#include "vrpn_tracker.hpp"
-
-namespace microcart
-{
-	static void VRPN_CALLBACK vrpn_cb(void * param, const vrpn_TRACKERCB t);
-	
-	TrackerData::TrackerData() :
-		x(0.0), y(0.0), z(0.0),
-		pitch(0.0), roll(0.0), yaw(0.0),
-		fps(0.0), timestamp()
-	{
-	}
-
-	Tracker::Tracker(std::string server) : 
-		remote(server.c_str()),
-		stop_flag(0),
-		trackerData()
-	{
-	}
-
-	Tracker::Tracker(const char * server) :
-		remote(server),
-		stop_flag(0),
-		trackerData()
-	{
-		remote.register_change_handler(this, vrpn_cb);
-
-		stop_flag = 0;
-		vrpn_thread = std::thread(&Tracker::vrpn_loop, this);
-	}
-
-	Tracker::~Tracker()
-	{
-		{
-			std::lock_guard<std::mutex> guard(vrpn_mutex);
-			stop_flag = 1;
-		}
-		vrpn_thread.join();
-	}
-
-	const struct TrackerData Tracker::getData(void)
-	{
-		std::lock_guard<std::mutex> guard(vrpn_mutex);
-		return trackerData;
-	}
-
-	void Tracker::vrpn_loop(void)
-	{
-		while (1) {
-			remote.mainloop();
-			{
-				std::lock_guard<std::mutex> guard(vrpn_mutex);
-
-				if (stop_flag) {
-					return;
-				}
-			}
-		}
-	}
-
-	void Tracker::callback(const vrpn_TRACKERCB t)
-	{
-		std::lock_guard<std::mutex> guard(vrpn_mutex);
-
-		q_vec_type euler;
-		q_to_euler(euler, t.quat);
-
-		trackerData.x = (double) t.pos[0];
-		trackerData.y = (double) t.pos[1];
-		trackerData.z = (double) t.pos[2];
-
-		trackerData.roll  = (double) euler[2];
-		trackerData.pitch = (double) euler[1];
-		trackerData.yaw   = (double) euler[0];
-
-		timeval elapsed_time;
-		timersub(&t.msg_time, &trackerData.timestamp, &elapsed_time);
-		trackerData.timestamp = t.msg_time;
-
-		double elapsed_time_usec = (double) elapsed_time.tv_usec + 
-			((1000000.0) * (double) elapsed_time.tv_sec);
-
-		trackerData.fps = 1.0 / elapsed_time_usec;
-
-		auto td = trackerData;
-		for(auto i = cb_vector.begin(); i != cb_vector.end(); ++i) {
-			(*i)(td);
-		}
-	}
-
-	void Tracker::addCallback(std::function<void(const TrackerData&)> cb) 
-	{
-		cb_vector.push_back(cb);
-	}
-
-	static void VRPN_CALLBACK vrpn_cb(void * param, const vrpn_TRACKERCB t)
-	{
-		Tracker * inst = (Tracker *)(param);
-		inst->callback(t);
-	}
-}
-
-/* C Interface stuff */
-struct ucart_vrpn_tracker {
-	microcart::Tracker * t;
-};
-
-void cb_wrapper(void (*cb)(struct ucart_vrpn_TrackerData *),
-		const microcart::TrackerData &td)
-{
-						struct ucart_vrpn_TrackerData data;
-						data.x = td.x;
-						data.y = td.y;
-						data.z = td.z;
-						data.pitch = td.pitch;
-						data.roll = td.roll;
-						data.yaw = td.yaw;
-						data.fps = td.fps;
-						(*cb)(&data);
-}
-
-extern "C"
-{
-	struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance(
-			const char * server)
-	{
-		try {
-			auto inst = new struct ucart_vrpn_tracker;
-			inst->t = new microcart::Tracker(server);
-			return inst;
-		} catch(...) {
-			return NULL;
-		}
-	}
-
-	void ucart_vrpn_tracker_freeInstance(struct ucart_vrpn_tracker * inst)
-	{
-		delete inst->t;
-		delete inst;
-	}
-
-	int ucart_vrpn_tracker_addCallback(struct ucart_vrpn_tracker * inst,
-			void (*cb)(struct ucart_vrpn_TrackerData *))
-	{
-		try {
-			auto new_cb = bind(cb_wrapper, cb, std::placeholders::_1);
-			inst->t->addCallback(new_cb);
-		} catch(...) {
-			return -1;
-		}
-		return 0;
-	}
-
-	int ucart_vrpn_tracker_getData(struct ucart_vrpn_tracker *inst,
-			struct ucart_vrpn_TrackerData *td)
-	{
-		try {
-			auto data = inst->t->getData();
-			td->x = data.x;
-			td->y = data.y;
-			td->z = data.z;
-			td->pitch = data.pitch;
-			td->roll = data.roll;
-			td->yaw = data.yaw;
-
-			return 0;
-		} catch(...) {
-			return -1;
-		}
-	}
-}
diff --git a/groundStation/src/backend/vrpn_tracker.hpp b/groundStation/src/backend/vrpn_tracker.hpp
deleted file mode 100644
index d10ad6e79..000000000
--- a/groundStation/src/backend/vrpn_tracker.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Author: Jake Drahos
- *
- * VPRN tracker module header file.
- */
-
-#ifndef _MICROCART_VRPN_TRACKER_HPP
-#define _MICROCART_VRPN_TRACKER_HPP
-
-#ifdef __cplusplus
-#include <mutex>
-#include <thread>
-#include <functional>
-#include <vector>
-
-#include "vrpn_Tracker.h"
-#endif
-
-#include <sys/time.h>
-
-#ifdef __cplusplus
-extern "C" 
-{
-#endif
-	struct ucart_vrpn_tracker;
-	struct ucart_vrpn_TrackerData {
-		double x;
-		double y;
-		double z;
-
-		double pitch;
-		double roll;
-		double yaw;
-
-		double fps;
-		struct timeval timestamp;
-	};
-
-	struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance(
-			const char * server);
-
-	void ucart_vrpn_tracker_freeInstance(struct ucart_vrpn_tracker * inst);
-
-	int ucart_vrpn_tracker_addCallback(struct ucart_vrpn_tracker * inst,
-			void (*cb)(struct ucart_vrpn_TrackerData *));
-
-	int ucart_vrpn_tracker_getData(struct ucart_vrpn_tracker * inst,
-			struct ucart_vrpn_TrackerData * td);
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef __cplusplus
-namespace microcart
-{
-	struct TrackerData {
-	public:
-		double x;
-		double y;
-		double z;
-
-		double pitch;
-		double roll;
-		double yaw;
-
-		double fps;
-		timeval timestamp;
-
-		TrackerData();
-	};
-
-	class Tracker {
-	public:
-		const struct TrackerData getData(void);
-		void callback(const vrpn_TRACKERCB t);
-
-		Tracker(std::string server);
-		Tracker(const char * server);
-		~Tracker();
-
-		void addCallback(std::function<void(const TrackerData &)> cb);
-	private:
-		int stop_flag;
-		TrackerData trackerData;
-		std::thread vrpn_thread;
-		std::mutex vrpn_mutex;
-
-		vrpn_Tracker_Remote remote;
-
-		void vrpn_loop(void);
-
-		std::vector<std::function<void(const TrackerData &)>> cb_vector;
-	};
-
-
-}
-/* __cplusplus */
-#endif
-
-#endif
diff --git a/groundStation/src/cli/cli.c b/groundStation/src/cli/cli.c
deleted file mode 100644
index 58fe14b8c..000000000
--- a/groundStation/src/cli/cli.c
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <err.h>
-#include <libgen.h>
-
-#include "cli.h"
-
-int main(int argc, char **argv)
-{
-	int cmdID = -1;
-	char * command;
-	int i , useSymlink = 0;
-	struct backend_conn  *conn;
-
-	command = basename(argv[0]);
-	for(i = 0; i < MAX_COMMANDS; ++i) {
-		if (strncmp(command, commandNames[i], strlen(commandNames[i])) == 0)
-		{
-			cmdID = i;
-			useSymlink = 1;
-		}
-	}
-
-	if(cmdID == -1) {
-		command = argv[1];
-		for(i = 0; i < MAX_COMMANDS; ++i) {
-			if (strncmp(command, commandNames[i], strlen(commandNames[i])) == 0)
-			{
-				cmdID = i;
-			}	
-		}
-	}
-
-	if(cmdID == -1){
-		printf("Could not match input with a command. Please try again...\n");
-		return -1;
-	}
-
-	printf("Parsed Command : %s\n", commandNames[cmdID]);
-	conn = ucart_backendConnect();
-	if(conn == NULL) {
-		return -1;
-	}
-
-	if(useSymlink) {
-		(*cli_functions[cmdID]) (conn, argc, &argv[0]);
-	}else {
-		(*cli_functions[cmdID]) (conn, argc-1, &argv[1]);
-	}
-
-	ucart_backendDisconnect(conn);
-    return 0;
-}
diff --git a/groundStation/src/cli/cli.h b/groundStation/src/cli/cli.h
deleted file mode 100644
index f4c2fe3f4..000000000
--- a/groundStation/src/cli/cli.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef __CLI_H
-#define __CLI_H
-
-#include "cli_monitor.h"
-#include "cli_setpid.h"
-#include "cli_getpid.h"
-// #include "cli_getimu.h"
-enum CommandNameIds{
-	CMD_MONITOR,
-	CMD_GETPID,
-	CMD_SETPID,
-	CMD_GETIMU,
-	MAX_COMMANDS
-};
-
-typedef int (*cli_function_ptr)(struct backend_conn *, int, char **);
-static cli_function_ptr cli_functions[] = {
-	&cli_monitor,
-	&cli_getpid,
-	&cli_setpid
-	//&cli_getimu
-};
-
-static char* commandNames[MAX_COMMANDS] = {
-	"monitor",
-	"getpid",
-	"setpid",
-	"getImu"
-};
-
-
-#endif
diff --git a/groundStation/src/cli/cli_getimu.h b/groundStation/src/cli/cli_getimu.h
deleted file mode 100644
index 3f69e4b15..000000000
--- a/groundStation/src/cli/cli_getimu.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef CLI_GETIMU_H
-#define CLI_GETIMU_H
-#include "frontend_getimu.h"
-
-int cli_getimu(
-		struct backend_conn * conn,
-		struct frontend_pid_data * pid_data);
-
-#endif
\ No newline at end of file
diff --git a/groundStation/src/cli/cli_getpid.c b/groundStation/src/cli/cli_getpid.c
deleted file mode 100644
index bb887ca24..000000000
--- a/groundStation/src/cli/cli_getpid.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <getopt.h>
-
-#include "cli_getpid.h"
-
-int cli_getpid(struct backend_conn * conn,	int argc, char **argv) {
-	int c;
-	static int getRoll = 0, getPitch = 0, getYaw = 0, getAll = 0;
-	static int getRollV = 0, getPitchV = 0, getYawV = 0;
-	static int getHeight = 0, getLat = 0, getLong = 0;
-	struct frontend_pid_data pid_data;
-	static struct option long_options[] = {
- 		/* These options don’t set a flag. We distinguish them by their indices. */
- 		{"roll",	no_argument,	&getRoll,	1},
- 		{"pitch",   no_argument,   	&getPitch, 	1},
- 		{"yaw",   no_argument,   	&getYaw, 	1},
- 		{"rollv",   no_argument,   	&getYawV, 	1},
- 		{"pitchv",   no_argument,   	&getYawV, 	1},
- 		{"yawv",   no_argument,   	&getYawV, 	1},
- 		{"height",   no_argument,   	&getHeight,	1},
- 		{"lat",   no_argument,   	&getLat, 	1},
- 		{"long",   no_argument,   	&getLong, 	1},
- 		{0, 0, 0, 0}
- 	};
-
- 	while (1)
-	{
-		/* getopt_long stores the option index here. */
-		int option_index = 0;
-
-		c = getopt_long(argc, argv, "a", long_options, &option_index);
-
-		/* Detect the end of the options. */
-		if (c == -1)
-			break;
-
-		if (c == 'a') {
-			getAll = 1;
-		}
-	}
-
-	int result;
-	if(getAll) {
-		pid_data.controller = PID_ROLL;
-		if ((result = getValues(conn, &pid_data))) {
-			return result;
-		}
-		pid_data.controller = PID_PITCH;
-		if ((result = getValues(conn, &pid_data))) {
-			return result;
-		}
-		pid_data.controller = PID_YAW;
-		if ((result = getValues(conn, &pid_data))) {
-			return result;
-		}
-	} else {
-		if(getPitch) {
-			pid_data.controller = PID_PITCH;
-			if ((result = getValues(conn, &pid_data))) {
-				return result;
-			}
-		}
-		if(getRoll) {
-			pid_data.controller = PID_ROLL;
-			if ((result = getValues(conn, &pid_data))) {
-				return result;
-			}
-		}
-		if(getYaw) {
-			pid_data.controller = PID_YAW;
-			if ((result = getValues(conn, &pid_data))) {
-				return result;
-			}
-		}
-	}
-
-	return 0;
-}
-
-int getValues(struct backend_conn * conn, struct frontend_pid_data * pid_data) {
-	if(frontend_getpid(conn, pid_data)) {
-		return 1;
-	}
-
-	return 0;
-
-	switch(pid_data->controller) {
-		case PID_PITCH :
-			printf("Pitch Constants: P = %f\tI = %f\tD = %f\n",
-				pid_data->p, pid_data->i, pid_data->d);
-			break;
-		case PID_ROLL :
-			printf("Roll Constants: P = %f\tI = %f\tD = %f\n",
-				pid_data->p, pid_data->i, pid_data->d);
-			break;
-		case PID_YAW :
-			printf("Yaw Constants: P = %f\tI = %f\tD = %f\n",
-				pid_data->p, pid_data->i, pid_data->d);
-			break;
-		default :
-			break;
-	}
-	return 0;
-}
diff --git a/groundStation/src/cli/cli_getpid.h b/groundStation/src/cli/cli_getpid.h
deleted file mode 100644
index f5c0b15e4..000000000
--- a/groundStation/src/cli/cli_getpid.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef CLI_GETPID_H
-#define CLI_GETPID_H
-
-#include "frontend_getpid.h"
-
-int getValues(struct backend_conn *, struct frontend_pid_data *);
-int cli_getpid(struct backend_conn * conn, int argc, char ** argv);
-
-#endif
\ No newline at end of file
diff --git a/groundStation/src/cli/cli_monitor.c b/groundStation/src/cli/cli_monitor.c
deleted file mode 100644
index 4494e65b0..000000000
--- a/groundStation/src/cli/cli_monitor.c
+++ /dev/null
@@ -1,102 +0,0 @@
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <time.h>
-#include <unistd.h>
-#include <err.h>
-
-#include "cli_monitor.h"
-#include "frontend_tracker.h"
-
-int cli_monitor(struct backend_conn * conn,	int argc, char **argv) {
-	int c, result;
-	int countFlag = 0;
-
-	int count, rate = 10;
-	int forever = 0;
-
-
- 	while ((c = getopt(argc, argv, "fc:r:")) != -1) {
-		switch(c) {
-			case 'c' :
-				count = atoi(optarg);
-				countFlag = 1;
-				break;
-			case 'r' :
-				rate = atoi(optarg) + 1;
-				break;
-			case 'f' :
-				forever = 1;
-				break;
-			default :
-				break;
-		}
-	}
-
-	if (forever) {
-		for (;;) {
-			struct timespec req;
-			if (rate == 1) {
-				req.tv_sec = 1;
-				req.tv_nsec = 0;
-			} else { 
-				req.tv_sec = 0;
-				req.tv_nsec = 1000000000 / rate;
-			}
-			nanosleep(&req, NULL);
-			monitor(conn);
-		}
-	} else if (countFlag) {
-		for (int i = 0; i < count; i++) {
-			result = monitor(conn);
-
-			struct timespec req;
-			if (rate == 1) {
-				req.tv_sec = 1;
-				req.tv_nsec = 0;
-			} else { 
-				req.tv_sec = 0;
-				req.tv_nsec = 1000000000 / rate;
-			}
-			nanosleep(&req, NULL);
-		}
-	} else {
-		return monitor(conn);
-	}
-
-	return result;
-}
-
-int monitor(struct backend_conn * conn) {
-	/* Get tracker data */
-	struct frontend_tracker_data td;
-	if (frontend_track(conn, &td)) {
-		errx(1, "Error reading tracker data");
-	}
-
-	/* TODO: Get PID constants and status */
-	/* It might be a good idea to only read the pid constants
-	 * every few seconds, so count iterations and only do it if 
-	 * this is every (rate * 2 or 3) pass through the loop
-	 */
-
-	/* Print stuff on screen */
-	/* Assuming a tab width of 8 columns */
-	printf("\033[2J");
-	printf("STATUS: NA\n");
-	printf("CTRLR :\tP\tR\tY\tP_V\tR_V\tY_V\tH\tLAT\tLON\n");
-	printf("  P   :\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\n",
-			0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-	printf("  I   :\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\n",
-			0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-	printf("  D   :\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\n",
-			0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-	printf("PosAtt:\tH\tLAT\tLON\tP\tR\tY\n");
-	printf("      :\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\t%6.3lf\n",
-			td.height, td.lateral, td.longitudinal,
-			td.pitch, td.roll, td.yaw);
-
-	return 0;
-}
diff --git a/groundStation/src/cli/cli_monitor.h b/groundStation/src/cli/cli_monitor.h
deleted file mode 100644
index 308721bb8..000000000
--- a/groundStation/src/cli/cli_monitor.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef CLI_MONITOR_H
-#define CLI_MONITOR_H
-
-#include <time.h>
-
-#include "frontend_getpid.h"
-
-#define SECOND_IN_NANO 1000000000
-
-int cli_monitor(struct backend_conn * conn,	int argc, char **argv);
-
-// Return 0 on success and 1 otherwise
-int monitor(struct backend_conn * conn);
-#endif
\ No newline at end of file
diff --git a/groundStation/src/cli/cli_setpid.c b/groundStation/src/cli/cli_setpid.c
deleted file mode 100644
index 2fdc16fdb..000000000
--- a/groundStation/src/cli/cli_setpid.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <getopt.h>
-
-#include "cli_setpid.h"
-#include "frontend_setpid.h"
-
-int cli_setpid(struct backend_conn * conn,	int argc, char **argv) {
-	int c;
-	static int setRoll = 0, setPitch = 0, setYaw = 0, setAll = 0;
-	static int setRollV = 0, setPitchV = 0, setYawV = 0;
-	static int setHeight = 0, setLat = 0, setLong = 0;
-	struct frontend_pid_data pid_data;
-	static int mask;
-	static float pval = 0, ival = 0, dval = 0;
-	static struct option long_options[] = {
- 		/* These options don’t set a flag. We distinguish them by their indices. */
- 		{"roll",	no_argument,	&setRoll,	1},
- 		{"pitch",   no_argument,   	&setPitch, 	1},
- 		{"yaw",   no_argument,   	&setYaw, 	1},
- 		{"rollv",   no_argument,   	&setRollV, 	1},
- 		{"pitchv",   no_argument,   &setPitchV, 	1},
- 		{"yawv",   no_argument,   	&setYawV, 	1},
- 		{"height",   no_argument,   &setHeight,	1},
- 		{"lat",   no_argument,   	&setLat, 	1},
- 		{"long",   no_argument,   	&setLong, 	1},
- 		{0, 0, 0, 0}
- 	};
-
- 	while (1)
-	{
-		/* getopt_long stores the option index here. */
-		int option_index = 0;
-
-		c = getopt_long(argc, argv, "p:i:d:", long_options, &option_index);
-
-		/* Detect the end of the options. */
-		if (c == -1)
-			break;
-
-		switch(c) {
-			case 'p' :
-				pid_data.p  = atof(optarg);
-				mask |= SET_P;
-				break;
-			case 'i' :
-				pid_data.i  = atof(optarg);
-				mask |= SET_I;
-				break;
-			case 'd' :
-				pid_data.d  = atof(optarg);
-				mask |= SET_D;
-				break;
-			default :
-				break;
-		}
-	}
-
-	if(setRoll) {
-		pid_data.controller = PID_ROLL;
-	} else if (setYaw) {
-		pid_data.controller = PID_YAW;
-	} else if (setPitch) {
-		pid_data.controller = PID_PITCH;
-	} else if (setRollV) {
-		pid_data.controller = PID_ROLL_RATE;
-	} else if (setPitchV) {
-		pid_data.controller = PID_PITCH_RATE;
-	} else if (setYawV) {
-		pid_data.controller = PID_YAW_RATE;
-	} else if (setHeight) {
-		pid_data.controller = PID_HEIGHT;
-	} else if (setLong) {
-		pid_data.controller = PID_LAT;
-	} else if (setLat) {
-		pid_data.controller = PID_LONG;
-	}
-
-	frontend_setpid(conn, &pid_data, mask);
-	return 0;
-}
diff --git a/groundStation/src/cli/cli_setpid.h b/groundStation/src/cli/cli_setpid.h
deleted file mode 100644
index 87fb0a4f4..000000000
--- a/groundStation/src/cli/cli_setpid.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _CLI_SETPID_H
-#define _CLI_SETPID_H
-
-#include "frontend_setpid.h"
-
-int cli_setpid(struct backend_conn * conn, int argc, char ** argv);
-
-#endif
diff --git a/groundStation/src/frontend/frontend_common.c b/groundStation/src/frontend/frontend_common.c
deleted file mode 100644
index cbedbe42a..000000000
--- a/groundStation/src/frontend/frontend_common.c
+++ /dev/null
@@ -1,93 +0,0 @@
-#define _GNU_SOURCE
-
-#include "frontend_common.h"
-#include "config.h"
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <err.h>
-
-struct backend_conn {
-	FILE * socket;
-
-	size_t len;
-	char * buf;
-};
-
-struct backend_conn * ucart_backendConnect()
-{
-	int s;
-	struct sockaddr_un remote;
-	char str[100];
-
-	if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
-		perror("socket");
-		exit(1);
-	}
-
-	struct backend_conn * conn = NULL;
-
-	printf("Trying to connect...\n");
-
-	remote.sun_family = AF_UNIX;
-	char * sock_env = getenv(SOCKET_ENV);
-	strcpy(remote.sun_path, sock_env ? sock_env : DEFAULT_SOCKET);
-	if (connect(s, (struct sockaddr *)&remote, sizeof(remote))  == -1) {
-		perror("connect");
-		goto fail_final;
-	}
-
-	conn = malloc(sizeof(struct backend_conn));
-	if (conn == NULL) {
-		perror("malloc");
-		goto fail_sock;
-	}
-
-	conn->len = 0;
-	conn->buf = NULL;
-	conn->socket = fdopen(s, "r+");
-	if (conn->socket == NULL) {
-		perror("fdopen");
-		goto fail_malloc_conn;
-	}
-	if (setvbuf(conn->socket, NULL, _IONBF, 0)) {
-		warn("setvbuf");
-	}
-
-	/* success */
-	goto fail_final;
-
-fail_malloc_conn:
-	free(conn);
-	conn = NULL;
-fail_sock:
-	close(s);
-fail_final:
-	return conn;
-}
-
-void ucart_backendDisconnect(struct backend_conn * conn)
-{
-	fclose(conn->socket);
-	if (conn->buf) {
-		free(conn->buf);
-	}
-	free(conn);
-}
-
-char * ucart_backendGetline(struct backend_conn *conn)
-{
-	getline(&conn->buf, &conn->len, conn->socket);
-	return conn->buf;
-}
-
-int ucart_backendWrite(struct backend_conn *conn, const char * line)
-{
-	return fputs(line, conn->socket);
-}
diff --git a/groundStation/src/frontend/frontend_common.h b/groundStation/src/frontend/frontend_common.h
deleted file mode 100644
index c8ea78771..000000000
--- a/groundStation/src/frontend/frontend_common.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef FRONTEND_COMMON_H
-#define FRONTEND_COMMON_H
-#include <stdlib.h>
-
-struct backend_conn;
-
-/* Start connection to quad */
-struct backend_conn * ucart_backendConnect(void);
-
-/* Stop connection to quad */
-void ucart_backendDisconnect(struct backend_conn * conn);
-
-/* Get a line from the backend.
- *
- * The line will remain valid until the next call to ucart_backendGetline.
- */
-char * ucart_backendGetline(struct backend_conn * conn);
-
-/* Write a line to the backend */
-int ucart_backendWrite(struct backend_conn * backend, const char * line);
-
-#endif
diff --git a/groundStation/src/frontend/frontend_getpid.c b/groundStation/src/frontend/frontend_getpid.c
deleted file mode 100644
index fbde309c3..000000000
--- a/groundStation/src/frontend/frontend_getpid.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "frontend_getpid.h"
-#include "pid_common.h"
-
-/* Get a specified PID.
- *
- * Example:
- *
- * struct frontend_pid_data pid_data;
- * pid_data.pid = PID_PITCH;
- * if (frontend_getpid(conn, &pid_data)) {
- * 		error
- * } else {
- * 		pid_data.p, pid_data.i, and pid_data.d are filled
- * }
- *
- * Returns 0 on success, 1 on error
- */
-int frontend_getpid(
-		struct backend_conn * conn, struct frontend_pid_data * pid_data) {
-	
-	char line[100] = "";
-	switch (pid_data->controller) {
-		case PID_PITCH :
-			strncpy(line, "getpitchp\ngetpitchd\n", 20);
-			break;
-		case PID_ROLL :
-			strncpy(line, "getrollp\ngetrolld\n", 18);
-			break;
-		case PID_YAW :
-			strncpy(line, "getyawp\ngetyawd\n", 17);
-			break;
-		default :
-			return 1;
-	}
-
-	int size;
-	if((size = ucart_backendWrite(conn, line)) < 0 ) {
-		return 1;
-	}
-
-	return 0;
-}	
diff --git a/groundStation/src/frontend/frontend_getpid.h b/groundStation/src/frontend/frontend_getpid.h
deleted file mode 100644
index 977ae97f3..000000000
--- a/groundStation/src/frontend/frontend_getpid.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef FRONTEND_GETPID_H
-#define FRONTEND_GETPID_H
-
-#include "frontend_common.h"
-#include "pid_common.h"
-
-/* Get a specified PID.
- *
- * Example:
- *
- * struct frontend_pid_data pid_data;
- * pid_data.pid = PITCH;
- * if (frontend_getpid(conn, &pid_data)) {
- * 		error
- * } else {
- * 		pid_data.p, pid_data.i, and pid_data.d are filled
- * }
- *
- * Returns 0 on success, 1 on error
- */
-int frontend_getpid(
-		struct backend_conn * conn,
-		struct frontend_pid_data * pid_data);
-
-
-#endif
diff --git a/groundStation/src/frontend/frontend_setpid.c b/groundStation/src/frontend/frontend_setpid.c
deleted file mode 100644
index 58bf4109c..000000000
--- a/groundStation/src/frontend/frontend_setpid.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <err.h>
-#include <stdio.h>
-
-#include "frontend_setpid.h"
-#include "pid_common.h"
-#include "frontend_common.h"
-
-int frontend_setpid(
-		struct backend_conn * conn,
-		struct frontend_pid_data * pid_data,
-		int mask)
-{
-	if (conn == NULL) {
-		return -1;
-	}
-
-	char * controller;
-	switch (pid_data->controller) {
-		case PID_PITCH:
-			controller = "pitch";
-			break;
-		case PID_ROLL:
-			controller = "roll";
-			break;
-		case PID_YAW:
-			controller = "yaw";
-			break;
-		case PID_PITCH_RATE:
-			controller = "pitchrate";
-			break;
-		case PID_ROLL_RATE:
-			controller = "rollrate";
-			break;
-		case PID_YAW_RATE:
-			controller = "yawrate";
-			break;
-		case PID_HEIGHT:
-			controller = "height";
-			break;
-		case PID_LAT:
-			controller = "lat";
-			break;
-		case PID_LONG:
-			controller = "long";
-			break;
-		default:
-			warnx("Unsupported PID constant");
-			return -1;
-	}
-
-	char buffer[2048];
-	/* Set the P, I, and D */
-	if (mask & SET_P) {
-		if (snprintf(buffer, 2048,
-					"set%sp %f\n", 
-					controller, 
-					pid_data->p) >= 2048) {
-			errx(0, "Buffer to small to format!");
-		}
-		ucart_backendWrite(conn, buffer);
-	}
-	if (mask & SET_I) {
-		if (snprintf(buffer, 2048,
-					"set%si %f\n", 
-					controller, 
-					pid_data->i) >= 2048) {
-			errx(0, "Buffer to small to format!");
-		}
-		ucart_backendWrite(conn, buffer);
-	}
-	if (mask & SET_D) {
-		if (snprintf(buffer, 2048,
-					"set%sd %f\n", 
-					controller, 
-					pid_data->d) >= 2048) {
-			errx(0, "Buffer to small to format!");
-		}
-		ucart_backendWrite(conn, buffer);
-	}
-
-	return 0;
-}
diff --git a/groundStation/src/frontend/frontend_setpid.h b/groundStation/src/frontend/frontend_setpid.h
deleted file mode 100644
index f1deb5d3d..000000000
--- a/groundStation/src/frontend/frontend_setpid.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _FRONTEND_SETPID_H
-#define _FRONTEND_SETPID_H
-
-#include "pid_common.h"
-#include "frontend_common.h"
-
-int frontend_setpid(
-		struct backend_conn * conn,
-		struct frontend_pid_data * pid_data,
-		int mask);
-
-#define SET_P 0x01
-#define SET_I 0x02
-#define SET_D 0x04
-#define SET_ALL (SET_P | SET_I | SET_D)
-
-#endif
diff --git a/groundStation/src/frontend/frontend_tracker.c b/groundStation/src/frontend/frontend_tracker.c
deleted file mode 100644
index 94597b63c..000000000
--- a/groundStation/src/frontend/frontend_tracker.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <err.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "frontend_tracker.h"
-
-#define MAGIC "TRACKERDATA"
-
-int frontend_track(
-		struct backend_conn * conn,
-		struct frontend_tracker_data * data)
-{
-	ucart_backendWrite(conn, MAGIC "\n");
-
-	char * line;
-	for (;;) {
-		line = ucart_backendGetline(conn);
-		if (line == NULL) {
-			warnx("Line not returned from backend");
-			return 1;
-		}
-
-		if (strncmp(line, MAGIC, strlen(MAGIC)) == 0) {
-			break;
-		}
-	}
-
-	if (strncmp(line, MAGIC " ERROR", strlen(MAGIC " ERROR")) == 0) {
-		warnx("Backend returned an error: %s", strstr(line, "ERROR"));
-		return 1;
-	}
-
-	/* Line format: Height Lat Long Pitch Roll Yaw */
-	sscanf(line, MAGIC " %lf %lf %lf %lf %lf %lf ",
-			&data->height,
-			&data->lateral,
-			&data->longitudinal,
-			&data->pitch,
-			&data->roll,
-			&data->yaw);
-	return 0;
-}
diff --git a/groundStation/src/frontend/frontend_tracker.h b/groundStation/src/frontend/frontend_tracker.h
deleted file mode 100644
index 5fa82487c..000000000
--- a/groundStation/src/frontend/frontend_tracker.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _FRONTEND_TRACKER_H
-#define _FRONTEND_TRACKER_H
-
-#include "frontend_common.h"
-
-/* Struct containing pos/att data */
-struct frontend_tracker_data {
-		double height;
-		double lateral;
-		double longitudinal;
-		double pitch;
-		double roll;
-		double yaw;
-};
-
-/* Get pos/att data from the tracking system
- *
- * conn: IN Connection to quad
- * data: OUT Data is written to this struct
- *
- * Returns 0 on success, nonzero on error
- *
- */
-int frontend_track(struct backend_conn * conn, 
-		struct frontend_tracker_data *data);
-
-#endif
diff --git a/groundStation/src/frontend/pid_common.h b/groundStation/src/frontend/pid_common.h
deleted file mode 100644
index c40c4fb42..000000000
--- a/groundStation/src/frontend/pid_common.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef PID_COMMON_H
-#define PID_COMMON_H
-
-enum pid_controller {
-	PID_PITCH,
-	PID_ROLL,
-	PID_YAW,
-	PID_PITCH_RATE,
-	PID_ROLL_RATE,
-	PID_YAW_RATE,
-	PID_HEIGHT, /* Z */
-	PID_LAT, /* X */
-	PID_LONG, /* Y */
-	PID_NUM_PIDS
-};
-
-struct frontend_pid_data {
-	enum pid_controller controller;
-
-	float p;
-	float i;
-	float d;
-};
-
-
-#endif
diff --git a/groundStation/src/vrpn b/groundStation/src/vrpn
deleted file mode 160000
index 99c54dbef..000000000
--- a/groundStation/src/vrpn
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 99c54dbefe04897cc7c146101a126f62c0e65f97
-- 
GitLab