# Processortyp M fuer Compiler, N fuer avrdude:
M=atmega2560
N=m2560

# Compileraufrufe:
C=avr-gcc -mmcu=$M -Wall -Os -c
A=avr-as
L=avr-gcc -mmcu=$M -Wall -Os

# Compileraufruf fuer Simulator:
LSIM=g++ -Wall -Wno-unused-variable -I$h $h/xtekplot1.o -lm -lX11 -L/usr/X11R6/lib

# fuer avrdude-Aufruf unter Linux:
TTY=/dev/ttyUSB0
# fuer avrdude-Aufruf unter MacOSX:
#TTY=/dev/tty.serial-0001

# verwendeter Programmer:
#P=avr910  #fuer mySmartUSB MK2
P=stk500v2 #fuer mySmartUSB light oder MK3

all: simulator1 test1.hex tarech2.hex
#all: test1.hex
#all: tarech2.hex
#all: simulator1

#mgkernf.c: mgkern.c doub2fliess.cc
#	c++ doub2fliess.cc -o doub2fliess
#	doub2fliess mgkern.c mgkernf.c

# Zum Austesten auf dem MK3
test1.hex: test1.cc lcd_treiber.h lcd_treiber.c mgkern.c mgkernf2.c
	$L -DLCD_MK3 -DATMEGA2560 test1.cc -o test1.elf
	avr-objcopy -O ihex -R .eeprom test1.elf test1.hex
	avr-objdump -h -S test1.elf > test1.lss

# Variante mit EADOGL LCD
tarech2.hex: tarech2.cc lcd_treiber.h lcd_treiber.c mgkern.c mgkernf2.c
	$L -DLCD_EADOG -DATMEGA2560 tarech2.cc -o tarech2.elf
	avr-objcopy -O ihex -R .eeprom tarech2.elf tarech2.hex
	avr-objdump -h -S tarech2.elf > tarech2.lss

# Zum Austesten auf dem Simulator
simulator1: test3.cc lcdsim.cc matrixsim.cc lcd_treiber.h lcd_treiber.c mgkern.c mgkernf2.c
	$(LSIM) -DLCD_SIMULATOR -DATMEGA2560 -DMATRIXQUER test3.cc -o simulator1

check:
	avrdude -p $N -c $P -P $(TTY) -v
checkforce:
	avrdude -p $N -F -c $P -P $(TTY) -v

# Fuses fuer 16MHz Quarz, fuer ATmega2560:
fusesetzen:
	avrdude -p m2560 -c $P -P $(TTY) -U lfuse:w:0xF7:m
	avrdude -p m2560 -c $P -P $(TTY) -U hfuse:w:0xD5:m
# Fuses fuer Bootloader auf ATmega2560:
fusesetzen-bootloader:
	avrdude -p m2560 -c $P -P $(TTY) -U lfuse:w:0xF7:m
	avrdude -p m2560 -c $P -P $(TTY) -U hfuse:w:0xDC:m
# Fuses fuer nicht fullswing:
fusesetzen-notfullswing:
	avrdude -p m2560 -c $P -P $(TTY) -U lfuse:w:0xFF:m

install1: test1.hex
	avrdude -p $N -c $P -P $(TTY) -U flash:w:test1.hex:i

install1k: test1.hex  # um 64KB Fehler in avrdude zu umgehen
	hexsplit -a test1.hex
	avrdude -p $N -c $P -P $(TTY) -U flash:w:test1_b.hex:i
	avrdude -p $N -c $P -P $(TTY) -U flash:w:test1_a.hex:i

install2: tarech2.hex
	avrdude -p $N -c $P -P $(TTY) -U flash:w:tarech2.hex:i

install2k: tarech2.hex  # um 64KB Fehler in avrdude zu umgehen
	hexsplit -a tarech2.hex
	avrdude -p $N -c $P -P $(TTY) -U flash:w:tarech2_b.hex:i
	avrdude -p $N -c $P -P $(TTY) -D -U flash:w:tarech2_a.hex:i

# Test des USB-Anschlusses zum Bootloader
checkb:
	hexprog $(TTY) -cv

install1b: test1.hex   # Installieren mit Bootloader auf dem MK3-Board
	hexprog $(TTY) -wf test1.hex

install2b: tarech2.hex # Installieren mit Bootloader auf wirklichem Geraet
	hexprog $(TTY) -wf tarech2.hex

einlesen:   # geht bei mehr als 64KB mit avrdude-5.11 nicht korrekt!
	avrdude -p $N -c $P -P $(TTY) -U flash:r:flash.raw:r
eeinlesen:  # geht mit avrdude-5.11 nicht korrekt!
	avrdude -p $N -c $P -P $(TTY) -U eeprom:r:eeprom.raw:r
einlesenb:
	hexprog $(TTY) -rf >tmp.hex
	hex2raw tmp.hex flash.raw
eeinlesenb:
	hexprog $(TTY) -re >tmp.hex
	hex2raw tmp.hex eeprom.raw

clean:
	rm -f *~ *.o *.elf tmp.hex
clean3:
	rm -f *~ *.o *.elf tmp.hex test3.cc simulator?
clean_all:
	rm -f *~ *.o *.elf *.lss *.hex simulator?
