From 2731ff242cc6bb5cd4a1a5b61625c28fdfb7441f Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@helsinki.at>
Date: Tue, 24 Feb 2015 19:48:36 +0100
Subject: switch to new avr-utils method


diff --git a/.gitignore b/.gitignore
index da272bf..492e80a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-contrib/LUFA-*
+contrib/avr-utils
+contrib/.spreadavr.prepared
 hardware/lib/*.bak
 hardware/lib/*.bck
 hardware/lib/*.dcm
diff --git a/contrib/Makefile b/contrib/Makefile
index 858cc90..2836c60 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -1,33 +1,30 @@
 ##
-##  spreadspace avr utils
+##  rhmidi
 ##
+##  Copyright (C) 2015 Christian Pointner <equinox@helsinki.at>
 ##
-##  Copyright (C) 2013 Christian Pointner <equinox@spreadspace.org>
-##                     Othmar Gsenger <otti@gsenger.com>
+##  This file is part of rhmidi.
 ##
-##  This file is part of spreadspace avr utils.
-##
-##  spreadspace avr utils is free software: you can redistribute it and/or modify
+##  rhmidi is free software: you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
 ##  the Free Software Foundation, either version 3 of the License, or
 ##  any later version.
 ##
-##  spreadspace avr utils is distributed in the hope that it will be useful,
+##  rhmidi is distributed in the hope that it will be useful,
 ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
 ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
+##  along with rhmidi. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-LUFA_VERSION := 120219
-
-all: download-lufa
-
-download-lufa: LUFA-${LUFA_VERSION}.zip
+all: update-spreadavr
 
-LUFA-${LUFA_VERSION}.zip:
-	wget "http://lufa-lib.googlecode.com/files/$@" -O "$@"
-	unzip $@
+.spreadavr.prepared:
+	git clone git://git.spreadspace.org/avr-utils.git
+	touch $@
 
+update-spreadavr: .spreadavr.prepared
+	cd avr-utils/; git pull
+	$(MAKE) -C avr-utils/contrib/
diff --git a/software/defines.mk b/software/defines.mk
deleted file mode 100644
index 9af0179..0000000
--- a/software/defines.mk
+++ /dev/null
@@ -1,228 +0,0 @@
-##
-##  spreadspace avr utils
-##
-##
-##  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
-##
-##  This file is part of spreadspace avr utils.
-##
-##  spreadspace avr utils is free software: you can redistribute it and/or modify
-##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation, either version 3 of the License, or
-##  any later version.
-##
-##  spreadspace avr utils is distributed in the hope that it will be useful,
-##  but WITHOUT ANY WARRANTY; without even the implied warranty of
-##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-##  GNU General Public License for more details.
-##
-##  You should have received a copy of the GNU General Public License
-##  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
-##
-
-ifeq ($(BOARD_TYPE),teensy1)
-  MCU := at90usb162
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := teensy
-  LUFA_BOARD = TEENSY
-endif
-ifeq ($(BOARD_TYPE),teensy2)
-  MCU := atmega32u4
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := teensy
-  LUFA_BOARD = TEENSY2
-endif
-ifeq ($(BOARD_TYPE),teensy1pp)
-  MCU := at90usb646
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := teensy
-  LUFA_BOARD = TEENSY
-endif
-ifeq ($(BOARD_TYPE),teensy2pp)
-  MCU := at90usb1286
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := teensy
-  LUFA_BOARD = TEENSY2
-endif
-ifeq ($(BOARD_TYPE),minimus)
-  MCU := at90usb162
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = MINIMUS
-  RESET_FUNC := ../tools/reset_minimus
-  RESET_PARAM = "03eb:2ffa"
-endif
-ifeq ($(BOARD_TYPE),minimus32)
-  MCU := atmega32u2
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = MINIMUS
-  RESET_FUNC := ../tools/reset_minimus
-  RESET_PARAM = "03eb:2ff0"
-endif
-ifeq ($(BOARD_TYPE),hhd70dongle)
-  MCU := atmega32u4
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = NONE
-endif
-ifeq ($(BOARD_TYPE),rda1846dongle)
-  MCU := atmega32u4
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = NONE
-endif
-ifeq ($(BOARD_TYPE),culV3)
-  MCU := atmega32u4
-  ARCH = AVR8
-  F_CPU := 8000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = CULV3
-endif
-ifeq ($(BOARD_TYPE),slowpandongle1)
-  MCU := at90usb162
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = NONE
-endif
-ifeq ($(BOARD_TYPE),slowpandongle2)
-  MCU := atmega32u4
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = NONE
-endif
-ifeq ($(BOARD_TYPE),teenstep)
-  MCU := atmega32u4
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = NONE
-endif
-ifeq ($(BOARD_TYPE),rhmixxx)
-  MCU := at90usb1286
-  ARCH = AVR8
-  F_CPU := 16000000
-  F_USB = $(F_CPU)
-  PROG := DFU
-  LUFA_BOARD = NONE
-endif
-ifeq ($(BOARD_TYPE),arduinoUno)
-  MCU := atmega328p
-  ARCH = AVR8
-  F_CPU := 16000000
-  PROG := avrdude
-  UPLOAD_RATE := 57600
-  PROG_TYPE := stk500v1
-  AVRDUDE_PORT := /dev/ttyUSB0
-  RESET_FUNC := ../tools/reset_arduino
-  RESET_PARAM = $(AVRDUDE_PORT)
-endif
-ifeq ($(BOARD_TYPE),arduino2009v2)
-  MCU := atmega328p
-  ARCH = AVR8
-  F_CPU := 16000000
-  PROG := avrdude
-  UPLOAD_RATE := 57600
-  PROG_TYPE := stk500v1
-  AVRDUDE_PORT := /dev/ttyUSB0
-  RESET_FUNC := ../tools/reset_arduino
-  RESET_PARAM = $(AVRDUDE_PORT)
-endif
-ifeq ($(BOARD_TYPE),arduino2009)
-  MCU := atmega168
-  ARCH = AVR8
-  F_CPU := 16000000
-  PROG := avrdude
-  UPLOAD_RATE := 19200
-  PROG_TYPE := stk500v1
-  AVRDUDE_PORT := /dev/ttyUSB0
-  RESET_FUNC := ../tools/reset_arduino
-  RESET_PARAM = $(AVRDUDE_PORT)
-endif
-ifeq ($(BOARD_TYPE),arduino10000)
-  MCU := atmega168
-  ARCH = AVR8
-  F_CPU := 16000000
-  PROG := avrdude
-  UPLOAD_RATE := 19200
-  PROG_TYPE := stk500v1
-  AVRDUDE_PORT := /dev/ttyUSB0
-  RESET_FUNC := ../tools/reset_arduino
-  RESET_PARAM = $(AVRDUDE_PORT)
-endif
-ifeq ($(BOARD_TYPE),arduinoNG)
-  MCU := atmega8
-  ARCH = AVR8
-  F_CPU := 16000000
-  PROG := avrdude
-  UPLOAD_RATE := 19200
-  PROG_TYPE := stk500v1
-  AVRDUDE_PORT := /dev/ttyUSB0
-  RESET_FUNC := ../tools/reset_dummy
-endif
-ifeq ($(BOARD_TYPE),AvrNetIo)
-  MCU := atmega32
-  ARCH = AVR8
-  F_CPU := 16000000
-  PROG := avrdude
-  UPLOAD_RATE := 19200
-  PROG_TYPE := stk500v2
-  AVRDUDE_PORT := /dev/ttyS0
-endif
-
-CC = avr-gcc
-OBJCOPY = avr-objcopy
-AR = avr-ar rcs
-SIZE = avr-size
-
-LIB_DIR = ../lib
-
-DFU = dfu-programmer
-teensy = teensy_loader_cli
-avrdude = avrdude
-
-## Options common to compile, link and assembly rules
-COMMON = -mmcu=$(MCU)
-
-## Compile options common for all C compilation units.
-CFLAGS = $(COMMON) 
-CFLAGS += -O2
-CFLAGS += -funsigned-char
-CFLAGS += -funsigned-bitfields
-CFLAGS += -ffunction-sections
-CFLAGS += -fpack-struct
-CFLAGS += -fshort-enums
-CFLAGS += -Wall
-CFLAGS += -Wstrict-prototypes
-CFLAGS += -I$(LIB_DIR)
-CFLAGS += -DF_CPU=$(F_CPU)UL
-CFLAGS += -D__BOARD_$(BOARD_TYPE)__
-CFLAGS += -DARCH=ARCH_$(ARCH)
-CFLAGS += -std=c99
-
-
-## Linker flags
-LDFLAGS = $(COMMON)
-LDFLAGS += 
diff --git a/software/include.mk b/software/include.mk
deleted file mode 100644
index c2eb585..0000000
--- a/software/include.mk
+++ /dev/null
@@ -1,162 +0,0 @@
-##
-##  spreadspace avr utils
-##
-##
-##  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
-##
-##  This file is part of spreadspace avr utils.
-##
-##  spreadspace avr utils is free software: you can redistribute it and/or modify
-##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation, either version 3 of the License, or
-##  any later version.
-##
-##  spreadspace avr utils is distributed in the hope that it will be useful,
-##  but WITHOUT ANY WARRANTY; without even the implied warranty of
-##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-##  GNU General Public License for more details.
-##
-##  You should have received a copy of the GNU General Public License
-##  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
-##
-
-include ../defines.mk
-
-## project-specific objects
-SRC := $(OBJ:%.o=%.c)
-DEP := $(SRC:%.c=%.d)
-OBJ_LIB := $(LIBS:%=lib-%.o)
-SRC_LIB := $(LIBS:%=$(LIB_DIR)/%.c)
-DEP_LIB := $(LIBS:%=lib-%.d)
-
-.PHONY: prepare clean clean-external distclean clean-lufa program erase flash reset run
-
-ELFFILE := $(NAME).elf
-HEXFILE := $(NAME).hex
-
-all: prepare $(HEXFILE)
-
-
-## external Libs
-LDFLAGS += -L./
-
-ifdef LUFA_PATH
-CFLAGS += -I$(LUFA_PATH)
-CFLAGS += -DF_USB=$(F_USB)UL
-CFLAGS += -DBOARD=BOARD_$(LUFA_BOARD)
-CFLAGS += $(LUFA_OPTS)
-endif
-
-prepare: $(EXTERNAL_LIBS:%=build-%)
-clean-external: $(EXTERNAL_LIBS:%=clean-%)
-
-export
-build-lufa: liblufa.a
-
-liblufa.a: Makefile
-	@echo "building external LUFA lib ($(LUFA_PATH))"
-	make -f ../lufa.mk liblufa.a
-	make -f ../lufa.mk clean
-
-clean-lufa:
-	@echo "cleaning external LUFA lib ($(LUFA_PATH))"
-	make -f ../lufa.mk clean
-	rm -f liblufa.a
-
-
-## project-specific objects
-lib-%.d: $(LIB_DIR)/%.c Makefile
-	@set -e; rm -f $@; \
-  $(CC) -MM $(CFLAGS) $< > $@.$$$$; \
-  sed 's,\($*\)\.o[ :]*,lib-\1.o $@ : ,g' < $@.$$$$ > $@; \
-  rm -f $@.$$$$; echo '(re)building $@'
-
-%.d: %.c Makefile
-	@set -e; rm -f $@; \
-  $(CC) -MM $(CFLAGS) $< > $@.$$$$; \
-  sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
-  rm -f $@.$$$$; echo '(re)building $@'
-
-ifneq ($(MAKECMDGOALS),distclean)
--include $(DEP)
--include $(DEP_LIB)
-endif
-
-lib-%.o: $(LIB_DIR)/%.c Makefile
-	$(CC) $(CFLAGS) -c $< -o $@
-
-%.o: %.c Makefile
-	$(CC) $(CFLAGS) -c $< -o $@
-
-$(ELFFILE): $(OBJ) $(OBJ_LIB) $(EXTERNAL_LIBS:%=lib%.a)
-	$(CC) $(LDFLAGS) $(OBJ) $(OBJ_LIB) $(EXTERNAL_LIBS:%=-l%) -o $@
-	$(SIZE) $@
-	@echo ""
-
-$(HEXFILE): $(ELFFILE)
-	$(OBJCOPY) -O ihex -R .eeprom -R .fuse -R .lock -R .signature $< $@
-
-clean: $(CLEAN_TARGETS)
-	rm -f *.o
-	rm -f *.d
-	rm -f *.d.*
-	rm -f $(ELFFILE)
-	rm -f $(HEXFILE)
-
-distclean: clean-external clean
-
-### DFU-Programmer
-define DFU/erase
-	$(DFU) $(MCU) erase || true
-endef
-
-define DFU/flash
-	$(DFU) $(MCU) flash $1
-endef
-
-define DFU/run
-	$(DFU) $(MCU) start
-endef
-
-### teensy-loader
-define teensy/erase
-endef
-
-define teensy/flash
-	$(teensy) -mmcu=$(MCU) -w -v $1
-endef
-
-define teensy/run
-endef
-
-### avrdude
-define avrdude/erase
-endef
-
-define avrdude/flash
-	$(avrdude) -V -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(PROG_TYPE) -b $(UPLOAD_RATE) -U flash:w:$1
-endef
-
-define avrdude/run
-endef
-
-### Program Targets
-program: reset erase flash run
-
-erase:
-	$(call $(PROG)/$@,)
-
-flash: $(HEXFILE)
-	$(call $(PROG)/$@,$(HEXFILE))
-
-run:
-	$(call $(PROG)/$@,)
-
-reset:
-	@if [ -n "$(RESET_FUNC)" ]; then    \
-    if [ -x "$(RESET_FUNC)" ]; then   \
-      eval $(RESET_FUNC) $(RESET_PARAM);   \
-    else                              \
-      echo "WARNING: ignoring non-existing or non-executable reset script"; \
-    fi                                \
-  fi
diff --git a/software/lib/anyio.c b/software/lib/anyio.c
deleted file mode 100644
index 2aae54e..0000000
--- a/software/lib/anyio.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *                     Othmar Gsenger <otti@wirdorange.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdio.h>
-
-#include "anyio.h"
-
-#include <LUFA/Drivers/USB/USB.h>
-#include "lufa-descriptor-usbserial.h"
-#include "LUFA/Drivers/Peripheral/Serial.h"
-
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
-  {
-    .Config =
-      {
-        .ControlInterfaceNumber         = 0,
-
-        .DataINEndpointNumber           = CDC_TX_EPNUM,
-        .DataINEndpointSize             = CDC_TXRX_EPSIZE,
-        .DataINEndpointDoubleBank       = false,
-
-        .DataOUTEndpointNumber          = CDC_RX_EPNUM,
-        .DataOUTEndpointSize            = CDC_TXRX_EPSIZE,
-        .DataOUTEndpointDoubleBank      = false,
-
-        .NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
-        .NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
-        .NotificationEndpointDoubleBank = false,
-      },
-  };
-
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-  CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
-}
-
-void EVENT_USB_Device_ControlRequest(void)
-{
-  CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
-}
-/* end LUFA CDC-ACM specific definitions*/
-
-static FILE usb_stream;
-static FILE serial_stream;
-
-void anyio_init(const uint32_t baudrate, const uint8_t doublespeed)
-{
-  Serial_Init(baudrate, doublespeed);
-  Serial_CreateStream(&serial_stream);
-  stdin = stdout = stderr = &serial_stream;
-
-  USB_Init();
-  CDC_Device_CreateStream(&VirtualSerial_CDC_Interface,&usb_stream);
-}
-
-void anyio_task(void)
-{
-#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
-  if(USB_DeviceState == DEVICE_STATE_Unattached && USB_VBUS_GetStatus()) {
-    USB_Disable();
-    USB_Init();
-  }
-#endif
-
-  CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
-  USB_USBTask();
-}
-
-int16_t anyio_bytes_received(void)
-{
-  if(stdin == &usb_stream)
-    return CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
-  else
-    return (int16_t)Serial_IsCharReceived();
-}
-
-void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
-{
-  if(CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR)
-    stdin = stdout = stderr = &usb_stream;
-  else
-    stdin = stdout = stderr = &serial_stream;
-}
-
-void EVENT_USB_Device_Disconnect(void)
-{
-  stdin = stdout = stderr = &serial_stream;
-}
diff --git a/software/lib/anyio.h b/software/lib/anyio.h
deleted file mode 100644
index 2cf4ae1..0000000
--- a/software/lib/anyio.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *                     Othmar Gsenger <otti@wirdorange.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef SPREADAVR_anyio_h_INCLUDED
-#define SPREADAVR_anyio_h_INCLUDED
-
-#include <stdint.h>
-
-void anyio_init(const uint32_t baudrate, const uint8_t doublespeed);
-void anyio_task(void);
-int16_t anyio_bytes_received(void);
-
-#endif
diff --git a/software/lib/ds1820.c b/software/lib/ds1820.c
deleted file mode 100644
index 4619498..0000000
--- a/software/lib/ds1820.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *  spreadspace avr utils - usb-1wire example
- *
- *
- *  Copyright (C) 2013-2014 Bernhard Tittelbach <xro@realraum.at>
- *  based on code from:
- *   http://www.pjrc.com/teensy/td_libs_OneWire.html
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "ds1820.h"
-#include "onewire.h"
-#include "util/delay.h"
-
-uint8_t owi_ds1820_addr_[MAX_OWI_DEVICES][8];
-uint8_t num_ds1820_found_;
-
-uint8_t ds1820_discover(void)
-{
-    uint8_t d=0;
-    num_ds1820_found_ = 0;
-    if (! owi_reset()) //if no devices on bus, return now
-        return 0;
-    owi_reset_search();
-    _delay_ms(250);
-
-    //Search only for DS1820 temp sensors
-    owi_target_search(DS1820_FAMILY_ID);
-
-    while ( owi_search(owi_ds1820_addr_[ d ]))
-    {
-        d++;
-        if ( d >= MAX_OWI_DEVICES)
-            break;
-    }
-    num_ds1820_found_ = d;
-    return num_ds1820_found_;
-}
-
-void ds1820_set_resolution(uint8_t d, uint8_t bits)
-{
-    uint8_t resolution;
-    if (d >= num_ds1820_found_ || bits < 9 || bits > 12)
-        return;
-
-    owi_reset();
-    owi_select(owi_ds1820_addr_[d]);
-
-    owi_write(DS1820_WRITE_SCRATCHPAD, 0);
-    owi_write(0xFF, 0);
-    owi_write(0x7F, 0);
-
-    resolution = (bits - 9) << 5;
-    owi_write(resolution | 0x1F, 0);
-}
-
-void ds1820_start_measuring(uint8_t d)
-{
-    owi_reset();
-    owi_select(owi_ds1820_addr_[d]);
-    owi_write(DS1820_START_CONVERSION, 1);
-}
-
-uint16_t ds1820_get_conversion_time_ms(uint8_t bits)
-{
-    switch (bits)
-    {
-        case 9: return DS1820_TCONV_MS_9BITS;
-        case 10: return DS1820_TCONV_MS_10BITS;
-        case 11: return DS1820_TCONV_MS_11BITS;
-        default: return DS1820_TCONV_MS_12BITS;
-    }
-}
-
-void ds1820_wait_conversion_time(uint8_t bits)
-{
-    switch (bits)
-    {
-        case 9: _delay_ms(DS1820_TCONV_MS_9BITS); break;
-        case 10: _delay_ms(DS1820_TCONV_MS_10BITS); break;
-        case 11: _delay_ms(DS1820_TCONV_MS_11BITS); break;
-        default: _delay_ms(DS1820_TCONV_MS_12BITS); break;
-    }
-}
-
-int16_t ds1820_read_temperature(uint8_t d)
-{
-    uint8_t data[9];
-    int16_t raw = 0;
-    uint8_t type_s=0;
-    uint8_t cfg, i;
-
-    owi_reset();
-    owi_select(owi_ds1820_addr_[d]);
-    owi_write(DS1820_READ_SCRATCHPAD, 0);         // Read Scratchpad
-    for (i = 0; i < 9; i++) {          // we need 9 bytes
-        data[i] = owi_read();
-    }
-    #if (ONEWIRE_CRC == 1)
-    uint8_t crc_result = owi_crc8(data,8);
-    if (crc_result != data[8])
-        return DS1820_ERROR;
-    #endif
-
-    // the first ROM byte indicates which chip
-    switch (owi_ds1820_addr_[d][0])
-    {
-        case 0x10:
-            type_s = 1;
-            break;
-        case 0x28:
-        case 0x22:
-            type_s = 0;
-            break;
-        default:
-            break;
-    }
-
-    // Convert the data to actual temperature
-    // because the result is a 16 bit signed integer, it should
-    // be stored to an "int16_t" type, which is always 16 bits
-    // even when compiled on a 32 bit processor.
-    raw = (data[1] << 8) | data[0];
-    if (type_s)
-    {
-        raw = raw << 3; // 9 bit resolution default
-        if (data[7] == 0x10) {
-            // "count remain" gives full 12 bit resolution
-            raw = (raw & 0xFFF0) + 12 - data[6];
-        }
-    } else {
-        cfg = (data[4] & 0x60);
-        // at lower res, the low bits are undefined, so let's zero them
-        if (cfg == DS1820_RESOLUTION_9BITS)
-            raw = raw & ~7;  // 9 bit resolution, 93.75 ms
-        else if (cfg == DS1820_RESOLUTION_10BITS)
-            raw = raw & ~3; // 10 bit res, 187.5 ms
-        else if (cfg == DS1820_RESOLUTION_11BITS)
-            raw = raw & ~1; // 11 bit res, 375 ms
-    //// default is 12 bit resolution, 750 ms conversion time
-    }
-
-    return raw;
-}
-
-float ds1820_raw_temp_to_celsius(int16_t t)
-{
-    if ( t == DS1820_ERROR )
-        return DS1820_ERROR;
-    else
-        return ((float) t) / 16.0;
-}
diff --git a/software/lib/ds1820.h b/software/lib/ds1820.h
deleted file mode 100644
index 64a0089..0000000
--- a/software/lib/ds1820.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *  spreadspace avr utils - usb-1wire example
- *
- *
- *  Copyright (C) 2013-2014 Bernhard Tittelbach <xro@realraum.at>
- *  based on code from:
- *   http://www.pjrc.com/teensy/td_libs_OneWire.html
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __DS1820__
-#define __DS1820__
-
-#include	<stdint.h>
-
-#define DS1820_FAMILY_ID                0x10
-#define DS1820_START_CONVERSION         0x44
-#define DS1820_READ_SCRATCHPAD          0xbe
-#define DS1820_WRITE_SCRATCHPAD          0x4e
-#define DS1820_ERROR                    -1000   // Return code. Outside temperature range.
-#define DS1820_RESOLUTION_9BITS  0x00
-#define DS1820_RESOLUTION_10BITS  0x20
-#define DS1820_RESOLUTION_11BITS  0x40
-#define DS1820_RESOLUTION_12BITS  0x60
-#define DS1820_TCONV_MS_9BITS  96
-#define DS1820_TCONV_MS_10BITS  195
-#define DS1820_TCONV_MS_11BITS  390
-#define DS1820_TCONV_MS_12BITS  800
-
-#define DS2890_FAMILY_ID                0x2c
-#define DS2890_WRITE_CONTROL_REGISTER   0X55
-#define DS2890_RELEASE_CODE             0x96
-#define DS2890_WRITE_POSITION           0x0f
-
-#ifndef MAX_OWI_DEVICES
-#define MAX_OWI_DEVICES 8
-#endif
-
-uint8_t ds1820_discover(void);
-void ds1820_set_resolution(uint8_t d, uint8_t bits);
-void ds1820_start_measuring(uint8_t d);
-uint16_t ds1820_get_conversion_time_ms(uint8_t bits);
-void ds1820_wait_conversion_time(uint8_t bits);
-int16_t ds1820_read_temperature(uint8_t d);
-float ds1820_raw_temp_to_celsius(int16_t t);
-
-#endif
\ No newline at end of file
diff --git a/software/lib/led.c b/software/lib/led.c
deleted file mode 100644
index 4f3aec2..0000000
--- a/software/lib/led.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <avr/io.h>
-
-#include "led.h"
-
-#if defined(__BOARD_minimus__) || defined(__BOARD_minimus32__)
-#define NUM_LEDS 2
-#elif defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_teensy2__) || defined(__BOARD_teensy2pp__) || \
-      defined(__BOARD_arduinoNG__) ||  defined(__BOARD_arduino2009v2__) || defined(__BOARD_arduino2009__) || defined(__BOARD_arduino10000__) || \
-      defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) || \
-      defined(__BOARD_slowpandongle1__) || defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__) || \
-      defined(__BOARD_rhmixxx__)
-#define NUM_LEDS 1
-#else
-#define NUM_LEDS 0
-#endif
-
-#if defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_minimus__) || defined(__BOARD_minimus32__) || \
-    defined(__BOARD_rhmixxx__)
-#define LED_DIR 0
-#else
-#define LED_DIR 1
-#endif
-
-#if defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_teensy2__) || defined(__BOARD_teensy2pp__) || \
-    defined(__BOARD_teenstep__)
-#define LED_PORT PORTD
-#define LED_DDR DDRD
-#define LED_PINNUM 6
-#endif
-
-#if defined(__BOARD_minimus__) || defined(__BOARD_minimus32__)
-#define LED_PORT PORTD
-#define LED_DDR DDRD
-#define LED_PINNUM 5
-
-#define LED2_PORT PORTD
-#define LED2_DDR DDRD
-#define LED2_PINNUM 6
-#endif
-
-#if defined(__BOARD_slowpandongle2__) || defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__)
-#define LED_PORT PORTE
-#define LED_DDR DDRE
-#define LED_PINNUM 6
-#endif
-
-#if defined(__BOARD_slowpandongle1__)
-#define LED_PORT PORTC
-#define LED_DDR DDRC
-#define LED_PINNUM 2
-#endif
-
-#if defined(__BOARD_arduino2009v2__) || defined(__BOARD_arduino2009__) || defined(__BOARD_arduino10000__) || defined(__BOARD_arduinoNG__)
-#define LED_PORT PORTB
-#define LED_DDR DDRB
-#define LED_PINNUM 5
-#endif
-
-#if defined(__BOARD_rhmixxx__)
-#define LED_PORT PORTE
-#define LED_DDR DDRE
-#define LED_PINNUM 0
-#endif
-
-void led_init(void)
-{
-#if NUM_LEDS >= 1
-  led_off();
-  LED_DDR = 1<<LED_PINNUM;
-#if NUM_LEDS >= 2
-  LED2_DDR |= 1<<LED2_PINNUM;
-#endif
-#endif
-}
-
-void led_on(void)
-{
-#if NUM_LEDS >= 1
-#if LED_DIR == 1
-  LED_PORT |= 1<<LED_PINNUM;
-#else
-  LED_PORT &= ~(1<<LED_PINNUM);
-#endif
-#endif
-}
-
-void led_off(void)
-{
-#if NUM_LEDS >= 1
-#if LED_DIR == 1
-  LED_PORT &= ~(1<<LED_PINNUM);
-#else
-  LED_PORT |= 1<<LED_PINNUM;
-#endif
-#endif
-}
-
-void led_toggle(void)
-{
-#if NUM_LEDS >= 1
-  LED_PORT ^= 1<<LED_PINNUM;
-#endif
-}
-
-
-void led2_on(void)
-{
-#if NUM_LEDS >= 2
-#if LED_DIR == 1
-  LED2_PORT |= 1<<LED2_PINNUM;
-#else
-  LED2_PORT &= ~(1<<LED2_PINNUM);
-#endif
-#endif
-}
-
-void led2_off(void)
-{
-#if NUM_LEDS >= 2
-#if LED_DIR == 1
-  LED2_PORT &= ~(1<<LED2_PINNUM);
-#else
-  LED2_PORT |= 1<<LED2_PINNUM;
-#endif
-#endif
-}
-
-void led2_toggle(void)
-{
-#if NUM_LEDS >= 2
-  LED2_PORT ^= 1<<LED2_PINNUM;
-#endif
-}
diff --git a/software/lib/led.h b/software/lib/led.h
deleted file mode 100644
index 0c78193..0000000
--- a/software/lib/led.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef SPREADAVR_led_h_INCLUDED
-#define SPREADAVR_led_h_INCLUDED
-
-void led_init(void);
-
-void led_on(void);
-void led_off(void);
-void led_toggle(void);
-
-void led2_on(void);
-void led2_off(void);
-void led2_toggle(void);
-
-#endif
diff --git a/software/lib/lufa-descriptor-keyboardmouse.c b/software/lib/lufa-descriptor-keyboardmouse.c
deleted file mode 100644
index acc319b..0000000
--- a/software/lib/lufa-descriptor-keyboardmouse.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-keyboardmouse.h"
-
-/** HID class report descriptor. This is a special descriptor constructed with values from the
- *  USBIF HID class specification to describe the reports and capabilities of the HID device. This
- *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)
- *  the device will send, and what it may be sent back from the host. Refer to the HID specification for
- *  more details on HID report descriptors.
- *
- *  This descriptor describes the mouse HID interface's report structure.
- */
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
-{
-	/* Use the HID class driver's standard Mouse report.
-	 *   Min X/Y Axis values: -1
-	 *   Max X/Y Axis values:  1
-	 *   Min physical X/Y Axis values (used to determine resolution): -1
-	 *   Max physical X/Y Axis values (used to determine resolution):  1
-	 *   Buttons: 3
-	 *   Absolute screen coordinates: false
-	 */
-	HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false)
-};
-
-/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
-{
-	/* Use the HID class driver's standard Keyboard report.
-	 *   Max simultaneous keys: 6
-	 */
-	HID_DESCRIPTOR_KEYBOARD(6)
-};
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-	.USBSpecification       = VERSION_BCD(01.10),
-	.Class                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x204D,
-	.ReleaseNumber          = VERSION_BCD(00.01),
-
-	.ManufacturerStrIndex   = 0x01,
-	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-	.Config =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
-			.TotalInterfaces        = 2,
-
-			.ConfigurationNumber    = 1,
-			.ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-			.ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-		},
-
-	.HID1_KeyboardInterface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 0x00,
-			.AlternateSetting       = 0x00,
-
-			.TotalEndpoints         = 1,
-
-			.Class                  = HID_CSCP_HIDClass,
-			.SubClass               = HID_CSCP_BootSubclass,
-			.Protocol               = HID_CSCP_KeyboardBootProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.HID1_KeyboardHID =
-		{
-			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
-			.HIDSpec                = VERSION_BCD(01.11),
-			.CountryCode            = 0x00,
-			.TotalReportDescriptors = 1,
-			.HIDReportType          = HID_DTYPE_Report,
-			.HIDReportLength        = sizeof(KeyboardReport)
-		},
-
-	.HID1_ReportINEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM),
-			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = HID_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		},
-
-	.HID2_MouseInterface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 0x01,
-			.AlternateSetting       = 0x00,
-
-			.TotalEndpoints         = 1,
-
-			.Class                  = HID_CSCP_HIDClass,
-			.SubClass               = HID_CSCP_BootSubclass,
-			.Protocol               = HID_CSCP_MouseBootProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.HID2_MouseHID =
-		{
-			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
-			.HIDSpec                = VERSION_BCD(01.11),
-			.CountryCode            = 0x00,
-			.TotalReportDescriptors = 1,
-			.HIDReportType          = HID_DTYPE_Report,
-			.HIDReportLength        = sizeof(MouseReport)
-		},
-
-	.HID2_ReportINEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM),
-			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = HID_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		}
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
-	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
-	.UnicodeString          = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
-	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
-  .UnicodeString          = L"Dean Camera"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
-	.Header                 = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},
-	.UnicodeString          = L"LUFA Mouse and Keyboard Demo"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t  DescriptorType   = (wValue >> 8);
-	const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	switch (DescriptorType)
-	{
-		case DTYPE_Device:
-			Address = &DeviceDescriptor;
-			Size    = sizeof(USB_Descriptor_Device_t);
-			break;
-		case DTYPE_Configuration:
-			Address = &ConfigurationDescriptor;
-			Size    = sizeof(USB_Descriptor_Configuration_t);
-			break;
-		case DTYPE_String:
-			switch (DescriptorNumber)
-			{
-				case 0x00:
-					Address = &LanguageString;
-					Size    = pgm_read_byte(&LanguageString.Header.Size);
-					break;
-				case 0x01:
-					Address = &ManufacturerString;
-					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-					break;
-				case 0x02:
-					Address = &ProductString;
-					Size    = pgm_read_byte(&ProductString.Header.Size);
-					break;
-			}
-
-			break;
-		case HID_DTYPE_HID:
-			if (!(wIndex))
-			{
-				Address = &ConfigurationDescriptor.HID1_KeyboardHID;
-				Size    = sizeof(USB_HID_Descriptor_HID_t);
-			}
-			else
-			{
-				Address = &ConfigurationDescriptor.HID2_MouseHID;
-				Size    = sizeof(USB_HID_Descriptor_HID_t);
-			}
-
-			break;
-		case HID_DTYPE_Report:
-			if (!(wIndex))
-			{
-				Address = &KeyboardReport;
-				Size    = sizeof(KeyboardReport);
-			}
-			else
-			{
-				Address = &MouseReport;
-				Size    = sizeof(MouseReport);
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-
diff --git a/software/lib/lufa-descriptor-keyboardmouse.h b/software/lib/lufa-descriptor-keyboardmouse.h
deleted file mode 100644
index 9381602..0000000
--- a/software/lib/lufa-descriptor-keyboardmouse.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <avr/pgmspace.h>
-
-		#include <LUFA/Drivers/USB/USB.h>
-
-	/* Type Defines: */
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t Config;
-
-			// Keyboard HID Interface
-			USB_Descriptor_Interface_t            HID1_KeyboardInterface;
-			USB_HID_Descriptor_HID_t              HID1_KeyboardHID;
-			USB_Descriptor_Endpoint_t             HID1_ReportINEndpoint;
-
-			// Mouse HID Interface
-			USB_Descriptor_Interface_t            HID2_MouseInterface;
-			USB_HID_Descriptor_HID_t              HID2_MouseHID;
-			USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;
-		} USB_Descriptor_Configuration_t;
-
-	/* Macros: */
-		/** Endpoint number of the Keyboard HID reporting IN endpoint. */
-		#define KEYBOARD_IN_EPNUM         1
-
-		/** Endpoint number of the Mouse HID reporting IN endpoint. */
-		#define MOUSE_IN_EPNUM            3
-
-		/** Size in bytes of each of the HID reporting IN endpoints. */
-		#define HID_EPSIZE                8
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/lib/lufa-descriptor-midi.c b/software/lib/lufa-descriptor-midi.c
deleted file mode 100644
index 99fab41..0000000
--- a/software/lib/lufa-descriptor-midi.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-midi.h"
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-	.USBSpecification       = VERSION_BCD(01.10),
-	.Class                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x2048,
-	.ReleaseNumber          = VERSION_BCD(00.01),
-
-	.ManufacturerStrIndex   = 0x01,
-	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-	.Config =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-			.TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),
-			.TotalInterfaces          = 2,
-
-			.ConfigurationNumber      = 1,
-			.ConfigurationStrIndex    = NO_DESCRIPTOR,
-
-			.ConfigAttributes         = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-			.MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
-		},
-
-	.Audio_ControlInterface =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = 0,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 0,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_ControlSubclass,
-			.Protocol                 = AUDIO_CSCP_ControlProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_ControlInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_Header,
-
-			.ACSpecification          = VERSION_BCD(01.00),
-			.TotalLength              = sizeof(USB_Audio_Descriptor_Interface_AC_t),
-
-			.InCollection             = 1,
-			.InterfaceNumber          = 1,
-		},
-
-	.Audio_StreamInterface =
-		{
-			.Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber          = 1,
-			.AlternateSetting         = 0,
-
-			.TotalEndpoints           = 2,
-
-			.Class                    = AUDIO_CSCP_AudioClass,
-			.SubClass                 = AUDIO_CSCP_MIDIStreamingSubclass,
-			.Protocol                 = AUDIO_CSCP_StreamingProtocol,
-
-			.InterfaceStrIndex        = NO_DESCRIPTOR
-		},
-
-	.Audio_StreamInterface_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_General,
-
-			.AudioSpecification       = VERSION_BCD(01.00),
-
-			.TotalLength              = (sizeof(USB_Descriptor_Configuration_t) -
-			                             offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC))
-		},
-
-	.MIDI_In_Jack_Emb =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_Embedded,
-			.JackID                   = 0x01,
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_In_Jack_Ext =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_External,
-			.JackID                   = 0x02,
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_Out_Jack_Emb =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_Embedded,
-			.JackID                   = 0x03,
-
-			.NumberOfPins             = 1,
-			.SourceJackID             = {0x02},
-			.SourcePinID              = {0x01},
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_Out_Jack_Ext =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
-			.Subtype                  = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
-			.JackType                 = MIDI_JACKTYPE_External,
-			.JackID                   = 0x04,
-
-			.NumberOfPins             = 1,
-			.SourceJackID             = {0x01},
-			.SourcePinID              = {0x01},
-
-			.JackStrIndex             = NO_DESCRIPTOR
-		},
-
-	.MIDI_In_Jack_Endpoint =
-		{
-			.Endpoint =
-				{
-					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
-					.EndpointAddress     = (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM),
-					.Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-					.EndpointSize        = MIDI_STREAM_EPSIZE,
-					.PollingIntervalMS   = 0x01
-				},
-
-			.Refresh                  = 0,
-			.SyncEndpointNumber       = 0
-		},
-
-	.MIDI_In_Jack_Endpoint_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
-			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
-
-			.TotalEmbeddedJacks       = 0x01,
-			.AssociatedJackID         = {0x01}
-		},
-
-	.MIDI_Out_Jack_Endpoint =
-		{
-			.Endpoint =
-				{
-					.Header              = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
-					.EndpointAddress     = (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM),
-					.Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-					.EndpointSize        = MIDI_STREAM_EPSIZE,
-					.PollingIntervalMS   = 0x01
-				},
-
-			.Refresh                  = 0,
-			.SyncEndpointNumber       = 0
-		},
-
-	.MIDI_Out_Jack_Endpoint_SPC =
-		{
-			.Header                   = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
-			.Subtype                  = AUDIO_DSUBTYPE_CSEndpoint_General,
-
-			.TotalEmbeddedJacks       = 0x01,
-			.AssociatedJackID         = {0x03}
-		}
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
-	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
-	.UnicodeString          = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
-	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
-	.UnicodeString          = L"Dean Camera"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
-	.UnicodeString          = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
-	.Header                 = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},
-	.UnicodeString          = L"LUFA MIDI Demo"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
-	.UnicodeString          = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t  DescriptorType   = (wValue >> 8);
-	const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	switch (DescriptorType)
-	{
-		case DTYPE_Device:
-			Address = &DeviceDescriptor;
-			Size    = sizeof(USB_Descriptor_Device_t);
-			break;
-		case DTYPE_Configuration:
-			Address = &ConfigurationDescriptor;
-			Size    = sizeof(USB_Descriptor_Configuration_t);
-			break;
-		case DTYPE_String:
-			switch (DescriptorNumber)
-			{
-				case 0x00:
-					Address = &LanguageString;
-					Size    = pgm_read_byte(&LanguageString.Header.Size);
-					break;
-				case 0x01:
-					Address = &ManufacturerString;
-					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-					break;
-				case 0x02:
-					Address = &ProductString;
-					Size    = pgm_read_byte(&ProductString.Header.Size);
-					break;
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-
diff --git a/software/lib/lufa-descriptor-midi.h b/software/lib/lufa-descriptor-midi.h
deleted file mode 100644
index 592ac9f..0000000
--- a/software/lib/lufa-descriptor-midi.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include <avr/pgmspace.h>
-
-	/* Macros: */
-		/** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */
-		#define MIDI_STREAM_IN_EPNUM        2
-
-		/** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */
-		#define MIDI_STREAM_OUT_EPNUM       1
-
-		/** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */
-		#define MIDI_STREAM_EPSIZE          64
-
-	/* Type Defines: */
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t     Config;
-
-			// MIDI Audio Control Interface
-			USB_Descriptor_Interface_t                Audio_ControlInterface;
-			USB_Audio_Descriptor_Interface_AC_t       Audio_ControlInterface_SPC;
-
-			// MIDI Audio Streaming Interface
-			USB_Descriptor_Interface_t                Audio_StreamInterface;
-			USB_MIDI_Descriptor_AudioInterface_AS_t   Audio_StreamInterface_SPC;
-			USB_MIDI_Descriptor_InputJack_t           MIDI_In_Jack_Emb;
-			USB_MIDI_Descriptor_InputJack_t           MIDI_In_Jack_Ext;
-			USB_MIDI_Descriptor_OutputJack_t          MIDI_Out_Jack_Emb;
-			USB_MIDI_Descriptor_OutputJack_t          MIDI_Out_Jack_Ext;
-			USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint;
-			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_In_Jack_Endpoint_SPC;
-			USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;
-			USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
-		} USB_Descriptor_Configuration_t;
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/lib/lufa-descriptor-rndis.c b/software/lib/lufa-descriptor-rndis.c
deleted file mode 100644
index ba29037..0000000
--- a/software/lib/lufa-descriptor-rndis.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-rndis.h"
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-	.USBSpecification       = VERSION_BCD(01.10),
-	.Class                  = CDC_CSCP_CDCClass,
-	.SubClass               = CDC_CSCP_NoSpecificSubclass,
-	.Protocol               = CDC_CSCP_NoSpecificProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x204C,
-	.ReleaseNumber          = VERSION_BCD(00.01),
-
-	.ManufacturerStrIndex   = 0x01,
-	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-	.Config =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
-			.TotalInterfaces        = 2,
-
-			.ConfigurationNumber    = 1,
-			.ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-			.ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-		},
-
-	.CDC_CCI_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 0,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 1,
-
-			.Class                  = CDC_CSCP_CDCClass,
-			.SubClass               = CDC_CSCP_ACMSubclass,
-			.Protocol               = CDC_CSCP_VendorSpecificProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.CDC_Functional_Header =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_Header,
-
-			.CDCSpecification       = VERSION_BCD(01.10),
-		},
-
-	.CDC_Functional_ACM =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
-
-			.Capabilities           = 0x00,
-		},
-
-	.CDC_Functional_Union =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_Union,
-
-			.MasterInterfaceNumber  = 0,
-			.SlaveInterfaceNumber   = 1,
-		},
-
-	.CDC_NotificationEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM),
-			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
-			.PollingIntervalMS      = 0xFF
-		},
-
-	.CDC_DCI_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 1,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 2,
-
-			.Class                  = CDC_CSCP_CDCDataClass,
-			.SubClass               = CDC_CSCP_NoDataSubclass,
-			.Protocol               = CDC_CSCP_NoDataProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.RNDIS_DataOutEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM),
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_TXRX_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		},
-
-	.RNDIS_DataInEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | CDC_TX_EPNUM),
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_TXRX_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		}
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
-	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
-	.UnicodeString          = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
-  .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
-  .UnicodeString          = L"Dean Camera"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
-  .Header                 = {.Size = USB_STRING_LEN(23), .Type = DTYPE_String},
-  .UnicodeString          = L"LUFA USB-RS232 Adapter"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t  DescriptorType   = (wValue >> 8);
-	const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	switch (DescriptorType)
-	{
-		case DTYPE_Device:
-			Address = &DeviceDescriptor;
-			Size    = sizeof(USB_Descriptor_Device_t);
-			break;
-		case DTYPE_Configuration:
-			Address = &ConfigurationDescriptor;
-			Size    = sizeof(USB_Descriptor_Configuration_t);
-			break;
-		case DTYPE_String:
-			switch (DescriptorNumber)
-			{
-				case 0x00:
-					Address = &LanguageString;
-					Size    = pgm_read_byte(&LanguageString.Header.Size);
-					break;
-				case 0x01:
-					Address = &ManufacturerString;
-					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-					break;
-				case 0x02:
-					Address = &ProductString;
-					Size    = pgm_read_byte(&ProductString.Header.Size);
-					break;
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-
diff --git a/software/lib/lufa-descriptor-rndis.h b/software/lib/lufa-descriptor-rndis.h
deleted file mode 100644
index 508ac2f..0000000
--- a/software/lib/lufa-descriptor-rndis.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include <avr/pgmspace.h>
-
-	/* Macros: */
-		/** Endpoint number of the CDC device-to-host notification IN endpoint. */
-		#define CDC_NOTIFICATION_EPNUM         3
-
-		/** Endpoint number of the CDC device-to-host data IN endpoint. */
-		#define CDC_TX_EPNUM                   1
-
-		/** Endpoint number of the CDC host-to-device data OUT endpoint. */
-		#define CDC_RX_EPNUM                   2
-
-		/** Size in bytes of the CDC device-to-host notification IN endpoint. */
-		#define CDC_NOTIFICATION_EPSIZE        8
-
-		/** Size in bytes of the CDC data IN and OUT endpoints. */
-		#define CDC_TXRX_EPSIZE                64
-
-	/* Type Defines: */
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t Config;
-
-			// RNDIS CDC Control Interface
-			USB_Descriptor_Interface_t            CDC_CCI_Interface;
-			USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header;
-			USB_CDC_Descriptor_FunctionalACM_t    CDC_Functional_ACM;
-			USB_CDC_Descriptor_FunctionalUnion_t  CDC_Functional_Union;
-			USB_Descriptor_Endpoint_t             CDC_NotificationEndpoint;
-
-			// RNDIS CDC Data Interface
-			USB_Descriptor_Interface_t            CDC_DCI_Interface;
-			USB_Descriptor_Endpoint_t             RNDIS_DataOutEndpoint;
-			USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint;
-		} USB_Descriptor_Configuration_t;
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/lib/lufa-descriptor-usbdualserial.c b/software/lib/lufa-descriptor-usbdualserial.c
deleted file mode 100644
index 639391c..0000000
--- a/software/lib/lufa-descriptor-usbdualserial.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-usbdualserial.h"
-
-/* On some devices, there is a factory set internal serial number which can be automatically sent to the host as
- * the device's serial number when the Device Descriptor's .SerialNumStrIndex entry is set to USE_INTERNAL_SERIAL.
- * This allows the host to track a device across insertions on different ports, allowing them to retain allocated
- * resources like COM port numbers and drivers. On demos using this feature, give a warning on unsupported devices
- * so that the user can supply their own serial number descriptor instead or remove the USE_INTERNAL_SERIAL value
- * from the Device Descriptor (forcing the host to generate a serial number for each device from the VID, PID and
- * port location).
- */
-#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
-	#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
-#endif
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-	.Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-	.USBSpecification       = VERSION_BCD(01.10),
-	.Class                  = USB_CSCP_IADDeviceClass,
-	.SubClass               = USB_CSCP_IADDeviceSubclass,
-	.Protocol               = USB_CSCP_IADDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x204E,
-	.ReleaseNumber          = VERSION_BCD(00.01),
-
-	.ManufacturerStrIndex   = 0x01,
-	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-	.Config =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-			.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
-			.TotalInterfaces        = 4,
-
-			.ConfigurationNumber    = 1,
-			.ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-			.ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-		},
-
-	.CDC1_IAD =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
-
-			.FirstInterfaceIndex    = 0,
-			.TotalInterfaces        = 2,
-
-			.Class                  = CDC_CSCP_CDCClass,
-			.SubClass               = CDC_CSCP_ACMSubclass,
-			.Protocol               = CDC_CSCP_ATCommandProtocol,
-
-			.IADStrIndex            = NO_DESCRIPTOR
-		},
-
-	.CDC1_CCI_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 0,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 1,
-
-			.Class                  = CDC_CSCP_CDCClass,
-			.SubClass               = CDC_CSCP_ACMSubclass,
-			.Protocol               = CDC_CSCP_ATCommandProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.CDC1_Functional_Header =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_Header,
-
-			.CDCSpecification       = VERSION_BCD(01.10),
-		},
-
-	.CDC1_Functional_ACM =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
-
-			.Capabilities           = 0x06,
-		},
-
-	.CDC1_Functional_Union =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_Union,
-
-			.MasterInterfaceNumber  = 0,
-			.SlaveInterfaceNumber   = 1,
-		},
-
-	.CDC1_ManagementEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | CDC1_NOTIFICATION_EPNUM),
-			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
-			.PollingIntervalMS      = 0xFF
-		},
-
-	.CDC1_DCI_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 1,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 2,
-
-			.Class                  = CDC_CSCP_CDCDataClass,
-			.SubClass               = CDC_CSCP_NoDataSubclass,
-			.Protocol               = CDC_CSCP_NoDataProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.CDC1_DataOutEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_OUT | CDC1_RX_EPNUM),
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_TXRX_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		},
-
-	.CDC1_DataInEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | CDC1_TX_EPNUM),
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_TXRX_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		},
-
-	.CDC2_IAD =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
-
-			.FirstInterfaceIndex    = 2,
-			.TotalInterfaces        = 2,
-
-			.Class                  = CDC_CSCP_CDCClass,
-			.SubClass               = CDC_CSCP_ACMSubclass,
-			.Protocol               = CDC_CSCP_ATCommandProtocol,
-
-			.IADStrIndex            = NO_DESCRIPTOR
-		},
-
-	.CDC2_CCI_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 2,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 1,
-
-			.Class                  = CDC_CSCP_CDCClass,
-			.SubClass               = CDC_CSCP_ACMSubclass,
-			.Protocol               = CDC_CSCP_ATCommandProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.CDC2_Functional_Header =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_Header,
-
-			.CDCSpecification       = VERSION_BCD(01.10),
-		},
-
-	.CDC2_Functional_ACM =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
-
-			.Capabilities           = 0x06,
-		},
-
-	.CDC2_Functional_Union =
-		{
-			.Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
-			.Subtype                = CDC_DSUBTYPE_CSInterface_Union,
-
-			.MasterInterfaceNumber  = 2,
-			.SlaveInterfaceNumber   = 3,
-		},
-
-	.CDC2_ManagementEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | CDC2_NOTIFICATION_EPNUM),
-			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_NOTIFICATION_EPSIZE,
-			.PollingIntervalMS      = 0xFF
-		},
-
-	.CDC2_DCI_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = 3,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 2,
-
-			.Class                  = CDC_CSCP_CDCDataClass,
-			.SubClass               = CDC_CSCP_NoDataSubclass,
-			.Protocol               = CDC_CSCP_NoDataProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.CDC2_DataOutEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_OUT | CDC2_RX_EPNUM),
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_TXRX_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		},
-
-	.CDC2_DataInEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = (ENDPOINT_DIR_IN | CDC2_TX_EPNUM),
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = CDC_TXRX_EPSIZE,
-			.PollingIntervalMS      = 0x01
-		}
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
-	.Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
-	.UnicodeString          = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
-	.Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
-  .UnicodeString          = L"Dean Camera"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
-	.Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
-	.UnicodeString          = L"LUFA Dual CDC Demo"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t  DescriptorType   = (wValue >> 8);
-	const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	switch (DescriptorType)
-	{
-		case DTYPE_Device:
-			Address = &DeviceDescriptor;
-			Size    = sizeof(USB_Descriptor_Device_t);
-			break;
-		case DTYPE_Configuration:
-			Address = &ConfigurationDescriptor;
-			Size    = sizeof(USB_Descriptor_Configuration_t);
-			break;
-		case DTYPE_String:
-			switch (DescriptorNumber)
-			{
-				case 0x00:
-					Address = &LanguageString;
-					Size    = pgm_read_byte(&LanguageString.Header.Size);
-					break;
-				case 0x01:
-					Address = &ManufacturerString;
-					Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-					break;
-				case 0x02:
-					Address = &ProductString;
-					Size    = pgm_read_byte(&ProductString.Header.Size);
-					break;
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-
diff --git a/software/lib/lufa-descriptor-usbdualserial.h b/software/lib/lufa-descriptor-usbdualserial.h
deleted file mode 100644
index d1e6ca6..0000000
--- a/software/lib/lufa-descriptor-usbdualserial.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <avr/pgmspace.h>
-
-		#include <LUFA/Drivers/USB/USB.h>
-
-	/* Macros: */
-		/** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */
-		#define CDC1_TX_EPNUM                  1
-
-		/** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */
-		#define CDC1_RX_EPNUM                  2
-
-		/** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */
-		#define CDC1_NOTIFICATION_EPNUM        3
-
-		/** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */
-		#define CDC2_TX_EPNUM                  4
-
-		/** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */
-		#define CDC2_RX_EPNUM                  5
-
-		/** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */
-		#define CDC2_NOTIFICATION_EPNUM        6
-
-		/** Size in bytes of the CDC device-to-host notification IN endpoints. */
-		#define CDC_NOTIFICATION_EPSIZE        8
-
-		/** Size in bytes of the CDC data IN and OUT endpoints. */
-		#define CDC_TXRX_EPSIZE                16
-
-	/* Type Defines: */
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t    Config;
-
-			// First CDC Control Interface
-			USB_Descriptor_Interface_Association_t   CDC1_IAD;
-			USB_Descriptor_Interface_t               CDC1_CCI_Interface;
-			USB_CDC_Descriptor_FunctionalHeader_t    CDC1_Functional_Header;
-			USB_CDC_Descriptor_FunctionalACM_t       CDC1_Functional_ACM;
-			USB_CDC_Descriptor_FunctionalUnion_t     CDC1_Functional_Union;
-			USB_Descriptor_Endpoint_t                CDC1_ManagementEndpoint;
-
-			// First CDC Data Interface
-			USB_Descriptor_Interface_t               CDC1_DCI_Interface;
-			USB_Descriptor_Endpoint_t                CDC1_DataOutEndpoint;
-			USB_Descriptor_Endpoint_t                CDC1_DataInEndpoint;
-
-			// Second CDC Control Interface
-			USB_Descriptor_Interface_Association_t   CDC2_IAD;
-			USB_Descriptor_Interface_t               CDC2_CCI_Interface;
-			USB_CDC_Descriptor_FunctionalHeader_t    CDC2_Functional_Header;
-			USB_CDC_Descriptor_FunctionalACM_t       CDC2_Functional_ACM;
-			USB_CDC_Descriptor_FunctionalUnion_t     CDC2_Functional_Union;
-			USB_Descriptor_Endpoint_t                CDC2_ManagementEndpoint;
-
-			// Second CDC Data Interface
-			USB_Descriptor_Interface_t               CDC2_DCI_Interface;
-			USB_Descriptor_Endpoint_t                CDC2_DataOutEndpoint;
-			USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;
-		} USB_Descriptor_Configuration_t;
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/lib/lufa-descriptor-usbserial.c b/software/lib/lufa-descriptor-usbserial.c
deleted file mode 100644
index fa2ef25..0000000
--- a/software/lib/lufa-descriptor-usbserial.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- *  computer-readable structures which the host requests upon device enumeration, to determine
- *  the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-usbserial.h"
-
-/* On some devices, there is a factory set internal serial number which can be automatically sent to the host as
- * the device's serial number when the Device Descriptor's .SerialNumStrIndex entry is set to USE_INTERNAL_SERIAL.
- * This allows the host to track a device across insertions on different ports, allowing them to retain allocated
- * resources like COM port numbers and drivers. On demos using this feature, give a warning on unsupported devices
- * so that the user can supply their own serial number descriptor instead or remove the USE_INTERNAL_SERIAL value
- * from the Device Descriptor (forcing the host to generate a serial number for each device from the VID, PID and
- * port location).
- */
-#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
-  #warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
-#endif
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- *  device characteristics, including the supported USB version, control endpoint size and the
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration
- *  process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
-  .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
-  .USBSpecification       = VERSION_BCD(01.10),
-  .Class                  = CDC_CSCP_CDCClass,
-  .SubClass               = CDC_CSCP_NoSpecificSubclass,
-  .Protocol               = CDC_CSCP_NoSpecificProtocol,
-
-  .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-  .VendorID               = 0x03EB,
-  .ProductID              = 0x204B,
-  .ReleaseNumber          = VERSION_BCD(00.01),
-
-  .ManufacturerStrIndex   = 0x01,
-  .ProductStrIndex        = 0x02,
-  .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
-
-  .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- *  of the device in one of its supported configurations, including information about any device interfaces
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- *  a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
-  .Config =
-    {
-      .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
-      .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
-      .TotalInterfaces        = 2,
-
-      .ConfigurationNumber    = 1,
-      .ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-      .ConfigAttributes       = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
-      .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-    },
-
-  .CDC_CCI_Interface =
-    {
-      .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-      .InterfaceNumber        = 0,
-      .AlternateSetting       = 0,
-
-      .TotalEndpoints         = 1,
-
-      .Class                  = CDC_CSCP_CDCClass,
-      .SubClass               = CDC_CSCP_ACMSubclass,
-      .Protocol               = CDC_CSCP_ATCommandProtocol,
-
-      .InterfaceStrIndex      = NO_DESCRIPTOR
-    },
-
-  .CDC_Functional_Header =
-    {
-      .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
-      .Subtype                = CDC_DSUBTYPE_CSInterface_Header,
-
-      .CDCSpecification       = VERSION_BCD(01.10),
-    },
-
-  .CDC_Functional_ACM =
-    {
-      .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
-      .Subtype                = CDC_DSUBTYPE_CSInterface_ACM,
-
-      .Capabilities           = 0x06,
-    },
-
-  .CDC_Functional_Union =
-    {
-      .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
-      .Subtype                = CDC_DSUBTYPE_CSInterface_Union,
-
-      .MasterInterfaceNumber  = 0,
-      .SlaveInterfaceNumber   = 1,
-    },
-
-  .CDC_NotificationEndpoint =
-    {
-      .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-      .EndpointAddress        = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM),
-      .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-      .EndpointSize           = CDC_NOTIFICATION_EPSIZE,
-      .PollingIntervalMS      = 0xFF
-    },
-
-  .CDC_DCI_Interface =
-    {
-      .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-      .InterfaceNumber        = 1,
-      .AlternateSetting       = 0,
-
-      .TotalEndpoints         = 2,
-
-      .Class                  = CDC_CSCP_CDCDataClass,
-      .SubClass               = CDC_CSCP_NoDataSubclass,
-      .Protocol               = CDC_CSCP_NoDataProtocol,
-
-      .InterfaceStrIndex      = NO_DESCRIPTOR
-    },
-
-  .CDC_DataOutEndpoint =
-    {
-      .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-      .EndpointAddress        = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM),
-      .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-      .EndpointSize           = CDC_TXRX_EPSIZE,
-      .PollingIntervalMS      = 0x01
-    },
-
-  .CDC_DataInEndpoint =
-    {
-      .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-      .EndpointAddress        = (ENDPOINT_DIR_IN | CDC_TX_EPNUM),
-      .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-      .EndpointSize           = CDC_TXRX_EPSIZE,
-      .PollingIntervalMS      = 0x01
-    }
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
-  .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
-  .UnicodeString          = {LANGUAGE_ID_ENG}
-};
-
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
-  .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
-  .UnicodeString          = L"Dean Camera"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- *  Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
-  .Header                 = {.Size = USB_STRING_LEN(23), .Type = DTYPE_String},
-  .UnicodeString          = L"LUFA USB-RS232 Adapter"
-#else
-  .Header                 = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
-  .UnicodeString          = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- *  documentation) by the application code so that the address and size of a requested descriptor can be given
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- *  USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                    const uint8_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-  const uint8_t  DescriptorType   = (wValue >> 8);
-  const uint8_t  DescriptorNumber = (wValue & 0xFF);
-
-  const void* Address = NULL;
-  uint16_t    Size    = NO_DESCRIPTOR;
-
-  switch (DescriptorType)
-  {
-    case DTYPE_Device:
-      Address = &DeviceDescriptor;
-      Size    = sizeof(USB_Descriptor_Device_t);
-      break;
-    case DTYPE_Configuration:
-      Address = &ConfigurationDescriptor;
-      Size    = sizeof(USB_Descriptor_Configuration_t);
-      break;
-    case DTYPE_String:
-      switch (DescriptorNumber)
-      {
-        case 0x00:
-          Address = &LanguageString;
-          Size    = pgm_read_byte(&LanguageString.Header.Size);
-          break;
-        case 0x01:
-          Address = &ManufacturerString;
-          Size    = pgm_read_byte(&ManufacturerString.Header.Size);
-          break;
-        case 0x02:
-          Address = &ProductString;
-          Size    = pgm_read_byte(&ProductString.Header.Size);
-          break;
-      }
-
-      break;
-  }
-
-  *DescriptorAddress = Address;
-  return Size;
-}
-
diff --git a/software/lib/lufa-descriptor-usbserial.h b/software/lib/lufa-descriptor-usbserial.h
deleted file mode 100644
index 97afd41..0000000
--- a/software/lib/lufa-descriptor-usbserial.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-  /* Includes: */
-    #include <avr/pgmspace.h>
-
-    #include <LUFA/Drivers/USB/USB.h>
-
-  /* Macros: */
-    /** Endpoint number of the CDC device-to-host notification IN endpoint. */
-    #define CDC_NOTIFICATION_EPNUM         2
-
-    /** Endpoint number of the CDC device-to-host data IN endpoint. */
-    #define CDC_TX_EPNUM                   3
-
-    /** Endpoint number of the CDC host-to-device data OUT endpoint. */
-    #define CDC_RX_EPNUM                   4
-
-    /** Size in bytes of the CDC device-to-host notification IN endpoint. */
-    #define CDC_NOTIFICATION_EPSIZE        8
-
-    /** Size in bytes of the CDC data IN and OUT endpoints. */
-    #define CDC_TXRX_EPSIZE                16
-
-  /* Type Defines: */
-    /** Type define for the device configuration descriptor structure. This must be defined in the
-     *  application code, as the configuration descriptor contains several sub-descriptors which
-     *  vary between devices, and which describe the device's usage to the host.
-     */
-    typedef struct
-    {
-      USB_Descriptor_Configuration_Header_t    Config;
-
-      // CDC Command Interface
-      USB_Descriptor_Interface_t               CDC_CCI_Interface;
-      USB_CDC_Descriptor_FunctionalHeader_t    CDC_Functional_Header;
-      USB_CDC_Descriptor_FunctionalACM_t       CDC_Functional_ACM;
-      USB_CDC_Descriptor_FunctionalUnion_t     CDC_Functional_Union;
-      USB_Descriptor_Endpoint_t                CDC_NotificationEndpoint;
-
-      // CDC Data Interface
-      USB_Descriptor_Interface_t               CDC_DCI_Interface;
-      USB_Descriptor_Endpoint_t                CDC_DataOutEndpoint;
-      USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
-    } USB_Descriptor_Configuration_t;
-
-  /* Function Prototypes: */
-    uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-                                        const uint8_t wIndex,
-                                        const void** const DescriptorAddress)
-                                        ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/lib/onewire.c b/software/lib/onewire.c
deleted file mode 100644
index f28ef41..0000000
--- a/software/lib/onewire.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
-Copyright (c) 2007, Jim Studt  (original old version - many contributors since)
-refactored from C++ to C by Bernhard Tittelbach
-
-The latest version of this library may be found at:
-  http://www.pjrc.com/teensy/td_libs_OneWire.html
-
-OneWire has been maintained by Paul Stoffregen (paul@pjrc.com) since
-January 2010.  At the time, it was in need of many bug fixes, but had
-been abandoned the original author (Jim Studt).  None of the known
-contributors were interested in maintaining OneWire.  Paul typically
-works on OneWire every 6 to 12 months.  Patches usually wait that
-long.  If anyone is interested in more actively maintaining OneWire,
-please contact Paul.
-
-Version 2.2:
-  Teensy 3.0 compatibility, Paul Stoffregen, paul@pjrc.com
-  Arduino Due compatibility, http://arduino.cc/forum/index.php?topic=141030
-  Fix DS18B20 example negative temperature
-  Fix DS18B20 example's low res modes, Ken Butcher
-  Improve reset timing, Mark Tillotson
-  Add const qualifiers, Bertrik Sikken
-  Add initial value input to crc16, Bertrik Sikken
-  Add target_search() function, Scott Roberts
-
-Version 2.1:
-  Arduino 1.0 compatibility, Paul Stoffregen
-  Improve temperature example, Paul Stoffregen
-  DS250x_PROM example, Guillermo Lovato
-  PIC32 (chipKit) compatibility, Jason Dangel, dangel.jason AT gmail.com
-  Improvements from Glenn Trewitt:
-  - crc16() now works
-  - check_crc16() does all of calculation/checking work.
-  - Added read_bytes() and write_bytes(), to reduce tedious loops.
-  - Added ds2408 example.
-  Delete very old, out-of-date readme file (info is here)
-
-Version 2.0: Modifications by Paul Stoffregen, January 2010:
-http://www.pjrc.com/teensy/td_libs_OneWire.html
-  Search fix from Robin James
-    http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27
-  Use direct optimized I/O in all cases
-  Disable interrupts during timing critical sections
-    (this solves many random communication errors)
-  Disable interrupts during read-modify-write I/O
-  Reduce RAM consumption by eliminating unnecessary
-    variables and trimming many to 8 bits
-  Optimize both crc8 - table version moved to flash
-
-Modified to work with larger numbers of devices - avoids loop.
-Tested in Arduino 11 alpha with 12 sensors.
-26 Sept 2008 -- Robin James
-http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27
-
-Updated to work with arduino-0008 and to include skip() as of
-2007/07/06. --RJL20
-
-Modified to calculate the 8-bit CRC directly, avoiding the need for
-the 256-byte lookup table to be loaded in RAM.  Tested in arduino-0010
--- Tom Pollard, Jan 23, 2008
-
-Jim Studt's original library was modified by Josh Larios.
-
-Tom Pollard, pollard@alum.mit.edu, contributed around May 20, 2008
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Much of the code was inspired by Derek Yerger's code, though I don't
-think much of that remains.  In any event that was..
-    (copyleft) 2006 by Derek Yerger - Free to distribute freely.
-
-The CRC code was excerpted and inspired by the Dallas Semiconductor
-sample code bearing this copyright.
-//---------------------------------------------------------------------------
-// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
-// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE.
-//
-// Except as contained in this notice, the name of Dallas Semiconductor
-// shall not be used except as stated in the Dallas Semiconductor
-// Branding Policy.
-//--------------------------------------------------------------------------
-*/
-
-#include "onewire.h"
-#include <util/delay.h>
-#include <avr/interrupt.h>
-
-
-IO_REG_TYPE owi_bitmask;
-volatile IO_REG_TYPE *owi_baseReg;
-#if ONEWIRE_SEARCH
-// global search state
-unsigned char ROM_NO[8];
-uint8_t owi_LastDiscrepancy;
-uint8_t owi_LastFamilyDiscrepancy;
-uint8_t owi_LastDeviceFlag;
-#endif
-
-
-void owi_init(uint8_t pin, volatile IO_REG_TYPE *pin_read_port)
-{
-    owi_bitmask = _BV(pin);
-  owi_baseReg = pin_read_port;
-    DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask);
-#if ONEWIRE_SEARCH
-  owi_reset_search();
-#endif
-}
-
-
-// Perform the onewire reset function.  We will wait up to 250uS for
-// the bus to come high, if it doesn't then it is broken or shorted
-// and we return a 0;
-//
-// Returns 1 if a device asserted a presence pulse, 0 otherwise.
-//
-uint8_t owi_reset(void)
-{
-  IO_REG_TYPE mask = owi_bitmask;
-  register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg;
-  uint8_t r;
-  uint8_t retries = 125;
-
-  cli();
-  DIRECT_MODE_INPUT(reg, mask);
-  sei();
-  // wait until the wire is high... just in case
-  do {
-    if (--retries == 0) return 0;
-    _delay_us(2);
-  } while ( !DIRECT_READ(reg, mask));
-
-  cli();
-  DIRECT_WRITE_LOW(reg, mask);
-  DIRECT_MODE_OUTPUT(reg, mask);	// drive output low
-  sei();
-  _delay_us(480);
-  cli();
-  DIRECT_MODE_INPUT(reg, mask);	// allow it to float
-  _delay_us(70);
-  r = !DIRECT_READ(reg, mask);
-  sei();
-  _delay_us(410);
-  return r;
-}
-
-//
-// Write a bit. Port and bit is used to cut lookup time and provide
-// more certain timing.
-//
-void owi_write_bit(uint8_t v)
-{
-  IO_REG_TYPE mask=owi_bitmask;
-  register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg;
-
-  if (v & 1) {
-    cli();
-    DIRECT_WRITE_LOW(reg, mask);
-    DIRECT_MODE_OUTPUT(reg, mask);	// drive output low
-    _delay_us(10);
-    DIRECT_WRITE_HIGH(reg, mask);	// drive output high
-    sei();
-    _delay_us(55);
-  } else {
-    cli();
-    DIRECT_WRITE_LOW(reg, mask);
-    DIRECT_MODE_OUTPUT(reg, mask);	// drive output low
-    _delay_us(65);
-    DIRECT_WRITE_HIGH(reg, mask);	// drive output high
-    sei();
-    _delay_us(5);
-  }
-}
-
-//
-// Read a bit. Port and bit is used to cut lookup time and provide
-// more certain timing.
-//
-uint8_t owi_read_bit(void)
-{
-  IO_REG_TYPE mask=owi_bitmask;
-  register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg;
-  uint8_t r;
-
-  cli();
-  DIRECT_MODE_OUTPUT(reg, mask);
-  DIRECT_WRITE_LOW(reg, mask);
-  _delay_us(3);
-  DIRECT_MODE_INPUT(reg, mask);	// let pin float, pull up will raise
-  _delay_us(10);
-  r = DIRECT_READ(reg, mask);
-  sei();
-  _delay_us(53);
-  return r;
-}
-
-//
-// Write a byte. The writing code uses the active drivers to raise the
-// pin high, if you need power after the write (e.g. DS18S20 in
-// parasite power mode) then set 'power' to 1, otherwise the pin will
-// go tri-state at the end of the write to avoid heating in a short or
-// other mishap.
-//
-void owi_write(uint8_t v, uint8_t power /* = 0 */) {
-    uint8_t bitMask;
-
-    for (bitMask = 0x01; bitMask; bitMask <<= 1) {
-  owi_write_bit( (bitMask & v)?1:0);
-    }
-    if ( !power) {
-  cli();
-  DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask);
-  DIRECT_WRITE_LOW(owi_baseReg, owi_bitmask);
-  sei();
-    }
-}
-
-void owi_write_bytes(const uint8_t *buf, uint16_t count, bool power /* = 0 */) {
-  for (uint16_t i = 0 ; i < count ; i++)
-    owi_write(buf[i],0);
-  if (!power) {
-    cli();
-    DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask);
-    DIRECT_WRITE_LOW(owi_baseReg, owi_bitmask);
-    sei();
-  }
-}
-
-//
-// Read a byte
-//
-uint8_t owi_read() {
-    uint8_t bitMask;
-    uint8_t r = 0;
-
-    for (bitMask = 0x01; bitMask; bitMask <<= 1) {
-  if ( owi_read_bit()) r |= bitMask;
-    }
-    return r;
-}
-
-void owi_read_bytes(uint8_t *buf, uint16_t count) {
-  for (uint16_t i = 0 ; i < count ; i++)
-    buf[i] = owi_read();
-}
-
-//
-// Do a ROM select
-//
-void owi_select(const uint8_t rom[8])
-{
-    uint8_t i;
-
-    owi_write(0x55,0);           // Choose ROM
-
-    for (i = 0; i < 8; i++) owi_write(rom[i],0);
-}
-
-//
-// Do a ROM skip
-//
-void owi_skip()
-{
-    owi_write(0xCC,0);           // Skip ROM
-}
-
-void owi_depower()
-{
-  cli();
-  DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask);
-  sei();
-}
-
-#if ONEWIRE_SEARCH
-
-//
-// You need to use this function to start a search again from the beginning.
-// You do not need to do it for the first search, though you could.
-//
-void owi_reset_search()
-{
-  // reset the search state
-  owi_LastDiscrepancy = 0;
-  owi_LastDeviceFlag = FALSE;
-  owi_LastFamilyDiscrepancy = 0;
-  for(int i = 7; ; i--) {
-    ROM_NO[i] = 0;
-    if ( i == 0) break;
-  }
-}
-
-// Setup the search to find the device type 'family_code' on the next call
-// to search(*newAddr) if it is present.
-//
-void owi_target_search(uint8_t family_code)
-{
-   // set the search state to find SearchFamily type devices
-   ROM_NO[0] = family_code;
-   for (uint8_t i = 1; i < 8; i++)
-      ROM_NO[i] = 0;
-   owi_LastDiscrepancy = 64;
-   owi_LastFamilyDiscrepancy = 0;
-   owi_LastDeviceFlag = FALSE;
-}
-
-//
-// Perform a search. If this function returns a '1' then it has
-// enumerated the next device and you may retrieve the ROM from the
-// owi_address variable. If there are no devices, no further
-// devices, or something horrible happens in the middle of the
-// enumeration then a 0 is returned.  If a new device is found then
-// its address is copied to newAddr.  Use owi_reset_search() to
-// start over.
-//
-// --- Replaced by the one from the Dallas Semiconductor web site ---
-//--------------------------------------------------------------------------
-// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing
-// search state.
-// Return TRUE  : device found, ROM number in ROM_NO buffer
-//        FALSE : device not found, end of search
-//
-uint8_t owi_search(uint8_t *newAddr)
-{
-   uint8_t id_bit_number;
-   uint8_t last_zero, rom_byte_number, search_result;
-   uint8_t id_bit, cmp_id_bit;
-
-   unsigned char rom_byte_mask, search_direction;
-
-   // initialize for search
-   id_bit_number = 1;
-   last_zero = 0;
-   rom_byte_number = 0;
-   rom_byte_mask = 1;
-   search_result = 0;
-
-   // if the last call was not the last one
-   if (!owi_LastDeviceFlag)
-   {
-      // 1-Wire reset
-      if (!owi_reset())
-      {
-         // reset the search
-         owi_LastDiscrepancy = 0;
-         owi_LastDeviceFlag = FALSE;
-         owi_LastFamilyDiscrepancy = 0;
-         return FALSE;
-      }
-
-      // issue the search command
-      owi_write(0xF0,0);
-
-      // loop to do the search
-      do
-      {
-         // read a bit and its complement
-         id_bit = owi_read_bit();
-         cmp_id_bit = owi_read_bit();
-
-         // check for no devices on 1-wire
-         if ((id_bit == 1) && (cmp_id_bit == 1))
-            break;
-         else
-         {
-            // all devices coupled have 0 or 1
-            if (id_bit != cmp_id_bit)
-               search_direction = id_bit;  // bit write value for search
-            else
-            {
-               // if this discrepancy if before the Last Discrepancy
-               // on a previous next then pick the same as last time
-               if (id_bit_number < owi_LastDiscrepancy)
-                  search_direction = ((ROM_NO[rom_byte_number] & rom_byte_mask) > 0);
-               else
-                  // if equal to last pick 1, if not then pick 0
-                  search_direction = (id_bit_number == owi_LastDiscrepancy);
-
-               // if 0 was picked then record its position in LastZero
-               if (search_direction == 0)
-               {
-                  last_zero = id_bit_number;
-
-                  // check for Last discrepancy in family
-                  if (last_zero < 9)
-                     owi_LastFamilyDiscrepancy = last_zero;
-               }
-            }
-
-            // set or clear the bit in the ROM byte rom_byte_number
-            // with mask rom_byte_mask
-            if (search_direction == 1)
-              ROM_NO[rom_byte_number] |= rom_byte_mask;
-            else
-              ROM_NO[rom_byte_number] &= ~rom_byte_mask;
-
-            // serial number search direction write bit
-            owi_write_bit(search_direction);
-
-            // increment the byte counter id_bit_number
-            // and shift the mask rom_byte_mask
-            id_bit_number++;
-            rom_byte_mask <<= 1;
-
-            // if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask
-            if (rom_byte_mask == 0)
-            {
-                rom_byte_number++;
-                rom_byte_mask = 1;
-            }
-         }
-      }
-      while(rom_byte_number < 8);  // loop until through all ROM bytes 0-7
-
-      // if the search was successful then
-      if (!(id_bit_number < 65))
-      {
-         // search successful so set owi_LastDiscrepancy,owi_LastDeviceFlag,search_result
-         owi_LastDiscrepancy = last_zero;
-
-         // check for last device
-         if (owi_LastDiscrepancy == 0)
-            owi_LastDeviceFlag = TRUE;
-
-         search_result = TRUE;
-      }
-   }
-
-   // if no device found then reset counters so next 'search' will be like a first
-   if (!search_result || !ROM_NO[0])
-   {
-      owi_LastDiscrepancy = 0;
-      owi_LastDeviceFlag = FALSE;
-      owi_LastFamilyDiscrepancy = 0;
-      search_result = FALSE;
-   }
-   for (int i = 0; i < 8; i++) newAddr[i] = ROM_NO[i];
-   return search_result;
-  }
-
-#endif
-
-#if ONEWIRE_CRC
-// The 1-Wire CRC scheme is described in Maxim Application Note 27:
-// "Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products"
-//
-
-#if ONEWIRE_CRC8_TABLE
-// This table comes from Dallas sample code where it is freely reusable,
-// though Copyright (C) 2000 Dallas Semiconductor Corporation
-const uint8_t PROGMEM dscrc_table[] = {
-      0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,
-    157,195, 33,127,252,162, 64, 30, 95,  1,227,189, 62, 96,130,220,
-     35,125,159,193, 66, 28,254,160,225,191, 93,  3,128,222, 60, 98,
-    190,224,  2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,
-     70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89,  7,
-    219,133,103, 57,186,228,  6, 88, 25, 71,165,251,120, 38,196,154,
-    101, 59,217,135,  4, 90,184,230,167,249, 27, 69,198,152,122, 36,
-    248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91,  5,231,185,
-    140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,
-     17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,
-    175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,
-     50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,
-    202,148,118, 40,171,245, 23, 73,  8, 86,180,234,105, 55,213,139,
-     87,  9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,
-    233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,
-    116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53};
-
-//
-// Compute a Dallas Semiconductor 8 bit CRC. These show up in the ROM
-// and the registers.  (note: this might better be done without to
-// table, it would probably be smaller and certainly fast enough
-// compared to all those delayMicrosecond() calls.  But I got
-// confused, so I use this table from the examples.)
-//
-uint8_t owi_crc8(const uint8_t *addr, uint8_t len)
-{
-  uint8_t crc = 0;
-
-  while (len--) {
-    crc = pgm_read_byte(dscrc_table + (crc ^ *addr++));
-  }
-  return crc;
-}
-#else
-//
-// Compute a Dallas Semiconductor 8 bit CRC directly.
-// this is much slower, but much smaller, than the lookup table.
-//
-uint8_t owi_crc8(const uint8_t *addr, uint8_t len)
-{
-  uint8_t crc = 0;
-
-  while (len--) {
-    uint8_t inbyte = *addr++;
-    for (uint8_t i = 8; i; i--) {
-      uint8_t mix = (crc ^ inbyte) & 0x01;
-      crc >>= 1;
-      if (mix) crc ^= 0x8C;
-      inbyte >>= 1;
-    }
-  }
-  return crc;
-}
-#endif
-
-#if ONEWIRE_CRC16
-bool owi_check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc)
-{
-    crc = ~owi_crc16(input, len, crc);
-    return (crc & 0xFF) == inverted_crc[0] && (crc >> 8) == inverted_crc[1];
-}
-
-uint16_t owi_crc16(const uint8_t* input, uint16_t len, uint16_t crc)
-{
-    static const uint8_t oddparity[16] =
-        { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 };
-
-    for (uint16_t i = 0 ; i < len ; i++) {
-      // Even though we're just copying a byte from the input,
-      // we'll be doing 16-bit computation with it.
-      uint16_t cdata = input[i];
-      cdata = (cdata ^ crc) & 0xff;
-      crc >>= 8;
-
-      if (oddparity[cdata & 0x0F] ^ oddparity[cdata >> 4])
-          crc ^= 0xC001;
-
-      cdata <<= 6;
-      crc ^= cdata;
-      cdata <<= 1;
-      crc ^= cdata;
-    }
-    return crc;
-}
-#endif
-
-#endif
diff --git a/software/lib/onewire.h b/software/lib/onewire.h
deleted file mode 100644
index 1410fde..0000000
--- a/software/lib/onewire.h
+++ /dev/null
@@ -1,206 +0,0 @@
-#ifndef OneWire_h
-#define OneWire_h
-
-#include <inttypes.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-
-// You can exclude certain features from OneWire.  In theory, this
-// might save some space.  In practice, the compiler automatically
-// removes unused code (technically, the linker, using -fdata-sections
-// and -ffunction-sections when compiling, and Wl,--gc-sections
-// when linking), so most of these will not result in any code size
-// reduction.  Well, unless you try to use the missing features
-// and redesign your program to not need them!  ONEWIRE_CRC8_TABLE
-// is the exception, because it selects a fast but large algorithm
-// or a small but slow algorithm.
-
-// you can exclude onewire_search by defining that to 0
-#ifndef ONEWIRE_SEARCH
-#define ONEWIRE_SEARCH 1
-#endif
-
-// You can exclude CRC checks altogether by defining this to 0
-#ifndef ONEWIRE_CRC
-#define ONEWIRE_CRC 1
-#endif
-
-// Select the table-lookup method of computing the 8-bit CRC
-// by setting this to 1.  The lookup table enlarges code size by
-// about 250 bytes.  It does NOT consume RAM (but did in very
-// old versions of OneWire).  If you disable this, a slower
-// but very compact algorithm is used.
-#ifndef ONEWIRE_CRC8_TABLE
-#define ONEWIRE_CRC8_TABLE 1
-#endif
-
-// You can allow 16-bit CRC checks by defining this to 1
-// (Note that ONEWIRE_CRC must also be 1.)
-#ifndef ONEWIRE_CRC16
-#define ONEWIRE_CRC16 1
-#endif
-
-#define FALSE 0
-#define TRUE  1
-
-// Platform specific I/O definitions
-
-#if defined(__AVR__)
-#define PIN_TO_BASEREG(pin)             (portInputRegister(digitalPinToPort(pin)))
-#define PIN_TO_BITMASK(pin)             (digitalPinToBitMask(pin))
-#define IO_REG_TYPE uint8_t
-#define IO_REG_ASM __asm__("r30")
-#define DIRECT_READ(base, mask)         (((*(base)) & (mask)) ? 1 : 0)
-#define DIRECT_MODE_INPUT(base, mask)   ((*((base)+1)) &= ~(mask))
-#define DIRECT_MODE_OUTPUT(base, mask)  ((*((base)+1)) |= (mask))
-#define DIRECT_WRITE_LOW(base, mask)    ((*((base)+2)) &= ~(mask))
-#define DIRECT_WRITE_HIGH(base, mask)   ((*((base)+2)) |= (mask))
-
-#elif defined(__MK20DX128__)
-#define PIN_TO_BASEREG(pin)             (portOutputRegister(pin))
-#define PIN_TO_BITMASK(pin)             (1)
-#define IO_REG_TYPE uint8_t
-#define IO_REG_ASM
-#define DIRECT_READ(base, mask)         (*((base)+512))
-#define DIRECT_MODE_INPUT(base, mask)   (*((base)+640) = 0)
-#define DIRECT_MODE_OUTPUT(base, mask)  (*((base)+640) = 1)
-#define DIRECT_WRITE_LOW(base, mask)    (*((base)+256) = 1)
-#define DIRECT_WRITE_HIGH(base, mask)   (*((base)+128) = 1)
-
-#elif defined(__SAM3X8E__)
-// Arduino 1.5.1 may have a bug in delayMicroseconds() on Arduino Due.
-// http://arduino.cc/forum/index.php/topic,141030.msg1076268.html#msg1076268
-// If you have trouble with OneWire on Arduino Due, please check the
-// status of delayMicroseconds() before reporting a bug in OneWire!
-#define PIN_TO_BASEREG(pin)             (&(digitalPinToPort(pin)->PIO_PER))
-#define PIN_TO_BITMASK(pin)             (digitalPinToBitMask(pin))
-#define IO_REG_TYPE uint32_t
-#define IO_REG_ASM
-#define DIRECT_READ(base, mask)         (((*((base)+15)) & (mask)) ? 1 : 0)
-#define DIRECT_MODE_INPUT(base, mask)   ((*((base)+5)) = (mask))
-#define DIRECT_MODE_OUTPUT(base, mask)  ((*((base)+4)) = (mask))
-#define DIRECT_WRITE_LOW(base, mask)    ((*((base)+13)) = (mask))
-#define DIRECT_WRITE_HIGH(base, mask)   ((*((base)+12)) = (mask))
-#ifndef PROGMEM
-#define PROGMEM
-#endif
-#ifndef pgm_read_byte
-#define pgm_read_byte(addr) (*(const uint8_t *)(addr))
-#endif
-
-#elif defined(__PIC32MX__)
-#define PIN_TO_BASEREG(pin)             (portModeRegister(digitalPinToPort(pin)))
-#define PIN_TO_BITMASK(pin)             (digitalPinToBitMask(pin))
-#define IO_REG_TYPE uint32_t
-#define IO_REG_ASM
-#define DIRECT_READ(base, mask)         (((*(base+4)) & (mask)) ? 1 : 0)  //PORTX + 0x10
-#define DIRECT_MODE_INPUT(base, mask)   ((*(base+2)) = (mask))            //TRISXSET + 0x08
-#define DIRECT_MODE_OUTPUT(base, mask)  ((*(base+1)) = (mask))            //TRISXCLR + 0x04
-#define DIRECT_WRITE_LOW(base, mask)    ((*(base+8+1)) = (mask))          //LATXCLR  + 0x24
-#define DIRECT_WRITE_HIGH(base, mask)   ((*(base+8+2)) = (mask))          //LATXSET + 0x28
-
-#else
-#error "Please define I/O register types here"
-#endif
-
-#ifndef _BV
-#define _BV(bit) (1 << (bit))
-#endif
-
-void owi_init(uint8_t pin, volatile IO_REG_TYPE *pin_read_port);
-
-uint8_t owi_reset(void);
-void owi_select(const uint8_t rom[8]);
-
-// Issue a 1-Wire rom skip command, to address all on bus.
-void owi_skip(void);
-
-// Write a byte. If 'power' is one then the wire is held high at
-// the end for parasitically powered devices. You are responsible
-// for eventually depowering it by calling depower() or doing
-// another read or write.
-void owi_write(uint8_t v, uint8_t power);
-
-void owi_write_bytes(const uint8_t *buf, uint16_t count, bool power);
-
-// Read a byte.
-uint8_t owi_read(void);
-
-void owi_read_bytes(uint8_t *buf, uint16_t count);
-
-// Write a bit. The bus is always left powered at the end, see
-// note in write() about that.
-void owi_write_bit(uint8_t v);
-
-// Read a bit.
-uint8_t owi_read_bit(void);
-
-// Stop forcing power onto the bus. You only need to do this if
-// you used the 'power' flag to write() or used a write_bit() call
-// and aren't about to do another read or write. You would rather
-// not leave this powered if you don't have to, just in case
-// someone shorts your bus.
-void owi_depower(void);
-
-#if ONEWIRE_SEARCH
-// Clear the search state so that if will start from the beginning again.
-void owi_reset_search(void);
-
-// Setup the search to find the device type 'family_code' on the next call
-// to search(*newAddr) if it is present.
-void owi_target_search(uint8_t family_code);
-
-// Look for the next device. Returns 1 if a new address has been
-// returned. A zero might mean that the bus is shorted, there are
-// no devices, or you have already retrieved all of them.  It
-// might be a good idea to check the CRC to make sure you didn't
-// get garbage.  The order is deterministic. You will always get
-// the same devices in the same order.
-uint8_t owi_search(uint8_t *newAddr);
-#endif
-
-#if ONEWIRE_CRC
-// Compute a Dallas Semiconductor 8 bit CRC, these are used in the
-// ROM and scratchpad registers.
-uint8_t owi_crc8(const uint8_t *addr, uint8_t len);
-
-#if ONEWIRE_CRC16
-// Compute the 1-Wire CRC16 and compare it against the received CRC.
-// Example usage (reading a DS2408):
-//    // Put everything in a buffer so we can compute the CRC easily.
-//    uint8_t buf[13];
-//    buf[0] = 0xF0;    // Read PIO Registers
-//    buf[1] = 0x88;    // LSB address
-//    buf[2] = 0x00;    // MSB address
-//    WriteBytes(net, buf, 3);    // Write 3 cmd bytes
-//    ReadBytes(net, buf+3, 10);  // Read 6 data bytes, 2 0xFF, 2 CRC16
-//    if (!CheckCRC16(buf, 11, &buf[11])) {
-//        // Handle error.
-//    }
-//
-// @param input - Array of bytes to checksum.
-// @param len - How many bytes to use.
-// @param inverted_crc - The two CRC16 bytes in the received data.
-//                       This should just point into the received data,
-//                       *not* at a 16-bit integer.
-// @param crc - The crc starting value (optional)
-// @return True, iff the CRC matches.
-bool owi_check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc);
-
-// Compute a Dallas Semiconductor 16 bit CRC.  This is required to check
-// the integrity of data received from many 1-Wire devices.  Note that the
-// CRC computed here is *not* what you'll get from the 1-Wire network,
-// for two reasons:
-//   1) The CRC is transmitted bitwise inverted.
-//   2) Depending on the endian-ness of your processor, the binary
-//      representation of the two-byte return value may have a different
-//      byte order than the two bytes you get from 1-Wire.
-// @param input - Array of bytes to checksum.
-// @param len - How many bytes to use.
-// @param crc - The crc starting value (optional)
-// @return The CRC16, as defined by Dallas Semiconductor.
-uint16_t owi_crc16(const uint8_t* input, uint16_t len, uint16_t crc);
-#endif
-#endif
-
-#endif
diff --git a/software/lib/serialio.c b/software/lib/serialio.c
deleted file mode 100644
index fde2935..0000000
--- a/software/lib/serialio.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2014 Christian Pointner <equinox@spreadspace.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdio.h>
-
-#include "serialio.h"
-#include "LUFA/Drivers/Peripheral/Serial.h"
-
-static FILE serial_stream;
-
-void serialio_init(const uint32_t baudrate, const uint8_t doublespeed)
-{
-  Serial_Init(baudrate, doublespeed);
-  Serial_CreateStream(&serial_stream);
-  stdin = stdout = stderr = &serial_stream;
-}
-
-void serialio_task(void)
-{
-}
-
-int16_t serialio_bytes_received(void)
-{
-  return (int16_t)Serial_IsCharReceived();
-}
diff --git a/software/lib/serialio.h b/software/lib/serialio.h
deleted file mode 100644
index 3b0781e..0000000
--- a/software/lib/serialio.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2014 Christian Pointner <equinox@spreadspace.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef SPREADAVR_serialio_h_INCLUDED
-#define SPREADAVR_serialio_h_INCLUDED
-
-#include <stdint.h>
-
-void serialio_init(const uint32_t baudrate, const uint8_t doublespeed);
-void serialio_task(void);
-int16_t serialio_bytes_received(void);
-
-#endif
diff --git a/software/lib/usbio.c b/software/lib/usbio.c
deleted file mode 100644
index fbdd5a3..0000000
--- a/software/lib/usbio.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *                     Othmar Gsenger <otti@wirdorange.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdio.h>
-
-#include "usbio.h"
-
-#include <LUFA/Drivers/USB/USB.h>
-#include "lufa-descriptor-usbserial.h"
-#include "LUFA/Drivers/Peripheral/Serial.h"
-
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
-  {
-    .Config =
-      {
-        .ControlInterfaceNumber         = 0,
-
-        .DataINEndpointNumber           = CDC_TX_EPNUM,
-        .DataINEndpointSize             = CDC_TXRX_EPSIZE,
-        .DataINEndpointDoubleBank       = false,
-
-        .DataOUTEndpointNumber          = CDC_RX_EPNUM,
-        .DataOUTEndpointSize            = CDC_TXRX_EPSIZE,
-        .DataOUTEndpointDoubleBank      = false,
-
-        .NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
-        .NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
-        .NotificationEndpointDoubleBank = false,
-      },
-  };
-
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-  CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
-}
-
-void EVENT_USB_Device_ControlRequest(void)
-{
-  CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
-}
-/* end LUFA CDC-ACM specific definitions*/
-
-static int dummy_putchar(char DataByte, FILE *Stream) { return 0; }
-static int dummy_getchar(FILE *Stream) { return 0; }
-static FILE dummy_stream = FDEV_SETUP_STREAM(dummy_putchar, dummy_getchar, _FDEV_SETUP_RW);
-static FILE usb_stream;
-
-void usbio_init(void)
-{
-  stdin = stdout = stderr = &dummy_stream;
-
-  USB_Init();
-  CDC_Device_CreateStream(&VirtualSerial_CDC_Interface,&usb_stream);
-}
-
-void usbio_task(void)
-{
-#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
-  if(USB_DeviceState == DEVICE_STATE_Unattached && USB_VBUS_GetStatus()) {
-    USB_Disable();
-    USB_Init();
-  }
-#endif
-
-  CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
-  USB_USBTask();
-}
-
-int16_t usbio_bytes_received(void)
-{
-  if(stdin == &usb_stream)
-    return CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
-  else
-    return 0;
-}
-
-void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
-{
-  if(CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR)
-    stdin = stdout = stderr = &usb_stream;
-  else
-    stdin = stdout = stderr = &dummy_stream;
-}
-
-void EVENT_USB_Device_Disconnect(void)
-{
-  stdin = stdout = stderr = &dummy_stream;
-}
diff --git a/software/lib/usbio.h b/software/lib/usbio.h
deleted file mode 100644
index 1237f37..0000000
--- a/software/lib/usbio.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *                     Othmar Gsenger <otti@wirdorange.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef SPREADAVR_usbio_h_INCLUDED
-#define SPREADAVR_usbio_h_INCLUDED
-
-#include <stdint.h>
-
-void usbio_init(void);
-void usbio_task(void);
-int16_t usbio_bytes_received(void);
-
-#endif
diff --git a/software/lib/util.c b/software/lib/util.c
deleted file mode 100644
index 7f15bfe..0000000
--- a/software/lib/util.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <avr/interrupt.h>
-#include <avr/io.h>
-#include <util/delay.h>
-
-#include "util.h"
-
-#if defined(CLKPR)
-#define CPU_PRESCALE(n) do { CLKPR = 0x80; CLKPR = (n); } while(0)
-#else
-#define CPU_PRESCALE(n)
-#endif
-
-void cpu_init(void)
-{
-  CPU_PRESCALE(0);
-}
-
-#if defined JTD
-void jtag_disable(void)
-{
-  uint8_t tempreg;
-  __asm __volatile("in %[tempreg], %[mcucr]" "\n\t"
-                   "ori %[tempreg], %[jtd]" "\n\t"
-                   "out %[mcucr], %[tempreg]" "\n\t"
-                   "out %[mcucr], %[tempreg]"
-                   : [tempreg] "=d" (tempreg)
-                   : [mcucr] "I" (_SFR_IO_ADDR(MCUCR)), [jtd] "M" (_BV(JTD)));
-}
-#endif
-
-#if defined(__BOARD_teensy1__)
-  #define BOOTLOADER_VEC 0x3E00
-#elif defined(__BOARD_teensy2__)
-  #define BOOTLOADER_VEC 0x7E00
-#elif defined(__BOARD_teensy1pp__)
-  #define BOOTLOADER_VEC 0xFC00
-#elif defined(__BOARD_teensy2pp__)
-  #define BOOTLOADER_VEC 0x1FC00
-#elif defined(__BOARD_minimus__)
-  #define BOOTLOADER_VEC 0x3000
-#elif defined(__BOARD_minimus32__)
-  #define BOOTLOADER_VEC 0x3800
-#elif defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__)
-  #define BOOTLOADER_VEC 0x3800
-#elif defined(__BOARD_slowpandongle1__) || defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__)
-  #define BOOTLOADER_VEC 0x3800
-#elif defined(__BOARD_rhmixxx__)
-  #define BOOTLOADER_VEC 0xF000
-#else
-  #define BOOTLOADER_VEC 0x0000
-#endif
-
-typedef void (*f_ptr_type)(void);
-f_ptr_type start_bootloader = (f_ptr_type)BOOTLOADER_VEC;
-
-void reset2bootloader(void)
-{
-#if defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_teensy2__) || defined(__BOARD_teensy2pp__) || \
-    defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) || \
-    defined(__BOARD_slowpandongle1__) || defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__) || \
-    defined(__BOARD_rhmixxx__) || defined(__BOARD_minimus__) || defined(__BOARD_minimus32__)
-  cli();
-  // disable watchdog, if enabled
-  // disable all peripherals
-  UDCON = 1;
-  USBCON = (1<<FRZCLK);  // disable USB
-  UCSR1B = 0;
-  _delay_ms(5);
-  #if defined(__BOARD_teensy1__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0;
-    TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0;
-    DDRB = 0; DDRC = 0; DDRD = 0;
-    PORTB = 0; PORTC = 0; PORTD = 0;
-  #elif defined(__BOARD_teensy2__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
-    TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0;
-    DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0;
-    PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
-  #elif defined(__BOARD_teensy1pp__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
-    TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
-    DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
-    PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
-  #elif defined(__BOARD_teensy2pp__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
-    TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
-    DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
-    PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
-  #elif defined(__BOARD_minimus__) || defined(__BOARD_slowpandongle1__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0;
-    TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0;
-    DDRB = 0; DDRC = 0; DDRD = 0;
-    PORTB = 0; PORTC = 0; PORTD = 0;
-  #elif defined(__BOARD_minimus32__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0;
-    TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0;
-    DDRB = 0; DDRC = 0; DDRD = 0;
-    PORTB = 0; PORTC = 0; PORTD = 0;
-  #elif defined(__BOARD_hhd70dongle2__) || defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) || \
-        defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
-    TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0;
-    DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0;
-    PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
-  #elif defined(__BOARD_rhmixxx__)
-    EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
-    TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
-    DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
-    PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
-  #endif
-  start_bootloader();
-#endif
-}
diff --git a/software/lib/util.h b/software/lib/util.h
deleted file mode 100644
index 51c946d..0000000
--- a/software/lib/util.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  spreadspace avr utils
- *
- *
- *  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
- *
- *  This file is part of spreadspace avr utils.
- *
- *  spreadspace avr utils is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  any later version.
- *
- *  spreadspace avr utils is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef SPREADAVR_util_h_INCLUDED
-#define SPREADAVR_util_h_INCLUDED
-
-void cpu_init(void);
-#if defined JTD
-void jtag_disable(void);
-#endif
-void reset2bootloader(void);
-
-#endif
diff --git a/software/lufa.mk b/software/lufa.mk
deleted file mode 100644
index b247b87..0000000
--- a/software/lufa.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-##
-##  spreadspace avr utils
-##
-##
-##  Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org>
-##
-##  This file is part of spreadspace avr utils.
-##
-##  spreadspace avr utils is free software: you can redistribute it and/or modify
-##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation, either version 3 of the License, or
-##  any later version.
-##
-##  spreadspace avr utils is distributed in the hope that it will be useful,
-##  but WITHOUT ANY WARRANTY; without even the implied warranty of
-##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-##  GNU General Public License for more details.
-##
-##  You should have received a copy of the GNU General Public License
-##  along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
-##
-
-include ../defines.mk
-
-include $(LUFA_PATH)/LUFA/makefile
-SRC:=$(foreach COMP,$(LUFA_COMPONENTS),$(LUFA_SRC_$(COMP)))
-
-CFLAGS += -DF_USB=$(F_USB)UL
-CFLAGS += -DBOARD=BOARD_$(LUFA_BOARD)
-CFLAGS += $(LUFA_OPTS)
-
-OBJ = $(SRC:%.c=%.o)
-
-liblufa.a: $(OBJ)
-	$(AR) $@ $(OBJ)
-
-%.o: %.c
-	$(CC) -c $(CFLAGS) $< -o $@
-
-clean:
-	rm -f $(SRC:%.c=%.o)
diff --git a/software/rhmixxx/Makefile b/software/rhmixxx/Makefile
index 47d5e30..6883376 100644
--- a/software/rhmixxx/Makefile
+++ b/software/rhmixxx/Makefile
@@ -24,8 +24,9 @@ BOARD_TYPE := rhmixxx
 OBJ := $(NAME).o keypad.o eventqueue.o gpio.o analog.o
 LIBS := util led lufa-descriptor-midi
 EXTERNAL_LIBS := lufa
+SPREADAVR_PATH := ../../contrib/avr-utils
 
-LUFA_PATH := ../../contrib/LUFA-120219
+LUFA_PATH := $(SPREADAVR_PATH)/contrib/LUFA-120219
 LUFA_OPTS  = -D USB_DEVICE_ONLY
 LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0
 LUFA_OPTS += -D ORDERED_EP_CONFIG
@@ -40,4 +41,4 @@ LUFA_OPTS += -D USB_PRODUCT="L\"rhmixxx midi controller\"" -D USB_PRODUCT_LEN=23
 
 LUFA_COMPONENTS := USB USBCLASS
 
-include ../include.mk
+include $(SPREADAVR_PATH)/include.mk
-- 
cgit v0.10.2