# FunkUsb, HID:Vorlaufempfänger version
#240611	Makefile modernized, no intermediate object files, binary .flash file
P = FunkUsb
D = attiny85
F = 16500000

AVRDUDE = avrdude -c pony-stk200 -P lpt1 -p $D
USBDRV = ../../usbdrv
WINAVR = c:/Programme/WinAVR
PATH := $(WINAVR)/gcc1010/bin;$(PATH)

CC = avr-gcc -Wall -Wno-parentheses -Os -I. -I$(USBDRV) -mmcu=$D -DF_CPU=$F

SRC = $(USBDRV)/usbdrvasm.S $(USBDRV)/usbdrv.c $P.cpp flash_rw.cpp DCF77.cpp Wetter.cpp crypt.o FlashBuf.S

# symbolic targets:
all: $P.flash $P.lst

flash: $P.flash
	$(AVRDUDE) -U $@:w:$<:r

EFUSE=0b11111110
#	       └SELFPRGEN = 0
HFUSE=0b01010111
#	│││││└┴┴BODLEVEL 2..0 (brownout trigger level → disabled)
#	││││└───EESAVE (preserve EEPROM on Chip Erase → preserve)
#	│││└────WDTON (watchdog timer always on → disable)
#	││└─────SPIEN (enable serial programming → enabled)
#	│└──────DWEN (debug wire enable → disabled)
#	└───────RSTDISBL (disable external reset → disabled)
LFUSE=0b11100001
#	││└┤└┴┴┴CKSEL 3..0 (clock selection → HF PLL)
#	││ └────SUT 1..0 (BOD enabled, fast rising power)
#	│└──────CKOUT (clock output on CKOUT pin → disabled)
#	└───────CKDIV8 (divide clock by 8 → don't divide)

program:
	$(AVRDUDE) -U efuse:w:$(EFUSE):m -U hfuse:w:$(HFUSE):m -U lfuse:w:$(LFUSE):m -U flash:w:$P.flash:r

readcal:
	$(AVRDUDE) -U calibration:r:con:i | head -1

clean:
	rm -f $P.flash $P.eeprom $P.lst $P.elf

# file targets:
$P.elf: $(SRC) *.h Makefile
	$(CC) -Wl,--section-start=.bootloader=0x1880 -o $@ $(SRC)
	$(WINAVR)/bin/avr-size --mcu=$D -C $@

%.flash: %.elf
	avr-objcopy -j .text -j .data -O binary $< $@

%.lst: %.elf
	avr-objdump -d -t $< >$@
	avr-strip $<
