summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@mur.at>2015-02-24 23:46:38 +0100
committerChristian Pointner <equinox@mur.at>2015-02-24 23:46:38 +0100
commitfa231e9696af24cb1b76a58ea1724129a00a4984 (patch)
tree8f65e65193daa4f1256092e4bd7356cb82fad124
parenthhd70: added internal functions for bulk read and write (diff)
using external avr-utils now
-rw-r--r--.gitignore3
-rw-r--r--contrib/Makefile15
-rw-r--r--software/avr.README114
-rw-r--r--software/avr.defines.mk228
-rw-r--r--software/avr.include.mk162
-rw-r--r--software/avr.lib/anyio.c116
-rw-r--r--software/avr.lib/anyio.h33
-rw-r--r--software/avr.lib/cc1101.c850
-rw-r--r--software/avr.lib/cc1101.h144
-rw-r--r--software/avr.lib/cc1101_defines.h235
-rw-r--r--software/avr.lib/ds1820.c167
-rw-r--r--software/avr.lib/ds1820.h61
-rw-r--r--software/avr.lib/led.c155
-rw-r--r--software/avr.lib/led.h36
-rw-r--r--software/avr.lib/lufa-descriptor-keyboardmouse.c310
-rw-r--r--software/avr.lib/lufa-descriptor-keyboardmouse.h81
-rw-r--r--software/avr.lib/lufa-descriptor-midi.c337
-rw-r--r--software/avr.lib/lufa-descriptor-midi.h87
-rw-r--r--software/avr.lib/lufa-descriptor-rndis.c267
-rw-r--r--software/avr.lib/lufa-descriptor-rndis.h89
-rw-r--r--software/avr.lib/lufa-descriptor-usbdualserial.c394
-rw-r--r--software/avr.lib/lufa-descriptor-usbdualserial.h112
-rw-r--r--software/avr.lib/lufa-descriptor-usbserial.c280
-rw-r--r--software/avr.lib/lufa-descriptor-usbserial.h89
-rw-r--r--software/avr.lib/onewire.c571
-rw-r--r--software/avr.lib/onewire.h206
-rw-r--r--software/avr.lib/rda1846.c485
-rw-r--r--software/avr.lib/rda1846.h67
-rw-r--r--software/avr.lib/rda1846_defines.h238
-rw-r--r--software/avr.lib/serialio.c44
-rw-r--r--software/avr.lib/serialio.h32
-rw-r--r--software/avr.lib/usbio.c116
-rw-r--r--software/avr.lib/usbio.h33
-rw-r--r--software/avr.lib/util.c135
-rw-r--r--software/avr.lib/util.h32
-rw-r--r--software/avr.lufa.mk41
-rw-r--r--software/hhd70dongle.old/Makefile25
-rw-r--r--software/hhd70dongle/Makefile13
-rw-r--r--software/rda1846dongle/Makefile5
39 files changed, 32 insertions, 6376 deletions
diff --git a/.gitignore b/.gitignore
index 9f414a0..bd9abc9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-contrib/LUFA-*
+contrib/avr-utils
+contrib/.spreadavr.prepared
contrib/ChibiOS_*
contrib/kicad-libs/*.bak
contrib/kicad-libs/*.bck
diff --git a/contrib/Makefile b/contrib/Makefile
index 12cce9b..a0593ea 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -21,18 +21,18 @@
## along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
##
-LUFA_VERSION := 120219
CHIBIOS_VERSION := 2.6.6
-all: download-lufa download-chibios
+all: update-spreadavr download-chibios
+.spreadavr.prepared:
+ git clone git://git.spreadspace.org/avr-utils.git
+ touch $@
-download-lufa: LUFA-${LUFA_VERSION}.zip
-
-LUFA-${LUFA_VERSION}.zip:
- wget "http://lufa-lib.googlecode.com/files/$@" -O "$@"
- unzip $@
+update-spreadavr: .spreadavr.prepared
+ cd avr-utils/; git pull
+ $(MAKE) -C avr-utils/contrib/
download-chibios: ChibiOS_${CHIBIOS_VERSION}.zip
@@ -40,4 +40,3 @@ download-chibios: ChibiOS_${CHIBIOS_VERSION}.zip
ChibiOS_${CHIBIOS_VERSION}.zip:
wget "http://downloads.sourceforge.net/project/chibios/ChibiOS_RT%20stable/Version%20${CHIBIOS_VERSION}/$@" -O "$@"
unzip $@
-
diff --git a/software/avr.README b/software/avr.README
deleted file mode 100644
index a5d6915..0000000
--- a/software/avr.README
+++ /dev/null
@@ -1,114 +0,0 @@
-Dependencies
-============
-
-make
-avr-libc
-binutils-avr
-gcc-avr
-avrdude
-dfu-programmer
-teensy_loader
-
-
-udev example rules
-==================
-
-DFU programmable Boards:
-------------------------
-
-SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03eb", ATTR{idProduct}=="*", GROUP="plugdev", MODE:="0660"
-
-Teensy Boards:
---------------
-
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666"
-KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", SYMLINK+="ttyUSB00%n", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
-
-Arduino Boards:
----------------
-
-SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{serial}=="A6008hTA", SYMLINK+="arduino", OWNER="equinox", GROUP="equinox"
-
-Replace "A6008hTA" with the serial of your arduino board. You can obtain it
-with the following command:
-
-udevadm info --name /dev/ttyUSB0 --attribute-walk | grep ATTRs{serial}
-
-(replace ttyUSB0 with the actual device your arduino uses)
-
-
-Build
-=====
-
-Getting the source via GIT:
----------------------------
-
-git clone git://git.spreadspace.org/avr.git
-cd avr
-
-
-build and flash blink example
------------------------------
-
-# cd blink
-adapt Makefile (set BOARD_TYPE)
-# make program
-
-
-Some Hints
-==========
-
-The object files for builded libs will be called lib-<name>.o so make sure
-not to use files named like this for your own code. i.e. if you want
-to use the `led` library it's not possible to have a source file name
-lib-led.c inside your project.
-
-The anyio lib provides a failover between serial and usb-serial (using LUFA)
-streams. It's not safe to use any STDIO functions inside interrupts.
-
-To use LUFA in your project you have to provide the path to the LUFA
-source code. You may do this by calling `make` inside the contrib tree.
-But any external path is ok. In order to build the lufa object file the
-build system has to call `make clean` inside the LUFA_PATH so make sure
-there is no lufa build inside which you still need. Also paralell builds
-of several projects using the same LUFA_PATH is not possible.
-
-
-License
-=======
-
-The spreadspace AVR utils are licensed under GPLv3. You can find the
-full text of the license in the file LICENSE.
-
-Some examples are based on LUFA which has been licensed under the
-following conditions.
-
-/*
- 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.
-*/
diff --git a/software/avr.defines.mk b/software/avr.defines.mk
deleted file mode 100644
index fb54f1b..0000000
--- a/software/avr.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 = ../avr.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/avr.include.mk b/software/avr.include.mk
deleted file mode 100644
index 648b71b..0000000
--- a/software/avr.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 ../avr.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 ../avr.lufa.mk liblufa.a
- make -f ../avr.lufa.mk clean
-
-clean-lufa:
- @echo "cleaning external LUFA lib ($(LUFA_PATH))"
- make -f ../avr.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/avr.lib/anyio.c b/software/avr.lib/anyio.c
deleted file mode 100644
index 2aae54e..0000000
--- a/software/avr.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/avr.lib/anyio.h b/software/avr.lib/anyio.h
deleted file mode 100644
index 2cf4ae1..0000000
--- a/software/avr.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/avr.lib/cc1101.c b/software/avr.lib/cc1101.c
deleted file mode 100644
index 20a2bda..0000000
--- a/software/avr.lib/cc1101.c
+++ /dev/null
@@ -1,850 +0,0 @@
-/*
- * spreadspace avr utils
- *
- *
- * Copyright (C) 2013-2015 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 "cc1101.h"
-#include "cc1101_defines.h"
-
-static cc1101_driver_conf_t drv = {
- .spi_cs_enable = NULL,
- .spi_cs_disable = NULL,
- .spi_read_miso = NULL,
- .spi_write_byte = NULL,
- .spi_read_byte = NULL,
- .spi_transfer_byte = NULL,
- .freq_corr = 1.0
-};
-
-static uint8_t const pa_table_values_[] = { 0x00, 0x30, 0x20, 0x10, 0x01, 0x02, 0x11, 0x03,
- 0x12, 0x04, 0x05, 0x13, 0x06, 0x07, 0x21, 0x14, 0x08, 0x09, 0x0A, 0x15,
- 0x0B, 0x31, 0x16, 0x0C, 0x0D, 0x0E, 0x17, 0x0F, 0x22, 0x18, 0x19, 0x1A,
- 0x1B, 0x32, 0x23, 0x1C, 0x6F, 0x1D, 0x1E, 0x1F, 0x24, 0x33, 0x25, 0x34,
- 0x26, 0x6E, 0x27, 0x35, 0x28, 0x6D, 0x6C, 0x29, 0x36, 0x6B, 0x2A, 0x6A,
- 0x37, 0x69, 0x2B, 0x68, 0x38, 0x2C, 0x8F, 0x67, 0x2D, 0x57, 0x39, 0x66,
- 0x2E, 0x56, 0x3A, 0x2F, 0x65, 0x55, 0x3B, 0x64, 0x54, 0x3C, 0x63, 0x3D,
- 0x53, 0x3E, 0x62, 0x3F, 0x52, 0x40, 0x61, 0x51, 0x60, 0x50, 0x8E, 0x8D,
- 0x8C, 0xCF, 0x8B, 0x8A, 0x89, 0x88, 0x87, 0x86, 0x85, 0xCE, 0x84, 0x83,
- 0xCD, 0x82, 0xCC, 0x81, 0xCB, 0x80, 0xCA, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5,
- 0xC4, 0xC3, 0xC2, 0xC1, 0xC0 };
-
-#define PA_TABLE_VALUES_MAX ((sizeof(pa_table_values_)/sizeof(uint8_t))-1)
-
-/*
- * internal functions
- */
-
-static inline void cc1101_spi_wait_rdy(void)
-{
- while(drv.spi_read_miso()); // wait for CHP_RDY to go low, TODO: timeout...
-}
-
-static uint8_t cc1101_spi_strobe_command(const uint8_t cmd)
-{
- if(cmd < CC1101_CMD_MIN || cmd > CC1101_CMD_MAX)
- return -1;
-
- drv.spi_cs_enable();
- cc1101_spi_wait_rdy();
-
- uint8_t status = drv.spi_transfer_byte(CC1101_HEADER_COMMAND | cmd);
-
- drv.spi_cs_disable();
- return status;
-}
-
-static uint8_t cc1101_spi_read_register(const uint8_t addr)
-{
- if(addr > CC1101_ADDR_MAX || (addr >= CC1101_CMD_MIN && addr <= CC1101_CMD_MAX))
- return 0xFF;
-
- uint8_t hdr = addr;
- if(addr >= CC1101_REG_RO_MIN && addr <= CC1101_REG_RO_MAX)
- hdr |= CC1101_HEADER_READONLY;
- else
- hdr |= CC1101_HEADER_READ;
-
- drv.spi_cs_enable();
- cc1101_spi_wait_rdy();
-
- drv.spi_write_byte(hdr);
- uint8_t data = drv.spi_read_byte();
-
- drv.spi_cs_disable();
- return data;
-}
-
-static void cc1101_spi_write_register(const uint8_t addr, const uint8_t data)
-{
- if(addr > CC1101_REG_RW_MAX && addr != CC1101_REG_PATABLE && addr != CC1101_REG_FIFO)
- return;
-
- drv.spi_cs_enable();
- cc1101_spi_wait_rdy();
-
- drv.spi_write_byte(CC1101_HEADER_WRITE | addr);
- drv.spi_write_byte(data);
-
- drv.spi_cs_disable();
-}
-
-// this is an internal-internal function - never use this outside of internal functions
-static uint8_t cc1101_spi_read_register_burst_raw(const uint8_t addr, uint8_t* data, const uint8_t l)
-{
- drv.spi_cs_enable();
- cc1101_spi_wait_rdy();
-
- drv.spi_write_byte(CC1101_HEADER_READ | CC1101_HEADER_BURST | addr);
- uint8_t i;
- for(i = 0; i < l; ++i)
- data[i] = drv.spi_read_byte();
-
- drv.spi_cs_disable();
- return i;
-}
-
-static uint8_t cc1101_spi_read_register_burst(const uint8_t addr, uint8_t* data, const uint8_t len)
-{
- if(addr <= CC1101_REG_RW_MAX) {
- uint8_t l = (CC1101_REG_RW_MAX - addr) + 1;
- l = (len > l) ? l : len;
- return cc1101_spi_read_register_burst_raw(addr, data, l);
-
- } else if(CC1101_REG_PATABLE) {
- uint8_t l = (len > CC1101_PATABLE_SIZE) ? CC1101_PATABLE_SIZE : len;
- return cc1101_spi_read_register_burst_raw(addr, data, l);
-
- } else if(CC1101_REG_FIFO) {
- uint8_t l = (len > CC1101_FIFO_MAX_LEN) ? CC1101_FIFO_MAX_LEN : len;
- return cc1101_spi_read_register_burst_raw(addr, data, l);
- }
- return 0;
-}
-
-// this is an internal-internal function - never use this outside of internal functions
-static uint8_t cc1101_spi_write_register_burst_raw(const uint8_t addr, uint8_t* data, const uint8_t l)
-{
- drv.spi_cs_enable();
- cc1101_spi_wait_rdy();
-
- drv.spi_write_byte(CC1101_HEADER_WRITE | CC1101_HEADER_BURST | addr);
- uint8_t i;
- for(i = 0; i < l; ++i)
- drv.spi_write_byte(data[i]);
-
- drv.spi_cs_disable();
- return i;
-}
-
-static uint8_t cc1101_spi_write_register_burst(const uint8_t addr, uint8_t* data, const uint8_t len)
-{
- if(addr <= CC1101_REG_RW_MAX) {
- uint8_t l = (CC1101_REG_RW_MAX - addr) + 1;
- l = (len > l) ? l : len;
- return cc1101_spi_write_register_burst_raw(addr, data, l);
-
- } else if(CC1101_REG_PATABLE) {
- uint8_t l = (len > CC1101_PATABLE_SIZE) ? CC1101_PATABLE_SIZE : len;
- return cc1101_spi_write_register_burst_raw(addr, data, l);
-
- } else if(CC1101_REG_FIFO) {
- uint8_t l = (len > CC1101_FIFO_MAX_LEN) ? CC1101_FIFO_MAX_LEN : len;
- return cc1101_spi_write_register_burst_raw(addr, data, l);
- }
- return 0;
-}
-
-
-/*
- * EXTERNAL INTERFACE
- */
-
-void cc1101_init(cc1101_driver_conf_t conf)
-{
- drv = conf;
- cc1101_soft_reset();
-}
-
-void cc1101_reg_init(void)
-{
- cc1101_set_iocfg0(CC1101_GDO_CFG_3STATE);
- cc1101_set_iocfg1(CC1101_GDO_CFG_3STATE);
- cc1101_set_iocfg2(CC1101_GDO_CFG_3STATE);
-}
-
-void cc1101_soft_reset(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_SRES);
-}
-
-
-void cc1101_powerdown(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_SPWD);
-}
-
-void cc1101_idle(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_SIDLE);
-}
-
-void cc1101_osc_off(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_SXOFF);
-}
-
-void cc1101_calibrate(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_SCAL);
-}
-
-void cc1101_fasttxon(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_SFSTXON);
-}
-
-void cc1101_rx(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_SRX);
-}
-
-void cc1101_tx(void)
-{
- cc1101_spi_strobe_command(CC1101_CMD_STX);
-}
-
-char* cc1101_state_to_string(cc1101_state_t state)
-{
- switch(state) {
- case sleep: return "sleep";
- case idle: return "idle";
- case xoff: return "xoff";
- case mancal: return "mancal";
- case fs_wakeup: return "fs_wakeup";
- case calibrate: return "calibrate";
- case settling: return "settling";
- case rx: return "rx";
- case txrx_settling: return "txrx_settling";
- case rxfifo_overflow: return "rxfifo_overflow";
- case fstxon: return "fstxon";
- case tx: return "tx";
- case rxtx_settling: return "rxtx_settling";
- case txfifo_underflow: return "txfifo_underflow";
- default: return "unknown";
- }
-}
-
-static cc1101_state_t cc1101_marcstate_to_state(uint8_t marcstate)
-{
- switch(marcstate) {
- case CC1101_MARCSTATE_SLEEP: return sleep;
- case CC1101_MARCSTATE_IDLE: return idle;
- case CC1101_MARCSTATE_XOFF: return xoff;
- case CC1101_MARCSTATE_VCOON_MC:
- case CC1101_MARCSTATE_REGON_MC:
- case CC1101_MARCSTATE_MANCAL: return mancal;
- case CC1101_MARCSTATE_VCOON:
- case CC1101_MARCSTATE_REGON: return fs_wakeup;
- case CC1101_MARCSTATE_STARTCAL: return calibrate;
- case CC1101_MARCSTATE_BWBOOST:
- case CC1101_MARCSTATE_FS_LOCK:
- case CC1101_MARCSTATE_IFADCON: return settling;
- case CC1101_MARCSTATE_ENDCAL: return calibrate;
- case CC1101_MARCSTATE_RX:
- case CC1101_MARCSTATE_RX_END:
- case CC1101_MARCSTATE_RX_RST: return rx;
- case CC1101_MARCSTATE_TXRX_SWITCH: return txrx_settling;
- case CC1101_MARCSTATE_RXFIFO_OVERFLOW: return rxfifo_overflow;
- case CC1101_MARCSTATE_FSTXON: return fstxon;
- case CC1101_MARCSTATE_TX:
- case CC1101_MARCSTATE_TX_END: return tx;
- case CC1101_MARCSTATE_RXTX_SWITCH: return rxtx_settling;
- case CC1101_MARCSTATE_TXFIFO_UNDERFLOW: return txfifo_underflow;
- default: return unknown;
- }
-}
-
-cc1101_state_t cc1101_get_state(void)
-{
- return cc1101_marcstate_to_state(cc1101_get_marcstate());
-}
-
-
-
-
-
-uint32_t cc1101_get_freq_hz(void)
-{
- return (uint32_t)((float)(cc1101_get_freq()) * drv.freq_corr);
-}
-
-void cc1101_set_freq_hz(uint32_t hz)
-{
- uint32_t freq = (uint32_t)((float)hz / drv.freq_corr);
- cc1101_set_freq(freq);
-}
-
-
-
-// normalized register access
-
-uint8_t cc1101_get_iocfg0(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_IOCFG0) & CC1101_REG_RW_IOCFG0_MASK;
-}
-
-void cc1101_set_iocfg0(uint8_t iocfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_IOCFG0, iocfg & CC1101_REG_RW_IOCFG0_MASK);
-}
-
-uint8_t cc1101_get_iocfg1(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_IOCFG1) & CC1101_REG_RW_IOCFG1_MASK;
-}
-
-void cc1101_set_iocfg1(uint8_t iocfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_IOCFG1, iocfg & CC1101_REG_RW_IOCFG1_MASK);
-}
-
-uint8_t cc1101_get_iocfg2(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_IOCFG2) & CC1101_REG_RW_IOCFG2_MASK;
-}
-
-void cc1101_set_iocfg2(uint8_t iocfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_IOCFG2, iocfg & CC1101_REG_RW_IOCFG2_MASK);
-}
-
-
-uint8_t cc1101_get_fifothr(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_FIFOTHR) & CC1101_REG_RW_FIFOTHR_MASK;
-}
-
-void cc1101_set_fifothr(uint8_t fifothr)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FIFOTHR, fifothr & CC1101_REG_RW_FIFOTHR_MASK);
-}
-
-
-uint16_t cc1101_get_sync(void)
-{
- uint16_t sync = cc1101_spi_read_register(CC1101_REG_RW_SYNC1) & CC1101_REG_RW_SYNC1_MASK;
- sync = sync << 8;
- sync |= cc1101_spi_read_register(CC1101_REG_RW_SYNC0) & CC1101_REG_RW_SYNC0_MASK;
- return sync;
-}
-
-void cc1101_set_sync(uint16_t sync)
-{
- cc1101_spi_write_register(CC1101_REG_RW_SYNC0, (uint8_t)(sync) & CC1101_REG_RW_SYNC0_MASK);
- sync = sync >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_SYNC1, (uint8_t)(sync) & CC1101_REG_RW_SYNC1_MASK);
-}
-
-uint8_t cc1101_get_pktlen(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_PKTLEN) & CC1101_REG_RW_PKTLEN_MASK;
-}
-
-void cc1101_set_pktlen(uint8_t len)
-{
- cc1101_spi_write_register(CC1101_REG_RW_PKTLEN, len & CC1101_REG_RW_PKTLEN_MASK);
-}
-
-uint16_t cc1101_get_pktctrl(void)
-{
- uint16_t ctrl = cc1101_spi_read_register(CC1101_REG_RW_PKTCTRL1) & CC1101_REG_RW_PKTCTRL1_MASK;
- ctrl = ctrl << 8;
- ctrl |= cc1101_spi_read_register(CC1101_REG_RW_PKTCTRL0) & CC1101_REG_RW_PKTCTRL0_MASK;
- return ctrl;
-}
-
-void cc1101_set_pktctrl(uint16_t ctrl)
-{
- cc1101_spi_write_register(CC1101_REG_RW_PKTCTRL0, (uint8_t)(ctrl) & CC1101_REG_RW_PKTCTRL0_MASK);
- ctrl = ctrl >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_PKTCTRL1, (uint8_t)(ctrl) & CC1101_REG_RW_PKTCTRL1_MASK);
-}
-
-uint8_t cc1101_get_addr(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_ADDR) & CC1101_REG_RW_ADDR_MASK;
-}
-
-void cc1101_set_addr(uint8_t addr)
-{
- cc1101_spi_write_register(CC1101_REG_RW_ADDR, addr & CC1101_REG_RW_ADDR_MASK);
-}
-
-
-uint8_t cc1101_get_channr(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_CHANNR) & CC1101_REG_RW_CHANNR_MASK;
-}
-
-void cc1101_set_channr(uint8_t nr)
-{
- cc1101_spi_write_register(CC1101_REG_RW_CHANNR, nr & CC1101_REG_RW_CHANNR_MASK);
-}
-
-uint8_t cc1101_get_iffreq(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_FSCTRL1) & CC1101_REG_RW_FSCTRL1_MASK;
-}
-
-void cc1101_set_iffreq(uint8_t iffreq)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FSCTRL1, iffreq & CC1101_REG_RW_FSCTRL1_MASK);
-}
-
-uint8_t cc1101_get_freq_offset(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_FSCTRL0) & CC1101_REG_RW_FSCTRL0_MASK;
-}
-
-void cc1101_set_freq_offset(uint8_t freqoff)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FSCTRL0, freqoff & CC1101_REG_RW_FSCTRL0_MASK);
-}
-
-uint32_t cc1101_get_freq(void)
-{
- uint32_t freq = cc1101_spi_read_register(CC1101_REG_RW_FREQ2) & CC1101_REG_RW_FREQ2_MASK;
- freq = freq << 8;
- freq |= cc1101_spi_read_register(CC1101_REG_RW_FREQ1) & CC1101_REG_RW_FREQ1_MASK;
- freq = freq << 8;
- freq |= cc1101_spi_read_register(CC1101_REG_RW_FREQ0) & CC1101_REG_RW_FREQ0_MASK;
- return freq;
-}
-
-void cc1101_set_freq(uint32_t freq)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FREQ0, (uint8_t)(freq) & CC1101_REG_RW_FREQ0_MASK);
- freq = freq >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_FREQ1, (uint8_t)(freq) & CC1101_REG_RW_FREQ1_MASK);
- freq = freq >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_FREQ2, (uint8_t)(freq) & CC1101_REG_RW_FREQ2_MASK);
-}
-
-uint64_t cc1101_get_modemcfg(void)
-{
- uint64_t cfg = cc1101_spi_read_register(CC1101_REG_RW_MDMCFG4) & CC1101_REG_RW_MDMCFG4_MASK;
- cfg = cfg << 8;
- cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG3) & CC1101_REG_RW_MDMCFG3_MASK;
- cfg = cfg << 8;
- cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG2) & CC1101_REG_RW_MDMCFG2_MASK;
- cfg = cfg << 8;
- cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG1) & CC1101_REG_RW_MDMCFG1_MASK;
- cfg = cfg << 8;
- cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG0) & CC1101_REG_RW_MDMCFG0_MASK;
- return cfg;
-}
-
-void cc1101_set_modemcfg(uint64_t cfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_MDMCFG0, cfg & CC1101_REG_RW_MDMCFG0_MASK);
- cfg = cfg >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_MDMCFG1, cfg & CC1101_REG_RW_MDMCFG1_MASK);
- cfg = cfg >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_MDMCFG2, cfg & CC1101_REG_RW_MDMCFG2_MASK);
- cfg = cfg >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_MDMCFG3, cfg & CC1101_REG_RW_MDMCFG3_MASK);
- cfg = cfg >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_MDMCFG4, cfg & CC1101_REG_RW_MDMCFG4_MASK);
-}
-
-uint8_t cc1101_get_deviatn(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_DEVIATN) & CC1101_REG_RW_DEVIATN_MASK;
-}
-
-void cc1101_set_deviatn(uint8_t dev)
-{
- cc1101_spi_write_register(CC1101_REG_RW_DEVIATN, dev & CC1101_REG_RW_DEVIATN_MASK);
-}
-
-
-
-uint32_t cc1101_get_mcsm(void)
-{
- uint32_t cfg = cc1101_spi_read_register(CC1101_REG_RW_MCSM2) & CC1101_REG_RW_MCSM2_MASK;
- cfg = cfg << 8;
- cfg |= cc1101_spi_read_register(CC1101_REG_RW_MCSM1) & CC1101_REG_RW_MCSM1_MASK;
- cfg = cfg << 8;
- cfg |= cc1101_spi_read_register(CC1101_REG_RW_MCSM0) & CC1101_REG_RW_MCSM0_MASK;
- return cfg;
-}
-
-void cc1101_set_mcsm(uint32_t cfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_MCSM0, cfg & CC1101_REG_RW_MCSM0_MASK);
- cfg = cfg >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_MCSM1, cfg & CC1101_REG_RW_MCSM1_MASK);
- cfg = cfg >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_MCSM2, cfg & CC1101_REG_RW_MCSM2_MASK);
-}
-
-
-uint8_t cc1101_get_foccfg(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_FOCCFG) & CC1101_REG_RW_FOCCFG_MASK;
-}
-
-void cc1101_set_foccfg(uint8_t cfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FOCCFG, cfg & CC1101_REG_RW_FOCCFG_MASK);
-}
-
-uint8_t cc1101_get_bscfg(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_BSCFG) & CC1101_REG_RW_BSCFG_MASK;
-}
-
-void cc1101_set_bscfg(uint8_t cfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_BSCFG, cfg & CC1101_REG_RW_BSCFG_MASK);
-}
-
-uint32_t cc1101_get_agcctrl(void)
-{
- uint32_t ctrl = cc1101_spi_read_register(CC1101_REG_RW_AGCCTRL2) & CC1101_REG_RW_AGCCTRL2_MASK;
- ctrl = ctrl << 8;
- ctrl |= cc1101_spi_read_register(CC1101_REG_RW_AGCCTRL1) & CC1101_REG_RW_AGCCTRL1_MASK;
- ctrl = ctrl << 8;
- ctrl |= cc1101_spi_read_register(CC1101_REG_RW_AGCCTRL0) & CC1101_REG_RW_AGCCTRL0_MASK;
- return ctrl;
-}
-
-void cc1101_set_agcctrl(uint32_t ctrl)
-{
- cc1101_spi_write_register(CC1101_REG_RW_AGCCTRL0, ctrl & CC1101_REG_RW_AGCCTRL0_MASK);
- ctrl = ctrl >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_AGCCTRL1, ctrl & CC1101_REG_RW_AGCCTRL1_MASK);
- ctrl = ctrl >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_AGCCTRL2, ctrl & CC1101_REG_RW_AGCCTRL2_MASK);
-}
-
-uint16_t cc1101_get_worevt(void)
-{
- uint16_t timeout = cc1101_spi_read_register(CC1101_REG_RW_WOREVT1) & CC1101_REG_RW_WOREVT1_MASK;
- timeout = timeout << 8;
- timeout |= cc1101_spi_read_register(CC1101_REG_RW_WOREVT0) & CC1101_REG_RW_WOREVT0_MASK;
- return timeout;
-}
-
-void cc1101_set_worevt(uint16_t timeout)
-{
- cc1101_spi_write_register(CC1101_REG_RW_WOREVT0, timeout & CC1101_REG_RW_WOREVT0_MASK);
- timeout = timeout >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_WOREVT1, timeout & CC1101_REG_RW_WOREVT1_MASK);
-}
-
-uint8_t cc1101_get_worctrl(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_WORCTRL) & CC1101_REG_RW_WORCTRL_MASK;
-}
-
-void cc1101_set_worctrl(uint8_t ctrl)
-{
- cc1101_spi_write_register(CC1101_REG_RW_WORCTRL, ctrl & CC1101_REG_RW_WORCTRL_MASK);
-}
-
-
-uint16_t cc1101_get_frend(void)
-{
- uint16_t cfg = cc1101_spi_read_register(CC1101_REG_RW_FREND1) & CC1101_REG_RW_FREND1_MASK;
- cfg = cfg << 8;
- cfg |= cc1101_spi_read_register(CC1101_REG_RW_FREND0) & CC1101_REG_RW_FREND0_MASK;
- return cfg;
-}
-
-void cc1101_set_frend(uint16_t cfg)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FREND0, cfg & CC1101_REG_RW_FREND0_MASK);
- cfg = cfg >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_FREND1, cfg & CC1101_REG_RW_FREND1_MASK);
-}
-
-uint32_t cc1101_get_fscal(void)
-{
- uint32_t cal = cc1101_spi_read_register(CC1101_REG_RW_FSCAL3) & CC1101_REG_RW_FSCAL3_MASK;
- cal = cal << 8;
- cal = cc1101_spi_read_register(CC1101_REG_RW_FSCAL2) & CC1101_REG_RW_FSCAL2_MASK;
- cal = cal << 8;
- cal |= cc1101_spi_read_register(CC1101_REG_RW_FSCAL1) & CC1101_REG_RW_FSCAL1_MASK;
- cal = cal << 8;
- cal |= cc1101_spi_read_register(CC1101_REG_RW_FSCAL0) & CC1101_REG_RW_FSCAL0_MASK;
- return cal;
-}
-
-void cc1101_set_fscal(uint32_t cal)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FSCAL0, cal & CC1101_REG_RW_FSCAL0_MASK);
- cal = cal >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_FSCAL1, cal & CC1101_REG_RW_FSCAL1_MASK);
- cal = cal >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_FSCAL2, cal & CC1101_REG_RW_FSCAL2_MASK);
- cal = cal >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_FSCAL3, cal & CC1101_REG_RW_FSCAL3_MASK);
-}
-
-uint16_t cc1101_get_rcctrl(void)
-{
- uint16_t ctrl = cc1101_spi_read_register(CC1101_REG_RW_RCCTRL1) & CC1101_REG_RW_RCCTRL1_MASK;
- ctrl = ctrl << 8;
- ctrl |= cc1101_spi_read_register(CC1101_REG_RW_RCCTRL0) & CC1101_REG_RW_RCCTRL0_MASK;
- return ctrl;
-}
-
-void cc1101_set_rcctrl(uint16_t ctrl)
-{
- cc1101_spi_write_register(CC1101_REG_RW_RCCTRL0, ctrl & CC1101_REG_RW_RCCTRL0_MASK);
- ctrl = ctrl >> 8;
- cc1101_spi_write_register(CC1101_REG_RW_RCCTRL1, ctrl & CC1101_REG_RW_RCCTRL1_MASK);
-}
-
-
-uint8_t cc1101_get_fstest(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_FSTEST) & CC1101_REG_RW_FSTEST_MASK;
-}
-
-void cc1101_set_fstest(uint8_t test)
-{
- cc1101_spi_write_register(CC1101_REG_RW_FSTEST, test & CC1101_REG_RW_FSTEST_MASK);
-}
-
-uint8_t cc1101_get_ptest(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_PTEST) & CC1101_REG_RW_PTEST_MASK;
-}
-
-void cc1101_set_ptest(uint8_t test)
-{
- cc1101_spi_write_register(CC1101_REG_RW_PTEST, test & CC1101_REG_RW_PTEST_MASK);
-}
-
-uint8_t cc1101_get_agctest(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_AGCTEST) & CC1101_REG_RW_AGCTEST_MASK;
-}
-
-void cc1101_set_agctest(uint8_t test)
-{
- cc1101_spi_write_register(CC1101_REG_RW_AGCTEST, test & CC1101_REG_RW_AGCTEST_MASK);
-}
-
-uint8_t cc1101_get_test0(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_TEST0) & CC1101_REG_RW_TEST0_MASK;
-}
-
-void cc1101_set_test0(uint8_t test)
-{
- cc1101_spi_write_register(CC1101_REG_RW_TEST0, test & CC1101_REG_RW_TEST0_MASK);
-}
-
-uint8_t cc1101_get_test1(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_TEST1) & CC1101_REG_RW_TEST1_MASK;
-}
-
-void cc1101_set_test1(uint8_t test)
-{
- cc1101_spi_write_register(CC1101_REG_RW_TEST1, test & CC1101_REG_RW_TEST1_MASK);
-}
-
-uint8_t cc1101_get_test2(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RW_TEST2) & CC1101_REG_RW_TEST2_MASK;
-}
-
-void cc1101_set_test2(uint8_t test)
-{
- cc1101_spi_write_register(CC1101_REG_RW_TEST2, test & CC1101_REG_RW_TEST2_MASK);
-}
-
-
-uint8_t cc1101_get_partnum(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_PARTNUM) & CC1101_REG_RO_PARTNUM_MASK;
-}
-
-uint8_t cc1101_get_chip_version(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_VERSION) & CC1101_REG_RO_VERSION_MASK;
-}
-
-uint8_t cc1101_get_freq_offset_est(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_FREQUEST) & CC1101_REG_RO_FREQUEST_MASK;
-}
-
-uint8_t cc1101_get_lqi(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_LQI) & CC1101_REG_RO_LQI_MASK;
-}
-
-int8_t cc1101_get_rssi(void)
-{
- return (int8_t)cc1101_spi_read_register(CC1101_REG_RO_RSSI) & CC1101_REG_RO_RSSI_MASK;
-}
-
-uint8_t cc1101_get_marcstate(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_MARCSTATE) & CC1101_REG_RO_MARCSTATE_MASK;
-}
-
-uint16_t cc1101_get_wortime(void)
-{
- uint16_t w = cc1101_spi_read_register(CC1101_REG_RO_WORTIME1) & CC1101_REG_RO_WORTIME1_MASK;
- w = w << 8;
- w |= cc1101_spi_read_register(CC1101_REG_RO_WORTIME0) & CC1101_REG_RO_WORTIME0_MASK;
- return w;
-}
-
-uint8_t cc1101_get_pkt_status(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_PKTSTATUS) & CC1101_REG_RO_PKTSTATUS_MASK;
-}
-
-uint8_t cc1101_get_tx_bytes(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_TXBYTES) & CC1101_REG_RO_TXBYTES_MASK;
-}
-
-uint8_t cc1101_get_rx_bytes(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_RXBYTES) & CC1101_REG_RO_RXBYTES_MASK;
-}
-
-uint8_t cc1101_get_rcctrl0_status(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_RCCTRL0_STATUS) & CC1101_REG_RO_RCCTRL0_STATUS_MASK;
-}
-
-uint8_t cc1101_get_rcctrl1_status(void)
-{
- return cc1101_spi_read_register(CC1101_REG_RO_RCCTRL1_STATUS) & CC1101_REG_RO_RCCTRL1_STATUS_MASK;
-}
-
-
-
-static char* cc1101_config_reg_to_string(uint8_t addr)
-{
- switch(addr) {
- case CC1101_REG_RW_IOCFG2: return "IOCFG2";
- case CC1101_REG_RW_IOCFG1: return "IOCFG1";
- case CC1101_REG_RW_IOCFG0: return "IOCFG0";
- case CC1101_REG_RW_FIFOTHR: return "FIFOTHR";
- case CC1101_REG_RW_SYNC1: return "SYNC1";
- case CC1101_REG_RW_SYNC0: return "SYNC0";
- case CC1101_REG_RW_PKTLEN: return "PKTLEN";
- case CC1101_REG_RW_PKTCTRL1: return "PKTCTRL1";
- case CC1101_REG_RW_PKTCTRL0: return "PKTCTRL0";
- case CC1101_REG_RW_ADDR: return "ADDR";
- case CC1101_REG_RW_CHANNR: return "CHANNR";
- case CC1101_REG_RW_FSCTRL1: return "FSCTRL1";
- case CC1101_REG_RW_FSCTRL0: return "FSCTRL0";
- case CC1101_REG_RW_FREQ2: return "FREQ2";
- case CC1101_REG_RW_FREQ1: return "FREQ1";
- case CC1101_REG_RW_FREQ0: return "FREQ0";
- case CC1101_REG_RW_MDMCFG4: return "MDMCFG4";
- case CC1101_REG_RW_MDMCFG3: return "MDMCFG3";
- case CC1101_REG_RW_MDMCFG2: return "MDMCFG2";
- case CC1101_REG_RW_MDMCFG1: return "MDMCFG1";
- case CC1101_REG_RW_MDMCFG0: return "MDMCFG0";
- case CC1101_REG_RW_DEVIATN: return "DEVIATN";
- case CC1101_REG_RW_MCSM2: return "MCSM2";
- case CC1101_REG_RW_MCSM1: return "MCSM1";
- case CC1101_REG_RW_MCSM0: return "MCSM0";
- case CC1101_REG_RW_FOCCFG: return "FOCCFG";
- case CC1101_REG_RW_BSCFG: return "BSCFG";
- case CC1101_REG_RW_AGCCTRL2: return "AGCCTRL2";
- case CC1101_REG_RW_AGCCTRL1: return "AGCCTRL1";
- case CC1101_REG_RW_AGCCTRL0: return "AGCCTRL0";
- case CC1101_REG_RW_WOREVT1: return "WOREVT1";
- case CC1101_REG_RW_WOREVT0: return "WOREVT0";
- case CC1101_REG_RW_WORCTRL: return "WORCTRL";
- case CC1101_REG_RW_FREND1: return "FREND1";
- case CC1101_REG_RW_FREND0: return "FREND0";
- case CC1101_REG_RW_FSCAL3: return "FSCAL3";
- case CC1101_REG_RW_FSCAL2: return "FSCAL2";
- case CC1101_REG_RW_FSCAL1: return "FSCAL1";
- case CC1101_REG_RW_FSCAL0: return "FSCAL0";
- case CC1101_REG_RW_RCCTRL1: return "RCCTRL1";
- case CC1101_REG_RW_RCCTRL0: return "RCCTRL0";
- case CC1101_REG_RW_FSTEST: return "FSTEST";
- case CC1101_REG_RW_PTEST: return "PTEST";
- case CC1101_REG_RW_AGCTEST: return "AGCTEST";
- case CC1101_REG_RW_TEST2: return "TEST2";
- case CC1101_REG_RW_TEST1: return "TEST1";
- case CC1101_REG_RW_TEST0: return "TEST0";
- default: return "unknown";
- }
-}
-
-static char* cc1101_status_reg_to_string(uint8_t addr)
-{
- switch(addr) {
- case CC1101_REG_RO_PARTNUM: return "PARTNUM";
- case CC1101_REG_RO_VERSION: return "VERSION";
- case CC1101_REG_RO_FREQUEST: return "FREQUEST";
- case CC1101_REG_RO_LQI: return "LQI";
- case CC1101_REG_RO_RSSI: return "RSSI";
- case CC1101_REG_RO_MARCSTATE: return "MARCSTATE";
- case CC1101_REG_RO_WORTIME1: return "WORTIME1";
- case CC1101_REG_RO_WORTIME0: return "WORTIME0";
- case CC1101_REG_RO_PKTSTATUS: return "PKTSTATUS";
- case CC1101_REG_RO_VCO_VC_DAC: return "VCO_VC_DAC";
- case CC1101_REG_RO_TXBYTES: return "TXBYTES";
- case CC1101_REG_RO_RXBYTES: return "RXBYTES";
- case CC1101_REG_RO_RCCTRL1_STATUS: return "RCCTRL1_STATUS";
- case CC1101_REG_RO_RCCTRL0_STATUS: return "RCCTRL0_STATUS";
- default: return "unknown";
- }
-}
-
-void cc1101_dump_register(void)
-{
- printf("CC1101: register dump\r\n\r\n");
-
- int i;
-
- printf(" config (read/write) register:\r\n");
- for(i=0; i<=CC1101_REG_RW_MAX; ++i) {
- uint8_t data = cc1101_spi_read_register(i); // TODO: use burst mode...
- printf(" 0x%02X (%s): 0x%02X\r\n", i, cc1101_config_reg_to_string(i), data);
- }
- printf("\r\n");
-
- printf(" status (read-only) register:\r\n");
- for(i=CC1101_REG_RO_MIN; i<=CC1101_REG_RO_MAX; ++i) {
- uint8_t data = cc1101_spi_read_register(i);
- printf(" 0x%02X (%s): 0x%02X\r\n", i, cc1101_status_reg_to_string(i), data);
- }
- printf("\r\n");
-}
diff --git a/software/avr.lib/cc1101.h b/software/avr.lib/cc1101.h
deleted file mode 100644
index 48454b6..0000000
--- a/software/avr.lib/cc1101.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * spreadspace avr utils
- *
- *
- * Copyright (C) 2013-2015 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_cc1101_h_INCLUDED
-#define SPREADAVR_cc1101_h_INCLUDED
-
-typedef enum { unknown, sleep, idle, xoff, mancal, fs_wakeup, calibrate, settling, rx, txrx_settling,
- rxfifo_overflow, fstxon, tx, rxtx_settling, txfifo_underflow } cc1101_state_t;
-char* cc1101_state_to_string(cc1101_state_t);
-
-#define CC1101_FREQ_CORR(xtal) ((float)(xtal/65536.0))
-
-typedef struct {
- void (*spi_cs_enable)(void);
- void (*spi_cs_disable)(void);
- uint8_t (*spi_read_miso)(void);
- void (*spi_write_byte)(const uint8_t);
- uint8_t (*spi_read_byte)(void);
- uint8_t (*spi_transfer_byte)(const uint8_t);
- float freq_corr;
-} cc1101_driver_conf_t;
-
-// high level interface
-
-void cc1101_init(cc1101_driver_conf_t conf);
-void cc1101_reg_init(void);
-void cc1101_soft_reset(void);
-
-void cc1101_powerdown(void);
-void cc1101_idle(void);
-void cc1101_osc_off(void);
-void cc1101_calibrate(void);
-void cc1101_fasttxon(void);
-void cc1101_rx(void);
-void cc1101_tx(void);
-cc1101_state_t cc1101_get_state(void);
-
-uint32_t cc1101_get_freq_hz(void);
-void cc1101_set_freq_hz(uint32_t hz);
-
-
-// normalized register access
-
-uint8_t cc1101_get_iocfg0(void);
-void cc1101_set_iocfg0(uint8_t iocfg);
-uint8_t cc1101_get_iocfg1(void);
-void cc1101_set_iocfg1(uint8_t iocfg);
-uint8_t cc1101_get_iocfg2(void);
-void cc1101_set_iocfg2(uint8_t iocfg);
-
-uint8_t cc1101_get_fifothr(void);
-void cc1101_set_fifothr(uint8_t fifothr);
-
-uint16_t cc1101_get_sync(void);
-void cc1101_set_sync(uint16_t sync);
-uint8_t cc1101_get_pktlen(void);
-void cc1101_set_pktlen(uint8_t len);
-uint16_t cc1101_get_pktctrl(void);
-void cc1101_set_pktctrl(uint16_t ctrl);
-uint8_t cc1101_get_addr(void);
-void cc1101_set_addr(uint8_t addr);
-
-uint8_t cc1101_get_channr(void);
-void cc1101_set_channr(uint8_t nr);
-uint8_t cc1101_get_iffreq(void);
-void cc1101_set_iffreq(uint8_t iffreq);
-uint8_t cc1101_get_freq_offset(void);
-void cc1101_set_freq_offset(uint8_t freqoff);
-uint32_t cc1101_get_freq(void);
-void cc1101_set_freq(uint32_t freq);
-uint64_t cc1101_get_modemcfg(void);
-void cc1101_set_modemcfg(uint64_t cfg);
-uint8_t cc1101_get_deviatn(void);
-void cc1101_set_deviatn(uint8_t dev);
-
-uint32_t cc1101_get_mcsm(void);
-void cc1101_set_mcsm(uint32_t cfg);
-
-uint8_t cc1101_get_foccfg(void);
-void cc1101_set_foccfg(uint8_t cfg);
-uint8_t cc1101_get_bscfg(void);
-void cc1101_set_bscfg(uint8_t cfg);
-uint32_t cc1101_get_agcctrl(void);
-void cc1101_set_agcctrl(uint32_t ctrl);
-uint16_t cc1101_get_worevt(void);
-void cc1101_set_worevt(uint16_t timeout);
-uint8_t cc1101_get_worctrl(void);
-void cc1101_set_worctrl(uint8_t ctrl);
-
-uint16_t cc1101_get_frend(void);
-void cc1101_set_frend(uint16_t cfg);
-uint32_t cc1101_get_fscal(void);
-void cc1101_set_fscal(uint32_t cal);
-uint16_t cc1101_get_rcctrl(void);
-void cc1101_set_rcctrl(uint16_t ctrl);
-
-uint8_t cc1101_get_fstest(void);
-void cc1101_set_fstest(uint8_t test);
-uint8_t cc1101_get_ptest(void);
-void cc1101_set_ptest(uint8_t test);
-uint8_t cc1101_get_agctest(void);
-void cc1101_set_agctest(uint8_t test);
-uint8_t cc1101_get_test0(void);
-void cc1101_set_test0(uint8_t test);
-uint8_t cc1101_get_test1(void);
-void cc1101_set_test1(uint8_t test);
-uint8_t cc1101_get_test2(void);
-void cc1101_set_test2(uint8_t test);
-
-uint8_t cc1101_get_partnum(void);
-uint8_t cc1101_get_chip_version(void);
-uint8_t cc1101_get_freq_offset_est(void);
-uint8_t cc1101_get_lqi(void);
-int8_t cc1101_get_rssi(void);
-uint8_t cc1101_get_marcstate(void);
-uint16_t cc1101_get_wortime(void);
-uint8_t cc1101_get_pkt_status(void);
-uint8_t cc1101_get_tx_bytes(void);
-uint8_t cc1101_get_rx_bytes(void);
-uint8_t cc1101_get_rcctrl0_status(void);
-uint8_t cc1101_get_rcctrl1_status(void);
-
-void cc1101_dump_register(void);
-
-#endif
diff --git a/software/avr.lib/cc1101_defines.h b/software/avr.lib/cc1101_defines.h
deleted file mode 100644
index 6018e60..0000000
--- a/software/avr.lib/cc1101_defines.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * spreadspace avr utils
- *
- *
- * Copyright (C) 2013-2015 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_CC1101_defines_h_INCLUDED
-#define SPREADAVR_CC1101_defines_h_INCLUDED
-
-//// header byte
-#define CC1101_HEADER_READ 0x80
-#define CC1101_HEADER_WRITE 0x00
-#define CC1101_HEADER_BURST 0x40
-#define CC1101_HEADER_READONLY 0xC0
-#define CC1101_HEADER_COMMAND 0x00
-
-//read/write config registers:
-#define CC1101_REG_RW_IOCFG2 0x00
-#define CC1101_REG_RW_IOCFG1 0x01
-#define CC1101_REG_RW_IOCFG0 0x02
-#define CC1101_REG_RW_FIFOTHR 0x03
-#define CC1101_REG_RW_SYNC1 0x04
-#define CC1101_REG_RW_SYNC0 0x05
-#define CC1101_REG_RW_PKTLEN 0x06
-#define CC1101_REG_RW_PKTCTRL1 0x07
-#define CC1101_REG_RW_PKTCTRL0 0x08
-#define CC1101_REG_RW_ADDR 0x09
-#define CC1101_REG_RW_CHANNR 0x0A
-#define CC1101_REG_RW_FSCTRL1 0x0B
-#define CC1101_REG_RW_FSCTRL0 0x0C
-#define CC1101_REG_RW_FREQ2 0x0D
-#define CC1101_REG_RW_FREQ1 0x0E
-#define CC1101_REG_RW_FREQ0 0x0F
-#define CC1101_REG_RW_MDMCFG4 0x10
-#define CC1101_REG_RW_MDMCFG3 0x11
-#define CC1101_REG_RW_MDMCFG2 0x12
-#define CC1101_REG_RW_MDMCFG1 0x13
-#define CC1101_REG_RW_MDMCFG0 0x14
-#define CC1101_REG_RW_DEVIATN 0x15
-#define CC1101_REG_RW_MCSM2 0x16
-#define CC1101_REG_RW_MCSM1 0x17
-#define CC1101_REG_RW_MCSM0 0x18
-#define CC1101_REG_RW_FOCCFG 0x19
-#define CC1101_REG_RW_BSCFG 0x1A
-#define CC1101_REG_RW_AGCCTRL2 0x1B
-#define CC1101_REG_RW_AGCCTRL1 0x1C
-#define CC1101_REG_RW_AGCCTRL0 0x1D
-#define CC1101_REG_RW_WOREVT1 0x1E
-#define CC1101_REG_RW_WOREVT0 0x1F
-#define CC1101_REG_RW_WORCTRL 0x20
-#define CC1101_REG_RW_FREND1 0x21
-#define CC1101_REG_RW_FREND0 0x22
-#define CC1101_REG_RW_FSCAL3 0x23
-#define CC1101_REG_RW_FSCAL2 0x24
-#define CC1101_REG_RW_FSCAL1 0x25
-#define CC1101_REG_RW_FSCAL0 0x26
-#define CC1101_REG_RW_RCCTRL1 0x27
-#define CC1101_REG_RW_RCCTRL0 0x28
-#define CC1101_REG_RW_FSTEST 0x29
-#define CC1101_REG_RW_PTEST 0x2A
-#define CC1101_REG_RW_AGCTEST 0x2B
-#define CC1101_REG_RW_TEST2 0x2C
-#define CC1101_REG_RW_TEST1 0x2D
-#define CC1101_REG_RW_TEST0 0x2E
-
-#define CC1101_REG_RW_MAX 0x2E
-
-//read-only status registers:
-#define CC1101_REG_RO_PARTNUM 0x30
-#define CC1101_REG_RO_VERSION 0x31
-#define CC1101_REG_RO_FREQUEST 0x32
-#define CC1101_REG_RO_LQI 0x33
-#define CC1101_REG_RO_RSSI 0x34
-#define CC1101_REG_RO_MARCSTATE 0x35
-#define CC1101_REG_RO_WORTIME1 0x36
-#define CC1101_REG_RO_WORTIME0 0x37
-#define CC1101_REG_RO_PKTSTATUS 0x38
-#define CC1101_REG_RO_VCO_VC_DAC 0x39
-#define CC1101_REG_RO_TXBYTES 0x3A
-#define CC1101_REG_RO_RXBYTES 0x3B
-#define CC1101_REG_RO_RCCTRL1_STATUS 0x3C
-#define CC1101_REG_RO_RCCTRL0_STATUS 0x3D
-
-#define CC1101_REG_RO_MIN 0x30
-#define CC1101_REG_RO_MAX 0x3D
-
-//commands:
-#define CC1101_CMD_SRES 0x30
-#define CC1101_CMD_SFSTXON 0x31
-#define CC1101_CMD_SXOFF 0x32
-#define CC1101_CMD_SCAL 0x33
-#define CC1101_CMD_SRX 0x34
-#define CC1101_CMD_STX 0x35
-#define CC1101_CMD_SIDLE 0x36
-#define CC1101_CMD_SWOR 0x38
-#define CC1101_CMD_SPWD 0x39
-#define CC1101_CMD_SFRX 0x3A
-#define CC1101_CMD_SFTX 0x3B
-#define CC1101_CMD_SWORRST 0x3C
-#define CC1101_CMD_SNOP 0x3D
-
-#define CC1101_CMD_MIN 0x30
-#define CC1101_CMD_MAX 0x3D
-
-//power amplifier table
-#define CC1101_REG_PATABLE 0x3E
-#define CC1101_PATABLE_SIZE 8
-//data FIFOs
-#define CC1101_REG_FIFO 0x3F
-#define CC1101_FIFO_MAX_LEN 64
-
-
-#define CC1101_ADDR_MAX 0x3F
-
-
-////status byte:
-#define CC1101_STATUS_CHIP_NOT_RDY(x) (x & 0b10000000)
-#define CC1101_STATUS_IDLE(x) ((x & 0b01110000) == 0b00000000)
-#define CC1101_STATUS_RXMODE(x) ((x & 0b01110000) == 0b00010000)
-#define CC1101_STATUS_TXMODE(x) ((x & 0b01110000) == 0b00100000)
-#define CC1101_STATUS_FSTXON(x) ((x & 0b01110000) == 0b00110000)
-#define CC1101_STATUS_CALIBRATE(x) ((x & 0b01110000) == 0b01000000)
-#define CC1101_STATUS_SETTLING(x) ((x & 0b01110000) == 0b01010000)
-#define CC1101_STATUS_RXFIFO_OVERFLOW(x) ((x & 0b01110000) == 0b01100000)
-#define CC1101_STATUS_TXFIFO_OVERFLOW(x) ((x & 0b01110000) == 0b01110000)
-#define CC1101_STATUS_FIFO_BYTES_AVAILABLE(x) (x & 0b00001111)
-
-
-#define CC1101_MARCSTATE_SLEEP 0x00
-#define CC1101_MARCSTATE_IDLE 0x01
-#define CC1101_MARCSTATE_XOFF 0x02
-#define CC1101_MARCSTATE_VCOON_MC 0x03
-#define CC1101_MARCSTATE_REGON_MC 0x04
-#define CC1101_MARCSTATE_MANCAL 0x05
-#define CC1101_MARCSTATE_VCOON 0x06
-#define CC1101_MARCSTATE_REGON 0x07
-#define CC1101_MARCSTATE_STARTCAL 0x08
-#define CC1101_MARCSTATE_BWBOOST 0x09
-#define CC1101_MARCSTATE_FS_LOCK 0x0A
-#define CC1101_MARCSTATE_IFADCON 0x0B
-#define CC1101_MARCSTATE_ENDCAL 0x0C
-#define CC1101_MARCSTATE_RX 0x0D
-#define CC1101_MARCSTATE_RX_END 0x0E
-#define CC1101_MARCSTATE_RX_RST 0x0F
-#define CC1101_MARCSTATE_TXRX_SWITCH 0x10
-#define CC1101_MARCSTATE_RXFIFO_OVERFLOW 0x11
-#define CC1101_MARCSTATE_FSTXON 0x12
-#define CC1101_MARCSTATE_TX 0x13
-#define CC1101_MARCSTATE_TX_END 0x14
-#define CC1101_MARCSTATE_RXTX_SWITCH 0x15
-#define CC1101_MARCSTATE_TXFIFO_UNDERFLOW 0x16
-
-#define CC1101_GDO_CFG_3STATE 0x2E
-
-
-//register masks
-#define CC1101_REG_RW_IOCFG2_MASK 0x7F
-#define CC1101_REG_RW_IOCFG1_MASK 0xFF
-#define CC1101_REG_RW_IOCFG0_MASK 0xFF
-#define CC1101_REG_RW_FIFOTHR_MASK 0x7F
-#define CC1101_REG_RW_SYNC1_MASK 0xFF
-#define CC1101_REG_RW_SYNC0_MASK 0xFF
-#define CC1101_REG_RW_PKTLEN_MASK 0xFF
-#define CC1101_REG_RW_PKTCTRL1_MASK 0xEF
-#define CC1101_REG_RW_PKTCTRL0_MASK 0x77
-#define CC1101_REG_RW_ADDR_MASK 0xFF
-#define CC1101_REG_RW_CHANNR_MASK 0xFF
-#define CC1101_REG_RW_FSCTRL1_MASK 0x1F
-#define CC1101_REG_RW_FSCTRL0_MASK 0xFF
-#define CC1101_REG_RW_FREQ2_MASK 0x3F
-#define CC1101_REG_RW_FREQ1_MASK 0xFF
-#define CC1101_REG_RW_FREQ0_MASK 0xFF
-#define CC1101_REG_RW_MDMCFG4_MASK 0xFF
-#define CC1101_REG_RW_MDMCFG3_MASK 0xFF
-#define CC1101_REG_RW_MDMCFG2_MASK 0xFF
-#define CC1101_REG_RW_MDMCFG1_MASK 0xF3
-#define CC1101_REG_RW_MDMCFG0_MASK 0xFF
-#define CC1101_REG_RW_DEVIATN_MASK 0x77
-#define CC1101_REG_RW_MCSM2_MASK 0x1F
-#define CC1101_REG_RW_MCSM1_MASK 0x3F
-#define CC1101_REG_RW_MCSM0_MASK 0x3F
-#define CC1101_REG_RW_FOCCFG_MASK 0x3F
-#define CC1101_REG_RW_BSCFG_MASK 0xFF
-#define CC1101_REG_RW_AGCCTRL2_MASK 0xFF
-#define CC1101_REG_RW_AGCCTRL1_MASK 0x7F
-#define CC1101_REG_RW_AGCCTRL0_MASK 0xFF
-#define CC1101_REG_RW_WOREVT1_MASK 0xFF
-#define CC1101_REG_RW_WOREVT0_MASK 0xFF
-#define CC1101_REG_RW_WORCTRL_MASK 0xFB
-#define CC1101_REG_RW_FREND1_MASK 0xFF
-#define CC1101_REG_RW_FREND0_MASK 0x37
-#define CC1101_REG_RW_FSCAL3_MASK 0xFF
-#define CC1101_REG_RW_FSCAL2_MASK 0x3F
-#define CC1101_REG_RW_FSCAL1_MASK 0x3F
-#define CC1101_REG_RW_FSCAL0_MASK 0x7F
-#define CC1101_REG_RW_RCCTRL1_MASK 0x7F
-#define CC1101_REG_RW_RCCTRL0_MASK 0x7F
-#define CC1101_REG_RW_FSTEST_MASK 0xFF
-#define CC1101_REG_RW_PTEST_MASK 0xFF
-#define CC1101_REG_RW_AGCTEST_MASK 0xFF
-#define CC1101_REG_RW_TEST2_MASK 0xFF
-#define CC1101_REG_RW_TEST1_MASK 0xFF
-#define CC1101_REG_RW_TEST0_MASK 0xFF
-#define CC1101_REG_RO_PARTNUM_MASK 0xFF
-#define CC1101_REG_RO_VERSION_MASK 0xFF
-#define CC1101_REG_RO_FREQUEST_MASK 0xFF
-#define CC1101_REG_RO_LQI_MASK 0xFF
-#define CC1101_REG_RO_RSSI_MASK 0xFF
-#define CC1101_REG_RO_MARCSTATE_MASK 0x1F
-#define CC1101_REG_RO_WORTIME1_MASK 0xFF
-#define CC1101_REG_RO_WORTIME0_MASK 0xFF
-#define CC1101_REG_RO_PKTSTATUS_MASK 0xFF
-#define CC1101_REG_RO_VCO_VC_DAC_MASK 0xFF
-#define CC1101_REG_RO_TXBYTES_MASK 0xFF
-#define CC1101_REG_RO_RXBYTES_MASK 0xFF
-#define CC1101_REG_RO_RCCTRL1_STATUS_MASK 0x7F
-#define CC1101_REG_RO_RCCTRL0_STATUS_MASK 0x7F
-
-#endif
diff --git a/software/avr.lib/ds1820.c b/software/avr.lib/ds1820.c
deleted file mode 100644
index 4619498..0000000
--- a/software/avr.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/avr.lib/ds1820.h b/software/avr.lib/ds1820.h
deleted file mode 100644
index 64a0089..0000000
--- a/software/avr.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/avr.lib/led.c b/software/avr.lib/led.c
deleted file mode 100644
index 4f3aec2..0000000
--- a/software/avr.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/avr.lib/led.h b/software/avr.lib/led.h
deleted file mode 100644
index 0c78193..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-keyboardmouse.c b/software/avr.lib/lufa-descriptor-keyboardmouse.c
deleted file mode 100644
index acc319b..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-keyboardmouse.h b/software/avr.lib/lufa-descriptor-keyboardmouse.h
deleted file mode 100644
index 9381602..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-midi.c b/software/avr.lib/lufa-descriptor-midi.c
deleted file mode 100644
index 99fab41..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-midi.h b/software/avr.lib/lufa-descriptor-midi.h
deleted file mode 100644
index 592ac9f..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-rndis.c b/software/avr.lib/lufa-descriptor-rndis.c
deleted file mode 100644
index ba29037..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-rndis.h b/software/avr.lib/lufa-descriptor-rndis.h
deleted file mode 100644
index 508ac2f..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-usbdualserial.c b/software/avr.lib/lufa-descriptor-usbdualserial.c
deleted file mode 100644
index 639391c..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-usbdualserial.h b/software/avr.lib/lufa-descriptor-usbdualserial.h
deleted file mode 100644
index d1e6ca6..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-usbserial.c b/software/avr.lib/lufa-descriptor-usbserial.c
deleted file mode 100644
index fa2ef25..0000000
--- a/software/avr.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/avr.lib/lufa-descriptor-usbserial.h b/software/avr.lib/lufa-descriptor-usbserial.h
deleted file mode 100644
index 97afd41..0000000
--- a/software/avr.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/avr.lib/onewire.c b/software/avr.lib/onewire.c
deleted file mode 100644
index f28ef41..0000000
--- a/software/avr.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/avr.lib/onewire.h b/software/avr.lib/onewire.h
deleted file mode 100644
index 1410fde..0000000
--- a/software/avr.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/avr.lib/rda1846.c b/software/avr.lib/rda1846.c
deleted file mode 100644
index 83cc270..0000000
--- a/software/avr.lib/rda1846.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * spreadspace avr utils
- *
- *
- * Copyright (C) 2013-2015 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 "LUFA/Drivers/Peripheral/TWI.h"
-#include <stdio.h>
-
-#include "rda1846.h"
-#include "rda1846_defines.h"
-
-static uint8_t rda1846_write_register_raw(const uint8_t addr, const uint16_t data)
-{
- if(TWI_StartTransmission(RDA1846_CHIP_ADDR | TWI_ADDRESS_WRITE,10) != TWI_ERROR_NoError)
- return 1;
-
- if(!TWI_SendByte(addr | RDA1846_ADDR_W))
- goto i2c_error;
- if(!TWI_SendByte((uint8_t)(data>>8)))
- goto i2c_error;
- if(!TWI_SendByte((uint8_t)data))
- goto i2c_error;
-
- TWI_StopTransmission();
- return 0;
-
-i2c_error:
- TWI_StopTransmission();
- printf("I2C error (write_register_raw)\r\n");
- return 1;
-}
-
-static uint8_t rda1846_read_register_raw(const uint8_t addr, uint16_t* data)
-{
- if(TWI_StartTransmission(RDA1846_CHIP_ADDR | TWI_ADDRESS_WRITE,10) != TWI_ERROR_NoError)
- return 1;
- if(!TWI_SendByte(addr | RDA1846_ADDR_R))
- goto i2c_error;
-
- if(TWI_StartTransmission(RDA1846_CHIP_ADDR | TWI_ADDRESS_READ,10) != TWI_ERROR_NoError)
- goto i2c_error;
- uint8_t tmp;
- if(!TWI_ReceiveByte(&tmp, 0))
- goto i2c_error;
- *data = tmp << 8;
- if(!TWI_ReceiveByte(&tmp, 1))
- goto i2c_error;
- *data |= tmp;
-
- TWI_StopTransmission();
- return 0;
-
-i2c_error:
- TWI_StopTransmission();
- printf("I2C error (read_register_raw)\r\n");
- return 1;
-}
-
-static uint8_t rda1846_write_register(const uint8_t addr, const uint16_t data)
-{
- if(addr < RDA1846_ADDR_LIMIT)
- return rda1846_write_register_raw(addr, data);
-
- if(addr > RDA1846_ADDR_LIMIT) {
- uint8_t ret = rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 1);
- if(ret) return ret;
-
- ret = rda1846_write_register_raw(addr, data);
- if(ret) return ret;
-
- return rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 0);
- }
- return 1;
-}
-
-static uint8_t rda1846_read_register(const uint8_t addr, uint16_t* data)
-{
- if(addr < RDA1846_ADDR_LIMIT)
- return rda1846_read_register_raw(addr, data);
-
- if(addr > RDA1846_ADDR_LIMIT) {
- uint8_t ret = rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 1);
- if(ret) return ret;
-
- ret = rda1846_read_register_raw(addr - RDA1846_ADDR_LIMIT + 1, data);
- if(ret) return ret;
-
- return rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 0);
- }
- return 1;
-}
-
-static rf_band_t rf_band_;
-static channel_bw_t channel_bw_;
-static rda1846_state_t state_;
-
-/*
- * EXTERNAL INTERFACE
- */
-
-char* rda1846_rf_band_to_string(rf_band_t b)
-{
- switch(b)
- {
- case b_2m: return "2m (134-174 MHz)";
- case b_1m5: return "1.5m (200-260 MHz)";
- case b_70cm: return "70cm (400-520 MHz)";
- }
- return "";
-}
-
-char* rda1846_channel_bw_to_string(channel_bw_t bw)
-{
- switch(bw)
- {
- case bw_12k5: return "12,5 kHz";
- case bw_25k: return "25 kHz";
- }
- return "";
-}
-
-char* rda1846_state_to_string(rda1846_state_t s)
-{
- switch(s)
- {
- case powerdown: return "powerdown";
- case idle: return "idle";
- case receive: return "receiving";
- case transmit: return "transmitting";
- }
- return "";
-}
-
-void rda1846_init(void)
-{
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 200000));
-}
-
-void rda1846_reg_init(void)
-{
- rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST);
- rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_PDN);
-
- rda1846_write_register(RDA1846_REG_XTAL, RDA1846_XTAL_FREQ);
- rda1846_write_register(RDA1846_REG_ADCLK, RDA1846_ADCLK_FREQ);
- rda1846_write_register(RDA1846_REG_CLK_MODE, RDA1846_CLK_MODE);
-
- rda1846_write_register(RDA1846_REG_RF_BAND, RDA1846_RF_BAND_2M);
- rf_band_ = b_2m;
-
- rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_CH_12K5 | RDA1846_CTL_RX_M_TX_M | RDA1846_CTL_PDN);
- channel_bw_ = bw_12k5;
- state_ = idle;
-
- rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_NONE);
-// rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_MIC);
-// rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_TONE2);
-// rda1846_write_register(RDA1846_REG_DTMF_T2, 6689);
-
- rda1846_write_register(RDA1846_REG_DTMF_C01, (RDA1846_DTMF_C0 << 8) | RDA1846_DTMF_C1);
- rda1846_write_register(RDA1846_REG_DTMF_C23, (RDA1846_DTMF_C1 << 8) | RDA1846_DTMF_C3);
- rda1846_write_register(RDA1846_REG_DTMF_C45, (RDA1846_DTMF_C3 << 8) | RDA1846_DTMF_C5);
- rda1846_write_register(RDA1846_REG_DTMF_C67, (RDA1846_DTMF_C6 << 8) | RDA1846_DTMF_C7);
- rda1846_write_register(RDA1846_REG_DTMF_CTL, RDA1846_DTMF_DUAL | RDA1846_DTMF_EN);
- rda1846_write_register(RDA1846_REG_INT, RDA1846_INT_DTMF_IDLE);
-
- rda1846_gpio_default();
-}
-
-void rda1846_soft_reset(void)
-{
- rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST);
-}
-
-
-
-void rda1846_set_band(rf_band_t b)
-{
- uint16_t data = RDA1846_RF_BAND_2M;
- if(b == b_1m5) data = RDA1846_RF_BAND_1M5;
- if(b == b_70cm) data = RDA1846_RF_BAND_70CM;
- if(!rda1846_write_register(RDA1846_REG_RF_BAND, data))
- rf_band_ = b;
-}
-
-rf_band_t rda1846_get_band(void)
-{
- return rf_band_;
-}
-
-void rda1846_set_bw(channel_bw_t bw)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_CTL, &data))
- return;
-
- data &= RDA1846_CTL_CH_RESET;
- data |= bw == bw_12k5 ? RDA1846_CTL_CH_12K5 : RDA1846_CTL_CH_25K;
- if(!rda1846_write_register(RDA1846_REG_CTL, data))
- channel_bw_ = bw;
-}
-
-channel_bw_t rda1846_get_bw(void)
-{
- return channel_bw_;
-}
-
-uint8_t rda1846_set_freq_kHz(int32_t freq)
-{
- if((rf_band_ == b_2m && (freq < RDA1846_BAND_2M_LOW || freq > RDA1846_BAND_2M_HIGH)) ||
- (rf_band_ == b_1m5 && (freq < RDA1846_BAND_1M5_LOW || freq > RDA1846_BAND_1M5_HIGH)) ||
- (rf_band_ == b_70cm && (freq < RDA1846_BAND_70CM_LOW || freq > RDA1846_BAND_70CM_HIGH)) )
- return 1;
-
- freq = freq<<3;
- uint8_t ret = rda1846_write_register(RDA1846_REG_FREQH, ((freq>>16) & 0x00003FFF));
- if(ret)
- return 1;
-
- return rda1846_write_register(RDA1846_REG_FREQL, (freq & 0x0000FFFF));
-}
-
-static int32_t corr_freq(int32_t f)
-{
- float corr = RDA1846_FREQ_CORR_2M;
- if(rf_band_ == b_1m5) corr = RDA1846_FREQ_CORR_1M5;
- if(rf_band_ == b_70cm) corr = RDA1846_FREQ_CORR_70CM;
- return (int32_t)(((float)f)/corr);
-}
-
-int32_t rda1846_get_freq_kHz(void)
-{
- if(state_ == powerdown || state_ == idle)
- return -1;
-
- uint16_t data;
- uint8_t ret = rda1846_read_register(RDA1846_REG_FREQH, &data);
- if(ret)
- return -1;
-
- int32_t freq = (((uint32_t)(data & 0x3FFF))<<16);
- ret = rda1846_read_register(RDA1846_REG_FREQL, &data);
- if(ret)
- return -1;
-
- freq = corr_freq((freq+data)>>3);
- return (freq / 8) + ((freq % 8) < 4 ? 0 : 1);
-}
-
-
-
-void rda1846_powerdown(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_CTL, &data))
- return;
-
- data &= ~(RDA1846_CTL_TX | RDA1846_CTL_RX | RDA1846_CTL_CHIP_CAL | RDA1846_CTL_PDN);
- if(!rda1846_write_register(RDA1846_REG_CTL, data))
- state_ = powerdown;
-}
-
-void rda1846_idle(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_CTL, &data))
- return;
-
- data &= ~(RDA1846_CTL_TX | RDA1846_CTL_RX | RDA1846_CTL_CHIP_CAL);
- data |= RDA1846_CTL_PDN;
- if(!rda1846_write_register(RDA1846_REG_CTL, data))
- state_ = idle;
-}
-
-void rda1846_receive(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_CTL, &data))
- return;
-
- data &= ~(RDA1846_CTL_TX);
- data |= RDA1846_CTL_RX | RDA1846_CTL_CHIP_CAL | RDA1846_CTL_PDN;
- if(!rda1846_write_register(RDA1846_REG_CTL, data))
- state_ = receive;
-}
-
-void rda1846_transmit(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_CTL, &data))
- return;
-
- data &= ~(RDA1846_CTL_RX);
- data |= RDA1846_CTL_TX | RDA1846_CTL_CHIP_CAL | RDA1846_CTL_PDN;
- if(!rda1846_write_register(RDA1846_REG_CTL, data))
- state_ = transmit;
-}
-
-rda1846_state_t rda1846_get_state(void)
-{
- return state_;
-}
-
-
-
-uint16_t rda1846_get_dtmf(uint8_t* idx1, uint8_t* idx2, uint8_t* code, uint8_t* valid)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_DTMF_OUT, &data))
- return 0xFFFF;
-
- if(idx1) *idx1 = (uint8_t)((data & 0x0700)>>8);
- if(idx2) *idx2 = (uint8_t)((data & 0x00E0)>>5);
- if(code) *code = (uint8_t)(data & 0x000F);
- if(valid) *valid = data & 0x0010 ? 0 : 1;
-
- return data;
-}
-
-void rda1846_clear_int(void)
-{
- rda1846_write_register(0x00, 0x1846);
-}
-
-
-
-void rda1846_set_volume(int8_t vol)
-{
- uint16_t data;
- if(vol < -30 || vol > 0)
- return;
-
- if(vol >= -15)
- data = 0x000F | (((vol + 15)<<4) & 0xF0);
- else
- data = (vol + 30) & 0x0F;
-
- rda1846_write_register(RDA1846_REG_RX_VOICE, data);
-}
-
-int8_t rda1846_get_volume(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_RX_VOICE, &data))
- return 1;
-
- return (int8_t)(((data & 0x00F0)>>4) + (data & 0x000F)) - 30;
-}
-
-
-
-void rda1846_gpio_default(void)
-{
- rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_VOX | RDA1846_GPIO_6_SQ |
- RDA1846_GPIO_5_TXON_RF | RDA1846_GPIO_4_RXON_RF |
- RDA1846_GPIO_2_INT);
-}
-
-void rda1846_gpio_AA(void)
-{
- rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HIGH | RDA1846_GPIO_6_LOW |
- RDA1846_GPIO_5_HIGH | RDA1846_GPIO_4_LOW |
- RDA1846_GPIO_3_HIGH | RDA1846_GPIO_2_LOW |
- RDA1846_GPIO_1_HIGH | RDA1846_GPIO_0_LOW);
-}
-
-void rda1846_gpio_55(void)
-{
- rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_LOW | RDA1846_GPIO_6_HIGH |
- RDA1846_GPIO_5_LOW | RDA1846_GPIO_4_HIGH |
- RDA1846_GPIO_3_LOW | RDA1846_GPIO_2_HIGH |
- RDA1846_GPIO_1_LOW | RDA1846_GPIO_0_HIGH);
-}
-
-void rda1846_gpio_off(void)
-{
- rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HI_Z | RDA1846_GPIO_6_HI_Z |
- RDA1846_GPIO_5_HI_Z | RDA1846_GPIO_4_HI_Z |
- RDA1846_GPIO_3_HI_Z | RDA1846_GPIO_2_HI_Z |
- RDA1846_GPIO_1_HI_Z | RDA1846_GPIO_0_HI_Z);
-}
-
-
-
-int16_t rda1846_get_rssi(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_RSSI, &data))
- return -1;
-
- return ((int16_t)(data & 0x03FF) - 135*8);
-}
-
-int16_t rda1846_get_vssi(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_VSSI, &data))
- return -1;
-
- return (int16_t)data;
-}
-
-uint16_t rda1846_get_flags(void)
-{
- uint16_t data;
- if(rda1846_read_register(RDA1846_REG_FLAG, &data))
- return 0xFFFF;
-
- return data & RDA1846_FLAGS_MASK;
-}
-
-
-
-static char* rda1846_regaddr_to_string(uint8_t addr)
-{
- switch(addr) {
- case RDA1846_REG_CTL: return "CTL";
- case RDA1846_REG_GPIO: return "GPIO";
- case RDA1846_REG_INT: return "INT";
- case RDA1846_REG_FLAG: return "FLAG";
- case RDA1846_REG_RSSI: return "RSSI";
- case RDA1846_REG_VSSI: return "VSSI";
- case RDA1846_REG_CLK_MODE: return "CLK_MODE";
- case RDA1846_REG_XTAL: return "XTAL";
- case RDA1846_REG_ADCLK: return "ADCLK";
- case RDA1846_REG_RF_BAND: return "RF_BAND";
- case RDA1846_REG_FREQH: return "FREQH";
- case RDA1846_REG_FREQL: return "FREQL";
- case RDA1846_REG_PA_BIAS: return "PA_BIAS";
- case RDA1846_REG_TX_VOICE: return "TX_VOICE";
- case RDA1846_REG_VOX_OPEN: return "VOX_OPEN";
- case RDA1846_REG_VOX_SHUT: return "VOX_SHUT";
- case RDA1846_REG_SUBAUDIO: return "SUBAUDIO";
- case RDA1846_REG_RX_VOICE: return "RX_VOICE";
- case RDA1846_REG_SQ_OPEN: return "SQ_OPEN";
- case RDA1846_REG_SQ_SHUT: return "SQ_SHUT";
- case RDA1846_REG_DTMF_CTL: return "DTMF_CTL";
- case RDA1846_REG_DTMF_T1: return "DTMF_T1";
- case RDA1846_REG_DTMF_T2: return "DTMF_T2";
- case RDA1846_REG_DTMF_C01: return "DTMF_C01";
- case RDA1846_REG_DTMF_C23: return "DTMF_C23";
- case RDA1846_REG_DTMF_C45: return "DTMF_C45";
- case RDA1846_REG_DTMF_C67: return "DTMF_C67";
- case RDA1846_REG_DTMF_OUT: return "DTMF_OUT";
- default: return "unknown";
- }
-}
-
-void rda1846_dump_register(void)
-{
- printf("RDA1846: register dump\r\n");
-
- const uint8_t regs[] = { RDA1846_REG_CLK_MODE, RDA1846_REG_XTAL, RDA1846_REG_ADCLK,
- RDA1846_REG_RF_BAND, RDA1846_REG_FREQH, RDA1846_REG_FREQL,
- RDA1846_REG_CTL, RDA1846_REG_INT, RDA1846_REG_GPIO,
- RDA1846_REG_PA_BIAS, RDA1846_REG_TX_VOICE, RDA1846_REG_VOX_OPEN, RDA1846_REG_VOX_SHUT,
- RDA1846_REG_SUBAUDIO, RDA1846_REG_RX_VOICE, RDA1846_REG_SQ_OPEN, RDA1846_REG_SQ_SHUT,
- RDA1846_REG_DTMF_CTL, RDA1846_REG_DTMF_OUT, RDA1846_REG_DTMF_T1, RDA1846_REG_DTMF_T2,
- RDA1846_REG_RSSI, RDA1846_REG_VSSI, RDA1846_REG_FLAG };
-
- int i;
- for(i=0; i<sizeof(regs); ++i) {
- uint16_t data;
- if(rda1846_read_register(regs[i], &data))
- data = 0xFFFF;
- printf(" 0x%02X (%s): 0x%04X\r\n", regs[i], rda1846_regaddr_to_string(regs[i]), data);
- }
-}
diff --git a/software/avr.lib/rda1846.h b/software/avr.lib/rda1846.h
deleted file mode 100644
index d043f00..0000000
--- a/software/avr.lib/rda1846.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * spreadspace avr utils
- *
- *
- * Copyright (C) 2013-2015 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_rda1846_h_INCLUDED
-#define SPREADAVR_rda1846_h_INCLUDED
-
-typedef enum { b_2m, b_1m5, b_70cm } rf_band_t;
-char* rda1846_rf_band_to_string(rf_band_t);
-typedef enum { bw_12k5, bw_25k } channel_bw_t;
-char* rda1846_channel_bw_to_string(channel_bw_t);
-typedef enum { powerdown, idle, receive, transmit } rda1846_state_t;
-char* rda1846_state_to_string(rda1846_state_t);
-
-void rda1846_init(void);
-void rda1846_reg_init(void);
-void rda1846_soft_reset(void);
-
-void rda1846_powerdown(void);
-void rda1846_idle(void);
-void rda1846_receive(void);
-void rda1846_transmit(void);
-rda1846_state_t rda1846_get_state(void);
-
-void rda1846_set_band(rf_band_t);
-rf_band_t rda1846_get_band(void);
-void rda1846_set_bw(channel_bw_t);
-channel_bw_t rda1846_get_bw(void);
-uint8_t rda1846_set_freq_kHz(int32_t freq);
-int32_t rda1846_get_freq_kHz(void);
-
-uint16_t rda1846_get_dtmf(uint8_t*, uint8_t*, uint8_t*, uint8_t*);
-void rda1846_clear_int(void);
-
-void rda1846_set_volume(int8_t);
-int8_t rda1846_get_volume(void);
-
-void rda1846_gpio_default(void);
-void rda1846_gpio_55(void);
-void rda1846_gpio_AA(void);
-void rda1846_gpio_off(void);
-
-int16_t rda1846_get_rssi(void);
-int16_t rda1846_get_vssi(void);
-uint16_t rda1846_get_flags(void);
-
-void rda1846_dump_register(void);
-
-#endif
diff --git a/software/avr.lib/rda1846_defines.h b/software/avr.lib/rda1846_defines.h
deleted file mode 100644
index 37f1fba..0000000
--- a/software/avr.lib/rda1846_defines.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * spreadspace avr utils
- *
- *
- * Copyright (C) 2013-2015 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_rda1846_defines_h_INCLUDED
-#define SPREADAVR_rda1846_defines_h_INCLUDED
-
-// TWI
-#define RDA1846_CHIP_ADDR 0xE2
-#define RDA1846_ADDR_W (0<<7)
-#define RDA1846_ADDR_R (1<<7)
-#define RDA1846_ADDR_LIMIT 0x7F
-
-
-// registers
-#define RDA1846_REG_CTL 0x30
-#define RDA1846_REG_GPIO 0x1F
-#define RDA1846_REG_INT 0x2D
-#define RDA1846_REG_FLAG 0x5C
-#define RDA1846_REG_RSSI 0x5F
-#define RDA1846_REG_VSSI 0x60
-
-#define RDA1846_REG_CLK_MODE 0x04
-#define RDA1846_REG_XTAL 0x2B
-#define RDA1846_REG_ADCLK 0x2C
-
-#define RDA1846_REG_RF_BAND 0x0F
-#define RDA1846_REG_FREQH 0x29
-#define RDA1846_REG_FREQL 0x2A
-
-#define RDA1846_REG_PA_BIAS 0x0A
-#define RDA1846_REG_TX_VOICE 0x3C
-#define RDA1846_REG_VOX_OPEN 0x41
-#define RDA1846_REG_VOX_SHUT 0x42
-
-#define RDA1846_REG_RX_VOICE 0x44
-#define RDA1846_REG_SUBAUDIO 0x45
-#define RDA1846_REG_SQ_OPEN 0x48
-#define RDA1846_REG_SQ_SHUT 0x49
-
-#define RDA1846_REG_DTMF_CTL 0x63
-#define RDA1846_REG_DTMF_T1 0x35
-#define RDA1846_REG_DTMF_T2 0x36
-#define RDA1846_REG_DTMF_C01 0x66
-#define RDA1846_REG_DTMF_C23 0x67
-#define RDA1846_REG_DTMF_C45 0x68
-#define RDA1846_REG_DTMF_C67 0x69
-#define RDA1846_REG_DTMF_OUT 0x6C
-
-//freq
-#ifdef RDA_QUARTZ_12M288
-#define RDA1846_FREQ_CORR_2M 73.1428567759
-#endif // RDA_QUARTZ_12M288
-#ifdef RDA_QUARTZ_13M
-#define RDA1846_FREQ_CORR_2M 69.136878448
-#endif // RDA_QUARTZ_13M
-
-#define RDA1846_FREQ_CORR_1M5 RDA1846_FREQ_CORR_2M/1.5
-#define RDA1846_FREQ_CORR_70CM RDA1846_FREQ_CORR_2M/3.0
-
-
-// init values
-#define RDA1846_RF_BAND_2M 0x00E4 // select 2m Band
-#define RDA1846_BAND_2M_LOW 134000 // kHz
-#define RDA1846_BAND_2M_HIGH 174000 // kHZ
-
-#define RDA1846_RF_BAND_1M5 0x00A4 // select 1.5m Band
-#define RDA1846_BAND_1M5_LOW 200000 // kHz
-#define RDA1846_BAND_1M5_HIGH 260000 // kHZ
-
-#define RDA1846_RF_BAND_70CM 0x0024 // select 70cm Band
-#define RDA1846_BAND_70CM_LOW 400000 // kHz
-#define RDA1846_BAND_70CM_HIGH 520000 // kHZ
-
-#ifdef RDA_QUARTZ_12M288
-#define RDA1846_XTAL_FREQ 12288 // 12.288 MHz
-#define RDA1846_ADCLK_FREQ 6144 // 12.288/2 MHz
-#define RDA1846_CLK_MODE 0x0F11 // 12-14 MHz
-#endif // RDA_QUARTZ_12M288
-
-#ifdef RDA_QUARTZ_13M
-#define RDA1846_XTAL_FREQ 13000 // 13.000 MHz
-#define RDA1846_ADCLK_FREQ 6500 // 13.000/2 MHz
-#define RDA1846_CLK_MODE 0x0F11 // 12-14 MHz
-#endif // RDA_QUARTZ_13M
-
-
-
-
-// ctl
-#define RDA1846_CTL_CH_25K 0x3000
-#define RDA1846_CTL_CH_12K5 0x0000
-#define RDA1846_CTL_CH_RESET 0xCFFF
-
-#define RDA1846_CTL_TAIL_ELIM 0x0800
-
-#define RDA1846_CTL_RX_A_TX_A 0x0200
-#define RDA1846_CTL_RX_A_TX_M 0x0100
-#define RDA1846_CTL_RX_M_TX_M 0x0000
-
-#define RDA1846_CTL_MUTE 0x0080
-#define RDA1846_CTL_TX 0x0040
-#define RDA1846_CTL_RX 0x0020
-#define RDA1846_CTL_VOX 0x0010
-#define RDA1846_CTL_SQ 0x0008
-#define RDA1846_CTL_PDN 0x0004
-#define RDA1846_CTL_CHIP_CAL 0x0002
-#define RDA1846_CTL_SOFT_RST 0x0001
-
-
-// flag
-#define RDA1846_FLAG_DTMF_IDLE 0x1000
-#define RDA1846_FLAG_RXON_RF 0x0400
-#define RDA1846_FLAG_TXON_RF 0x0200
-#define RDA1846_FLAG_INVERT_DET 0x0080
-#define RDA1846_FLAG_CSS_CMP 0x0004
-#define RDA1846_FLAG_SQ 0x0002
-#define RDA1846_FLAG_VOX 0x0001
-
-#define RDA1846_FLAGS_MASK 0x1687
-
-
-// gpio
-#define RDA1846_GPIO_7_HI_Z 0x0000
-#define RDA1846_GPIO_7_VOX 0x4000
-#define RDA1846_GPIO_7_LOW 0x8000
-#define RDA1846_GPIO_7_HIGH 0xC000
-
-#define RDA1846_GPIO_6_HI_Z 0x0000
-#define RDA1846_GPIO_6_SQ 0x1000
-#define RDA1846_GPIO_6_LOW 0x2000
-#define RDA1846_GPIO_6_HIGH 0x3000
-
-#define RDA1846_GPIO_5_HI_Z 0x0000
-#define RDA1846_GPIO_5_TXON_RF 0x0400
-#define RDA1846_GPIO_5_LOW 0x0800
-#define RDA1846_GPIO_5_HIGH 0x0C00
-
-#define RDA1846_GPIO_4_HI_Z 0x0000
-#define RDA1846_GPIO_4_RXON_RF 0x0100
-#define RDA1846_GPIO_4_LOW 0x0200
-#define RDA1846_GPIO_4_HIGH 0x0300
-
-#define RDA1846_GPIO_3_HI_Z 0x0000
-#define RDA1846_GPIO_3_SDO 0x0040
-#define RDA1846_GPIO_3_LOW 0x0080
-#define RDA1846_GPIO_3_HIGH 0x00C0
-
-#define RDA1846_GPIO_2_HI_Z 0x0000
-#define RDA1846_GPIO_2_INT 0x0010
-#define RDA1846_GPIO_2_LOW 0x0020
-#define RDA1846_GPIO_2_HIGH 0x0030
-
-#define RDA1846_GPIO_1_HI_Z 0x0000
-#define RDA1846_GPIO_1_CODE 0x0004
-#define RDA1846_GPIO_1_LOW 0x0008
-#define RDA1846_GPIO_1_HIGH 0x000C
-
-#define RDA1846_GPIO_0_HI_Z 0x0000
-#define RDA1846_GPIO_0_CSS 0x0001
-#define RDA1846_GPIO_0_LOW 0x0002
-#define RDA1846_GPIO_0_HIGH 0x0003
-
-
-// int
-#define RDA1846_INT_CSS_CMP 0x0200
-#define RDA1846_INT_RXON_RF 0x0100
-#define RDA1846_INT_TXON_RF 0x0080
-#define RDA1846_INT_DTMF_IDLE 0x0040
-#define RDA1846_INT_INVERT_DET 0x0020
-#define RDA1846_INT_IDLE_TO 0x0010
-#define RDA1846_INT_RXON_RF_TO 0x0008
-#define RDA1846_INT_SQ 0x0004
-#define RDA1846_INT_TXON_RF_TO 0x0002
-#define RDA1846_INT_VOX 0x0001
-
-
-// tx voice channel
-#define RDA1846_TX_VOICE_MIC 0x0958
-#define RDA1846_TX_VOICE_TONE2 0x4958
-#define RDA1846_TX_VOICE_GPIO1 0x8958
-#define RDA1846_TX_VOICE_NONE 0xC958
-
-
-// DTMF ctl
-#define RDA1846_DTMF_SINGLE 0x0200
-#define RDA1846_DTMF_DUAL 0x0000
-#define RDA1846_DTMF_EN 0x0100
-
-// DTMF tone freq
-#include <math.h>
-
-#define dtmf_tone_freq_hz(value) (uint16_t)round(value/4.096)
-#define dtmf_tone_freq_value(hz) (uint16_t)round(hz*4.096)
-
-#ifdef RDA_QUARTZ_12M288
-// DTMF frequencies @ 12.288 MHz - these are the defaults... are they?
-#define RDA1846_DTMF_C0 0x61 // 697 Hz
-#define RDA1846_DTMF_C1 0x5B // 770 Hz
-#define RDA1846_DTMF_C2 0x53 // 852 Hz
-#define RDA1846_DTMF_C3 0x4B // 941 Hz
-#define RDA1846_DTMF_C4 0x2C // 1209 Hz
-#define RDA1846_DTMF_C5 0x1E // 1336 Hz
-#define RDA1846_DTMF_C6 0x0A // 1477 Hz
-#define RDA1846_DTMF_C7 0xF6 // 1633 Hz
-#endif // RDA_QUARTZ_12M8
-
-#ifdef RDA_QUARTZ_13M
-// DTMF frequencies @ 13 MHz - these are the defaults...
-#define RDA1846_DTMF_C0 0x61 // 697 Hz
-#define RDA1846_DTMF_C1 0x5E // 770 Hz
-#define RDA1846_DTMF_C2 0x57 // 852 Hz
-#define RDA1846_DTMF_C3 0x4B // 941 Hz
-#define RDA1846_DTMF_C4 0x31 // 1209 Hz
-#define RDA1846_DTMF_C5 0x1E // 1336 Hz
-#define RDA1846_DTMF_C6 0x0F // 1477 Hz
-#define RDA1846_DTMF_C7 0xFB // 1633 Hz
-#endif // RDA_QUARTZ_13M
-
-#endif
diff --git a/software/avr.lib/serialio.c b/software/avr.lib/serialio.c
deleted file mode 100644
index fde2935..0000000
--- a/software/avr.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/avr.lib/serialio.h b/software/avr.lib/serialio.h
deleted file mode 100644
index 3b0781e..0000000
--- a/software/avr.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/avr.lib/usbio.c b/software/avr.lib/usbio.c
deleted file mode 100644
index fbdd5a3..0000000
--- a/software/avr.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/avr.lib/usbio.h b/software/avr.lib/usbio.h
deleted file mode 100644
index 1237f37..0000000
--- a/software/avr.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/avr.lib/util.c b/software/avr.lib/util.c
deleted file mode 100644
index 7f15bfe..0000000
--- a/software/avr.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/avr.lib/util.h b/software/avr.lib/util.h
deleted file mode 100644
index 51c946d..0000000
--- a/software/avr.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/avr.lufa.mk b/software/avr.lufa.mk
deleted file mode 100644
index 1449f23..0000000
--- a/software/avr.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 ../avr.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/hhd70dongle.old/Makefile b/software/hhd70dongle.old/Makefile
index 1fea29b..2b38b9f 100644
--- a/software/hhd70dongle.old/Makefile
+++ b/software/hhd70dongle.old/Makefile
@@ -1,23 +1,31 @@
##
-## spreadspace teensy utils
+## mur.sat
##
+## Somewhen in the year 20xx, mur.at will have a nano satellite launched
+## into a low earth orbit (310 km above the surface of our planet). The
+## satellite itself is a TubeSat personal satellite kit, developed and
+## launched by interorbital systems. mur.sat is a joint venture of mur.at,
+## ESC im Labor and realraum.
##
-## Copyright (C) 2011 Christian Pointner <equinox@spreadspace.org>
+## Please visit the project hompage at sat.mur.at for further information.
##
-## This file is part of spreadspace teensy utils.
##
-## spreadspace teensy utils is free software: you can redistribute it and/or modify
+## Copyright (C) 2011-2015 Christian Pointner <equinox@mur.at>
+##
+## This file is part of mur.sat.
+##
+## mur.sat 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 teensy utils is distributed in the hope that it will be useful,
+## mur.sat 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 teensy utils. If not, see <http://www.gnu.org/licenses/>.
+## along with mur.sat. If not, see <http://www.gnu.org/licenses/>.
##
NAME := hhd70dongle
@@ -27,8 +35,9 @@ LIBS := led lufa-descriptor-usbserial usbio
RESET_FUNC := ./reset.sh
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
@@ -43,7 +52,7 @@ LUFA_OPTS += -D USB_PRODUCT="L\"HHD70 usb dongle\"" -D USB_PRODUCT_LEN=16
LUFA_COMPONENTS := USB USBCLASS
-include ../avr.include.mk
+include $(SPREADAVR_PATH)/include.mk
program0: RESET_PARAM:=/dev/ttyACM0
program0: program
diff --git a/software/hhd70dongle/Makefile b/software/hhd70dongle/Makefile
index 7fdc40c..843e405 100644
--- a/software/hhd70dongle/Makefile
+++ b/software/hhd70dongle/Makefile
@@ -35,8 +35,9 @@ LIBS := util led lufa-descriptor-usbserial usbio cc1101
RESET_FUNC := ./reset.sh
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
@@ -51,12 +52,4 @@ LUFA_OPTS += -D USB_PRODUCT="L\"HHD70 usb dongle\"" -D USB_PRODUCT_LEN=16
LUFA_COMPONENTS := USB USBCLASS SPI
-include ../avr.include.mk
-
-CFLAGS += -D CC1101_QUARTZ_26M
-
-program0: RESET_PARAM:=/dev/ttyACM0
-program0: program
-
-program1: RESET_PARAM:=/dev/ttyACM1
-program1: program
+include $(SPREADAVR_PATH)/include.mk
diff --git a/software/rda1846dongle/Makefile b/software/rda1846dongle/Makefile
index 95a5ece..d5c21de 100644
--- a/software/rda1846dongle/Makefile
+++ b/software/rda1846dongle/Makefile
@@ -36,8 +36,9 @@ RESET_FUNC := ./reset.sh
RESET_PARAM := /dev/ttyACM0
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
@@ -52,7 +53,7 @@ LUFA_OPTS += -D USB_PRODUCT="L\"RDA1846 usb dongle\"" -D USB_PRODUCT_LEN=18
LUFA_COMPONENTS := USB USBCLASS TWI
-include ../avr.include.mk
+include $(SPREADAVR_PATH)/include.mk
CFLAGS += -D RDA_QUARTZ_12M288
#CFLAGS += -D RDA_QUARTZ_13M