diff --git a/.github/workflows/Harp.Behavior.yml b/.github/workflows/Harp.Behavior.yml
index df4c0e2..24545be 100644
--- a/.github/workflows/Harp.Behavior.yml
+++ b/.github/workflows/Harp.Behavior.yml
@@ -13,8 +13,45 @@ env:
DOTNET_GENERATE_ASPNET_CERTIFICATE: false
ContinuousIntegrationBuild: true
CiBuildVersion: ${{github.event.release.tag_name || 'api42.42.42'}}
+ AVR_TOOLCHAIN_URL: https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/SoftwareTools/avr8-gnu-toolchain-3.6.2.1778-win32.any.x86.zip
jobs:
- build:
+ build-firmware:
+ strategy:
+ fail-fast: false
+ matrix:
+ hardware-target: ['1.1', '1.2', '2.0']
+ name: Build Firmware (hw${{matrix.hardware-target}})
+ runs-on: windows-latest
+ if: github.event_name != 'release'
+ steps:
+ # ----------------------------------------------------------------------- Checkout
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ # ----------------------------------------------------------------------- Set up tools
+ - name: Set up AVR-GCC
+ run: |
+ Invoke-WebRequest -Uri $env:AVR_TOOLCHAIN_URL -OutFile $HOME\avr8-gnu-toolchain-win32_x86_64.zip
+ Expand-Archive $HOME\avr8-gnu-toolchain-win32_x86_64.zip -DestinationPath $HOME -Force
+ echo "$(Resolve-Path $HOME\avr8-gnu-toolchain-win32_x86\bin)" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
+
+ # ----------------------------------------------------------------------- Build firmware
+ - name: Build firmware
+ working-directory: Firmware/Behavior
+ id: build
+ shell: bash
+ run: make all HARDWARE_VERSION=${{matrix.hardware-target}} PREVIEW_VERSION=${{github.run_number}}
+
+ # ----------------------------------------------------------------------- Collect artifacts
+ - name: Collect Firmware binaries
+ uses: actions/upload-artifact@v4
+ if: steps.build.outcome == 'success' && always()
+ with:
+ name: Firmware-hw${{matrix.hardware-target}}
+ if-no-files-found: error
+ path: Firmware/Behavior/bin/*.hex
+
+ build-interface:
strategy:
fail-fast: false
matrix:
@@ -22,7 +59,7 @@ jobs:
include:
- configuration: Release
collect-packages: true
- name: Build
+ name: Build Interface
runs-on: windows-latest
if: github.event_name != 'release' || startsWith(github.event.release.tag_name, 'api')
steps:
@@ -79,7 +116,7 @@ jobs:
# Needed to attach files to releases
contents: write
environment: public-release
- needs: build
+ needs: [build-firmware, build-interface]
if: github.event_name == 'release'
steps:
# ----------------------------------------------------------------------- Set up .NET
diff --git a/.gitignore b/.gitignore
index fd28932..00cb6ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,5 +8,6 @@ desktop.ini
bin
obj
Debug
+Release
packages
*.componentinfo.xml
\ No newline at end of file
diff --git a/Firmware/Behavior/Behavior.cproj b/Firmware/Behavior/Behavior.cproj
index 619de21..f1dfa4e 100644
--- a/Firmware/Behavior/Behavior.cproj
+++ b/Firmware/Behavior/Behavior.cproj
@@ -60,100 +60,100 @@
- -mmcu=atxmega128a1u -B "%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\gcc\dev\atxmega128a1u"
- True
- True
- True
- True
- True
- False
- True
- True
-
-
- NDEBUG
-
-
-
-
- %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
-
-
- Optimize for size (-Os)
- True
- True
- True
-
-
- libm
-
-
-
-
- C:\Users\Filipe Carvalho\Documents\BitBucket\Device.Synchronizer\Firmware_\Synchronizer\Synchronizer\Synchronizer
- C:\Users\Filipe Carvalho\Documents\BitBucket\Device.Synchronizer\Firmware_\Synchronizer\Synchronizer
- C:\Users\Filipe Carvalho\Documents\BitBucket\Device.Synchronizer\Firmware\Synchronizer
- C:\Users\Filipe Carvalho\Documents\BitBucket\Device.Behavior\Firmware\Behavior
- C:\Users\CR Filipe\Documents\BitBucket\Device.Behavior\Firmware\Behavior
- C:\Users\Filipe Carvalho\Documents\BitBucket\Device.Wear.Basestation\Firmware\Master
- C:\Users\Filipe Carvalho\Documents\BitBucket.FilCarvalho\Harp\Corelibrary.Atxmega\Downloads
- C:\Users\Work\Documents\device.behavior\Firmware\Behavior
-
-
-
-
- %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
-
-
-
+ -mmcu=atxmega128a1u -B "%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\gcc\dev\atxmega128a1u"
+ True
+ True
+ True
+ True
+ True
+ False
+ True
+ True
+
+
+ NDEBUG
+
+
+
+
+ %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
+
+
+ Optimize for size (-Os)
+ True
+ True
+ True
+
+
+ libm
+ libATxmega128A1U-1.15.a
+
+
+
+
+ ..
+
+
+
+
+ %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
+
+
+
- -mmcu=atxmega128a1u -B "%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\gcc\dev\atxmega128a1u"
- True
- True
- True
- True
- True
- False
- True
- True
-
-
- DEBUG
-
-
-
-
- %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
-
-
- Optimize most (-O3)
- True
- True
- Default (-g2)
- True
-
-
- libm
- libATxmega128A1U-1.15.a
-
-
-
-
- ..
-
-
-
-
- %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
-
-
- Default (-Wa,-g)
-
+ -mmcu=atxmega128a1u -B "%24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\gcc\dev\atxmega128a1u"
+ True
+ True
+ True
+ True
+ True
+ False
+ True
+ True
+
+
+ DEBUG
+
+
+
+
+ %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
+
+
+ Optimize most (-O3)
+ True
+ True
+ Default (-g2)
+ True
+
+
+ libm
+ libATxmega128A1U-1.15.a
+
+
+
+
+ ..
+
+
+
+
+ %24(PackRepoDir)\atmel\XMEGAA_DFP\1.1.68\include
+
+
+ Default (-Wa,-g)
+
+ True
+
+
+ all
+ clean
+ Makefile
diff --git a/Firmware/Behavior/Makefile b/Firmware/Behavior/Makefile
new file mode 100644
index 0000000..eda32d5
--- /dev/null
+++ b/Firmware/Behavior/Makefile
@@ -0,0 +1,78 @@
+PRJ_NAME = Behavior
+CORE = ATxmega128A1U
+MCU = atxmega128a1u
+CORE_VERSION = 1.15
+FIRMWARE_VERSION ?= 3.3
+HARDWARE_VERSION ?= 2.0
+PREVIEW_VERSION ?= 0
+
+# Files and directories
+BUILD_DIR = bin
+PREVIEW_SUFFIX = $(if $(PREVIEW_VERSION:v%=),-preview$(PREVIEW_VERSION),)
+BUILD_NAME = $(PRJ_NAME)-fw$(FIRMWARE_VERSION)-harp$(CORE_VERSION)-hw$(HARDWARE_VERSION)-ass0$(PREVIEW_SUFFIX)
+FW_VERSION_WORDS = $(subst ., ,$(FIRMWARE_VERSION))
+HW_VERSION_WORDS = $(subst ., ,$(HARDWARE_VERSION))
+SRCS = $(wildcard *.c)
+OBJS = $(SRCS:%.c=$(BUILD_DIR)/%.o)
+LIBS = -l$(CORE)-$(CORE_VERSION)
+
+# Compiler flags
+CC = avr-gcc
+CFLAGS = \
+-x c \
+-funsigned-char \
+-funsigned-bitfields \
+-ffunction-sections \
+-fdata-sections \
+-fpack-struct \
+-fshort-enums \
+-mrelax \
+-O3 \
+-Wall \
+-mmcu=$(MCU) \
+-DMAJOR_FW_VERSION=$(word 1,$(FW_VERSION_WORDS)) \
+-DMINOR_FW_VERSION=$(word 2,$(FW_VERSION_WORDS)) \
+-DMAJOR_HW_VERSION=$(word 1,$(HW_VERSION_WORDS)) \
+-DMINOR_HW_VERSION=$(word 2,$(HW_VERSION_WORDS)) \
+-std=gnu99
+
+# Linker flags
+LDFLAGS = \
+-Wl,--start-group \
+-Wl,-lm \
+-Wl,$(LIBS) \
+-Wl,--end-group \
+-Wl,-L"." \
+-Wl,--gc-sections \
+-mrelax \
+-mmcu=$(MCU)
+
+# Object copy flags
+OBJCOPY = avr-objcopy
+OBJCOPY_FLAGS = \
+-O ihex \
+-R .eeprom \
+-R .fuse \
+-R .lock \
+-R .signature \
+-R .user_signatures \
+
+all: $(BUILD_DIR)/$(BUILD_NAME).hex
+
+clean:
+ rm -f $(OBJS) $(OBJS:.o=.d)
+ rm -f $(BUILD_DIR)/$(BUILD_NAME).elf
+ rm -f $(BUILD_DIR)/$(BUILD_NAME).hex
+ rm -f $(BUILD_DIR)/$(BUILD_NAME).map
+
+$(BUILD_DIR):
+ mkdir "$(BUILD_DIR)"
+
+$(BUILD_DIR)/%.o: %.c $(BUILD_DIR)
+ $(CC) $(CFLAGS) -c $(INCS) -MD -MP -MF "$(@:.o=.d)" -MT"$(@:.o=.d)" -MT"$@" -o $@ $<
+
+$(BUILD_DIR)/%.elf: $(OBJS)
+ $(CC) -o $@ $(OBJS) -Wl,-Map="$(@:.elf=.map)" $(LDFLAGS) $(LIBS)
+
+$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf
+ $(OBJCOPY) $(OBJCOPY_FLAGS) $< $@
diff --git a/Firmware/Behavior/app.c b/Firmware/Behavior/app.c
index 3c1cc36..4d6ada6 100644
--- a/Firmware/Behavior/app.c
+++ b/Firmware/Behavior/app.c
@@ -33,11 +33,11 @@ static const uint8_t default_device_name[] = "Behavior";
void hwbp_app_initialize(void)
{
/* Define versions */
- uint8_t hwH = 2;
- uint8_t hwL = 0;
- uint8_t fwH = 3;
- uint8_t fwL = 3;
- uint8_t ass = 0;
+ uint8_t hwH = MAJOR_HW_VERSION;
+ uint8_t hwL = MINOR_HW_VERSION;
+ uint8_t fwH = MAJOR_FW_VERSION;
+ uint8_t fwL = MINOR_FW_VERSION;
+ uint8_t ass = ASSEMBLY_VERSION;
/* Start core */
core_func_start_core(
diff --git a/Firmware/Behavior/app.h b/Firmware/Behavior/app.h
index f6dbf9a..8686bcf 100644
--- a/Firmware/Behavior/app.h
+++ b/Firmware/Behavior/app.h
@@ -3,6 +3,26 @@
#include
+/************************************************************************/
+/* Define versions */
+/************************************************************************/
+#ifndef MAJOR_HW_VERSION
+#define MAJOR_HW_VERSION 2
+#endif
+#ifndef MINOR_HW_VERSION
+#define MINOR_HW_VERSION 0
+#endif
+#ifndef MAJOR_FW_VERSION
+#define MAJOR_FW_VERSION 3
+#endif
+#ifndef MINOR_FW_VERSION
+#define MINOR_FW_VERSION 3
+#endif
+#ifndef ASSEMBLY_VERSION
+#define ASSEMBLY_VERSION 0
+#endif
+
+
/************************************************************************/
/* Enable the interrupts */
/************************************************************************/