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 */ /************************************************************************/