CONTIKI_TARGET_DIRS = . dev apps net loader dev/arduino CONTIKI_CORE=contiki-main CONTIKI_TARGET_MAIN = ${CONTIKI_CORE}.o CONTIKI_TARGET_SOURCEFILES += contiki-main.c params.c node-id.c #Needed for slip CONTIKI_TARGET_SOURCEFILES += led.c sensors.c slip_uart0.c slip.c leds-arch.c CONTIKI_TARGET_SOURCEFILES += temperature-sensor.c adc.c #Needed for Button CONTIKI_TARGET_SOURCEFILES += button-sensor.c # i2c Master #CONTIKI_TARGET_SOURCEFILES += i2c.c #Needed for DHT11 humidity sensor CONTIKI_TARGET_SOURCEFILES += dht11.c #Needed for DS18S20 temperature sensor CONTIKI_TARGET_SOURCEFILES += ds1820.c #Needed for Battery test CONTIKI_TARGET_SOURCEFILES += battery-sensor.c batmon.c #Needed for PIR CONTIKI_TARGET_SOURCEFILES += pir-sensor.c #Needed for OPTRIAC CONTIKI_TARGET_SOURCEFILES += optriac-sensor.c #Needed for SERVO CONTIKI_TARGET_SOURCEFILES += servo.c servo-sensor.c #Needed for Timer4 Servo #CONTIKI_TARGET_SOURCEFILES += t4-servo.c t4-servo-sensor.c #Needed for Relay 1 to 4 CONTIKI_TARGET_SOURCEFILES += relay.c relay-sensor.c # Arduino CONTIKI_TARGET_SOURCEFILES += wiring_digital.c CONTIKI_TARGET_SOURCEFILES += new.cpp twi.c Wire.cpp WMath.cpp CONTIKI_TARGET_SOURCEFILES += Print.cpp Stream.cpp WString.cpp CONTIKI_TARGET_SOURCEFILES += SPI.cpp CONTIKI_TARGET_SOURCEFILES += HardwareSerial.cpp HardwareSerial1.cpp # guh Source Files # Smart Grid Ready Interface CONTIKI_TARGET_SOURCEFILES += sg-ready.c CONTIKIAVR=$(CONTIKI)/cpu/avr THISPLATFORM=$(CONTIKI)/platform/osd-merkur-256 CONTIKIBOARD=. BOOTLOADER_START = 0x3E000 CONTIKI_PLAT_DEFS = -DF_CPU=16000000UL -DAUTO_CRC_PADDING=2 -DPLAT_TIMER=5 MCU=atmega256rfr2 #AVRDUDE_PROGRAMMER=jtag2 AVRDUDE_PROGRAMMER=stk500v2 # For usb devices, you may either use PORT=usb, or (e.g. if you have # more than one programmer connected) you can use the following trick to # find out the serial number: # # The example is for an JTAGICE mkII used to program an atmega256: # avrdude -v -P usb:xxxx -c jtag2 -p atmega256 # AVRDUDE_PORT=usb:00B000000D79 # For serial devices with bootloader we also use the AVRDUDE_PORT setting: AVRDUDE_PORT=/dev/ttyUSB0 # Only needed for serial devices, use empty setting for other # programmers AVRDUDE_BAUD_OPTION=-b 57600 # Additional avrdude options # First some flash options: # Verify off is -V # Erase is -e # No-Erase (needed by our stk500 variant) is -D # Note that it really doesn't turn off erase: It doesn't issue an # explicit erase command (which is not implemented) but the bootloader # *always* does an implicit erase when programming. AVRDUDE_FLASH_OPTIONS=-D AVRDUDE_OPTIONS=$(AVRDUDE_BAUD_OPTION) $(AVRDUDE_FLASH_OPTIONS) AVRDUDE_MCU=m256rfr2 #debug # CFLAGS += -save-temps # Bootloader bonsai # LDFLAGS += -save-temps # For newer bootloaders we have a jump table at the end of the bootloader # section: guhRF Bootloader MAC Address BOOTLOADER_GET_MAC=0x0003ff80 BOOTLOADER_WRITE_PAGE_TO_FLASH=0x0003ff84 BOOTLOADER_GET_PART_COUNT=0x0003ff88 BOOTLOADER_GET_PART_SIZE=0x0003ff8c BOOTLOADER_GET_PART_START=0x0003ff90 BOOTLOADER_SET_PART_OK=0x0003ff94 BOOTLOADER_CLR_PART_OK=0x0003ff98 BOOTLOADER_SET_BOOT_DEFAULT=0x0003ff9c BOOTLOADER_SET_BOOT_NEXT=0x0003ffa0 BOOTLOADER_BACKUP_IRQ_TABLE=0x0003ffa4 BOOTLOADER_GET_BOOT_DEFAULT=0x0003ffa8 BOOTLOADER_GET_BOOT_NEXT=0x0003ffac BOOTLOADER_GET_ACTIVE_PART=0x0003ffb0 BOOTLOADER_PARTITION=0 TEXT_SECTION_LENGTH=0x1ef00 PART_IRQVEC_SIZE=$(shell echo $$((0x800))) ifeq ($(BOOTLOADER_PARTITION),0) TEXT_SECTION_START=0x0 LOW_PARTITIONS=--only-section=.customlowtext --only-section=.text else TEXT_SECTION_START=$(TEXT_SECTION_LENGTH) LOW_PARTITIONS=--only-section=.customlowtext endif PART_IRQVEC_BACKUP_START:=$(shell printf "0x%x" \ $$(($(TEXT_SECTION_START) + $(TEXT_SECTION_LENGTH) - $(PART_IRQVEC_SIZE)))) CUSTOM_SUFFIX=.$(BOOTLOADER_PARTITION) LDFLAGS += -Wl,--defsym,bootloader_get_mac=$(BOOTLOADER_GET_MAC) \ -Wl,--defsym,_bootloader_write_page_to_flash=$(BOOTLOADER_WRITE_PAGE_TO_FLASH) \ -Wl,--defsym,bootloader_get_part_count=$(BOOTLOADER_GET_PART_COUNT) \ -Wl,--defsym,bootloader_get_part_size=$(BOOTLOADER_GET_PART_SIZE) \ -Wl,--defsym,bootloader_get_part_start=$(BOOTLOADER_GET_PART_START) \ -Wl,--defsym,_bootloader_set_part_ok=$(BOOTLOADER_SET_PART_OK) \ -Wl,--defsym,_bootloader_clr_part_ok=$(BOOTLOADER_CLR_PART_OK) \ -Wl,--defsym,_bootloader_set_boot_default=$(BOOTLOADER_SET_BOOT_DEFAULT) \ -Wl,--defsym,_bootloader_set_boot_next=$(BOOTLOADER_SET_BOOT_NEXT) \ -Wl,--defsym,_bootloader_backup_irq_table=$(BOOTLOADER_BACKUP_IRQ_TABLE) \ -Wl,--defsym,bootloader_get_boot_default=$(BOOTLOADER_GET_BOOT_DEFAULT) \ -Wl,--defsym,bootloader_get_boot_next=$(BOOTLOADER_GET_BOOT_NEXT) \ -Wl,--defsym,bootloader_get_active_part=$(BOOTLOADER_GET_ACTIVE_PART) \ -Wl,--defsym,__TEXT_SECTION_OFFSET__=$(TEXT_SECTION_START) \ -T $(THISPLATFORM)/custom-avr6.xm include $(CONTIKIAVR)/Makefile.avr include $(CONTIKIAVR)/radio/Makefile.radio MODULES += core/net/mac core/net core/net/mac/sicslowmac \ core/net/mac/contikimac core/net/llsec core/net/llsec/noncoresec \ # core/net/ipv6 core/net/ipv4 core/net/ip \ # core/net/rime \ # core/net/rpl \ CUSTOM_RULE_LINK=1 %.$(TARGET)$(CUSTOM_SUFFIX): %.co $(PROJECT_OBJECTFILES) \ $(PROJECT_LIBRARIES) contiki-$(TARGET).a $(TRACE_LD) $(Q)$(LD) $(LDFLAGS) $(TARGET_STARTFILES) ${filter-out %.a,$^} \ ${filter %.a,$^} $(TARGET_LIBFILES) -o $@ %: %.$(TARGET) %: %.$(TARGET)$(CUSTOM_SUFFIX) @ # Generic rules for .hex, .eep and .sz (size) file: %.$(TARGET)$(CUSTOM_SUFFIX).hex: %.$(TARGET)$(CUSTOM_SUFFIX) $(OBJCOPY) -j .customlowtext -j .text -j .data -O ihex $< $@ %.$(TARGET)$(CUSTOM_SUFFIX).eep: %.$(TARGET)$(CUSTOM_SUFFIX) $(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 -O ihex $< $@ %.$(TARGET)$(CUSTOM_SUFFIX).sz: %.$(TARGET)$(CUSTOM_SUFFIX) $(ELF_SIZE) $< %.$(TARGET)$(CUSTOM_SUFFIX)-combined: %.$(TARGET)$(CUSTOM_SUFFIX) cp $< $@.tmp $(OBJCOPY) -O binary $(LOW_PARTITIONS) $< tmp.bin truncate -s $(PART_IRQVEC_SIZE) tmp.bin $(OBJCOPY) --add-section .upperlowtext=tmp.bin \ --change-section-address .upperlowtext=$(PART_IRQVEC_BACKUP_START) \ --set-section-flags .upperlowtext=alloc,load,contents,readonly \ $@.tmp mv $@.tmp $@ rm -f tmp.bin %.$(TARGET)$(CUSTOM_SUFFIX)-combined.hex: %.$(TARGET)$(CUSTOM_SUFFIX)-combined $(OBJCOPY) -j .upperlowtext -j .customlowtext -j .text -j .data \ -O ihex $< $@ flash: $(EXE).$(TARGET)$(CUSTOM_SUFFIX)-combined.u avr-size: $(EXE).$(TARGET)$(CUSTOM_SUFFIX).sz .PHONY: flash avr-size .PRECIOUS: %.$(TARGET)$(CUSTOM_SUFFIX) \ $(EXE).$(TARGET)$(CUSTOM_SUFFIX).hex \ $(EXE).$(TARGET)$(CUSTOM_SUFFIX).eep \ $(EXE).$(TARGET)$(CUSTOM_SUFFIX)-combined \ $(EXE).$(TARGET)$(CUSTOM_SUFFIX)-combined.hex