aboutsummaryrefslogtreecommitdiff
path: root/AT91SAM7S256
diff options
context:
space:
mode:
authorNicolas Schodet2021-09-28 22:24:47 +0200
committerNicolas Schodet2021-09-28 22:56:53 +0200
commit95f27877c886c7ef263e90ad494748733744fce8 (patch)
tree2c2d6844cdd3109ccf7bebb7326fb0e47a538c79 /AT91SAM7S256
parent97335845c390f180228cc2806341d34409d78535 (diff)
Change the versioning scheme to use a third number
NXT Improved firmware will now use a x.y.z version numbering scheme. The current version is 1.29.0 and the next one will be 1.29.1. Previously, the commit hash was included in the custom version. This is replaced with a build date corresponding to the newest git commit, unless the SOURCE_DATE_EPOCH environment variable is defined, in which case it will be used as build date. When out of git, if no SOURCE_DATE_EPOCH is defined, it will fall back to the current date. The weird date parsing code in BtTest is gone.
Diffstat (limited to 'AT91SAM7S256')
-rw-r--r--AT91SAM7S256/SAM7S256/gcc/Makefile17
-rw-r--r--AT91SAM7S256/Source/BtTest.inc70
-rw-r--r--AT91SAM7S256/Source/c_loader.iom3
3 files changed, 24 insertions, 66 deletions
diff --git a/AT91SAM7S256/SAM7S256/gcc/Makefile b/AT91SAM7S256/SAM7S256/gcc/Makefile
index ed52112..2562b54 100644
--- a/AT91SAM7S256/SAM7S256/gcc/Makefile
+++ b/AT91SAM7S256/SAM7S256/gcc/Makefile
@@ -3,8 +3,13 @@ SRCDIR = $(BASE)/Source
DBGDIR = $(BASE)/armdebug/Debugger
CPUINCDIR = $(BASE)/SAM7S256/Include
-GIT_VERSION := $(shell git rev-parse --short=7 HEAD)
-CUSTOM_FIRMWAREVERSION = $(GIT_VERSION)
+DATE_FMT = +%Y-%m-%dT%H:%M
+ifndef SOURCE_DATE_EPOCH
+ SOURCE_DATE_EPOCH = $(shell git log -1 --pretty=%ct)
+endif
+BUILD_DATE ?= $(shell LC_ALL=C date -u -d "@$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null \
+ || LC_ALL=C date -u -r "$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null \
+ || LC_ALL=C date -u "$(DATE_FMT)")
TARGET = nxt_firmware
@@ -33,7 +38,7 @@ INCLUDES =
MCU = arm7tdmi
STARTOFUSERFLASH_DEFINES = -DSTARTOFUSERFLASH_FROM_LINKER=1
-VERSION_DEFINES = -DCUSTOM_FIRMWAREVERSION=\"$(CUSTOM_FIRMWAREVERSION)\"
+VERSION_DEFINES = -D'BUILD_DATE="$(BUILD_DATE)"'
DEFINES = -DPROTOTYPE_PCB_4 -DNEW_MENU -DROM_RUN -DVECTORS_IN_RAM \
$(STARTOFUSERFLASH_DEFINES) $(VERSION_DEFINES)
OPTIMIZE = -Os -fno-strict-aliasing \
@@ -91,12 +96,12 @@ $(THUMB_OBJECTS): THUMB = -mthumb
-include $(OBJECTS:%.o=%.d)
-LAST_CUSTOM_FIRMWAREVERSION=none
+LAST_BUILD_DATE=none
-include version.mak
-ifneq ($(LAST_CUSTOM_FIRMWAREVERSION),$(CUSTOM_FIRMWAREVERSION))
+ifneq ($(LAST_BUILD_DATE),$(BUILD_DATE))
.PHONY: version.mak
version.mak:
- echo "LAST_CUSTOM_FIRMWAREVERSION = $(CUSTOM_FIRMWAREVERSION)" > $@
+ echo "LAST_BUILD_DATE = $(BUILD_DATE)" > $@
endif
c_ui.o: version.mak
diff --git a/AT91SAM7S256/Source/BtTest.inc b/AT91SAM7S256/Source/BtTest.inc
index f879e20..65575af 100644
--- a/AT91SAM7S256/Source/BtTest.inc
+++ b/AT91SAM7S256/Source/BtTest.inc
@@ -2,6 +2,10 @@
//#define TESTPRG // If defined the test program will be included
+#ifndef BUILD_DATE
+# define BUILD_DATE ""
+#endif
+
#ifdef TESTPRG
#include "Test1.txt"
#include "Test2.txt"
@@ -9,69 +13,17 @@
extern void BtIo(void);
-const char BUILD_DATE[] = __DATE__;
-const char BUILD_TIME[] = __TIME__;
-
-const char MONTH[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
-
void GetProtocolVersion(UBYTE *String)
{
- UWORD Tmp;
-
- Tmp = FIRMWAREVERSION & 0x00FF;
-
- if (Tmp < 100)
- {
-#ifdef CUSTOM_FIRMWAREVERSION
- int pad = (sizeof (CUSTOM_FIRMWAREVERSION) - 1) > 7 ? 1 : 1 + 7 - (sizeof (CUSTOM_FIRMWAREVERSION) - 1);
- sprintf((char*)String,"FW %*u.%02ui-%.7s", pad, (FIRMWAREVERSION >> 8) & 0x00FF,Tmp & 0x00FF, CUSTOM_FIRMWAREVERSION);
-#else
- sprintf((char*)String,"FW %3u.%02u",(FIRMWAREVERSION >> 8) & 0x00FF,Tmp & 0x00FF);
-#endif
- }
- else
- {
- sprintf((char*)String,"FW Hex %2X.%02X",(FIRMWAREVERSION >> 8) & 0x00FF,Tmp & 0x00FF);
- }
+ char Tmp[DISPLAYLINE_LENGTH + 1];
+ snprintf(Tmp, sizeof(Tmp), "%d.%d.%d", (FIRMWAREVERSION >> 8) & 0xFF, FIRMWAREVERSION & 0xFF, FIRMWAREPATCH);
+ snprintf((char*)String, DISPLAYLINE_LENGTH + 1, "FWi %*s", DISPLAYLINE_LENGTH - 4, Tmp);
}
void GetARMBuild(UBYTE *String)
{
- UWORD Tmp;
- UWORD Lng;
- char String1[4];
- char String2[4];
-
- String1[0] = BUILD_DATE[4];
- String1[1] = BUILD_DATE[5];
- String1[2] = 0;
-
- Tmp = (UWORD)atoi(String1);
- Lng = 0;
- Lng += sprintf((char*)&String[Lng],"BUILD ");
- Lng += sprintf((char*)&String[Lng],"%02u",Tmp);
-
- String1[0] = BUILD_DATE[0];
- String1[1] = BUILD_DATE[1];
- String1[2] = BUILD_DATE[2];
- String1[3] = 0;
- String2[3] = 0;
-
- Tmp = 0;
- do
- {
- String2[0] = MONTH[0 + 3 * Tmp];
- String2[1] = MONTH[1 + 3 * Tmp];
- String2[2] = MONTH[2 + 3 * Tmp];
- Tmp++;
- }
- while ((Tmp < 12) && (strcmp(String1,String2) != 0));
-
- Lng += sprintf((char*)&String[Lng],"%02u",Tmp);
- Lng += sprintf((char*)&String[Lng],"%c%c",BUILD_DATE[9],BUILD_DATE[10]);
- Lng += sprintf((char*)&String[Lng],"%c%c",BUILD_TIME[0],BUILD_TIME[1]);
- Lng += sprintf((char*)&String[Lng],"%c%c",BUILD_TIME[3],BUILD_TIME[4]);
+ snprintf((char*)String, DISPLAYLINE_LENGTH + 1, "%s", BUILD_DATE);
}
@@ -261,9 +213,9 @@ UBYTE TestPrg(UBYTE Dummy)
case SYSTEM_INIT :
{
GetProtocolVersion(TxtBuffer[0]);
- GetAVRBuild(TxtBuffer[1]);
- GetBC4Build(TxtBuffer[2]);
- GetARMBuild(TxtBuffer[3]);
+ GetARMBuild(TxtBuffer[1]);
+ GetAVRBuild(TxtBuffer[2]);
+ GetBC4Build(TxtBuffer[3]);
GetBC4Address(TxtBuffer[4]);
pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TxtBuffer[0];
diff --git a/AT91SAM7S256/Source/c_loader.iom b/AT91SAM7S256/Source/c_loader.iom
index dde8b6a..588db1c 100644
--- a/AT91SAM7S256/Source/c_loader.iom
+++ b/AT91SAM7S256/Source/c_loader.iom
@@ -21,7 +21,8 @@
//For example, version 1.5 would be 0x0105
//If these switch to little-endian, be sure to update
//definition and usages of VM_OLDEST_COMPATIBLE_VERSION, too!
-#define FIRMWAREVERSION 0x011D //1.28
+#define FIRMWAREVERSION 0x011D // x.y
+#define FIRMWAREPATCH 0 // .z, the third number
#define PROTOCOLVERSION 0x017C //1.124
enum