From 7678c3d657a9b6ea6a501c57e0a588c1d6839a94 Mon Sep 17 00:00:00 2001
From: Valerio Vaccaro <valerio.vaccaro@gmail.com>
Date: Mon, 12 Aug 2024 17:49:28 +0200
Subject: [PATCH] add automagic firmware version name calculation

---
 auto_firmware_version.py                   | 17 +++++++
 platformio.ini                             | 52 ++++++++++++++++++++++
 src/drivers/displays/wt32DisplayDriver.cpp |  6 ++-
 3 files changed, 73 insertions(+), 2 deletions(-)
 create mode 100644 auto_firmware_version.py

diff --git a/auto_firmware_version.py b/auto_firmware_version.py
new file mode 100644
index 0000000..5a60603
--- /dev/null
+++ b/auto_firmware_version.py
@@ -0,0 +1,17 @@
+import subprocess
+
+Import("env")
+
+def get_firmware_specifier_build_flag():
+    ret = subprocess.run(["git", "describe"], stdout=subprocess.PIPE, text=True) #Uses only annotated tags
+    #ret = subprocess.run(["git", "describe", "--tags"], stdout=subprocess.PIPE, text=True) #Uses any tags
+    build_version = ret.stdout.strip()
+    # fix unwanted and verbose tags
+    build_version = build_version.replace('Release', '')
+    build_flag = "-D AUTO_VERSION=\\\"" + build_version + "\\\""
+    print ("Firmware Revision: " + build_version)
+    return (build_flag)
+
+env.Append(
+    BUILD_FLAGS=[get_firmware_specifier_build_flag()]
+)
diff --git a/platformio.ini b/platformio.ini
index 03906cd..5ef99d1 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -17,6 +17,8 @@ default_envs = NerdminerV2-T-HMI, wt32-sc01, wt32-sc01-plus, han_m5stack, M5Stic
 platform = espressif32
 board = m5stick-c
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -48,6 +50,8 @@ lib_ignore =
 platform = espressif32
 board = esp-wrover-kit
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -80,6 +84,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-s3-devkitc-1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -115,6 +121,8 @@ lib_ignore =
 platform = espressif32
 board = lolin_s3_mini
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -147,6 +155,8 @@ lib_ignore =
 platform = espressif32
 board = m5stack-core-esp32
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters =
 	esp32_exception_decoder
 	time
@@ -177,6 +187,8 @@ lib_ignore =
 platform = espressif32
 board = lolin_s2_mini
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
     esp32_exception_decoder
     time
@@ -206,6 +218,8 @@ lib_ignore =
 platform = espressif32
 board = lolin_s3_mini
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -241,6 +255,8 @@ lib_ignore =
 platform = espressif32
 board = esp32dev
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
     esp32_exception_decoder
     time
@@ -270,6 +286,8 @@ lib_ignore =
 platform = espressif32
 board = seeed_xiao_esp32c3
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -300,6 +318,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-c3-devkitm-1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -331,6 +351,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-s3-devkitc-1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -363,6 +385,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-s3-devkitc-1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -398,6 +422,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-s3-devkitc-1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -433,6 +459,8 @@ lib_ignore =
 platform = espressif32
 board = esp32dev
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -460,6 +488,8 @@ lib_ignore =
 platform = espressif32
 board = esp32dev ;esp-wrover-kit
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -491,6 +521,8 @@ lib_ignore =
 platform = espressif32
 board = lilygo-t-amoled
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 board_build.partitions = huge_app.csv
 build_flags = 
     -DNERMINER_S3_AMOLED
@@ -513,6 +545,8 @@ lib_ignore =
 platform = espressif32
 board = lilygo-t-amoled
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 board_build.partitions = huge_app.csv
 build_flags = 
     -DNERMINER_S3_AMOLED
@@ -535,6 +569,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-s3-devkitc-1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 board_build.partitions = huge_app.csv
 build_flags = 
     -DNERMINER_S3_DONGLE
@@ -559,6 +595,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-s3-devkitc-1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 board_build.partitions = huge_app.csv
 build_flags = 
     -DNERMINER_S3_GEEK
@@ -581,6 +619,8 @@ lib_ignore =
 platform = espressif32 ;(ESP32-D0WD-V3)
 board = esp32cam
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -610,6 +650,8 @@ lib_ignore =
 platform = espressif32
 board = esp32-s3-t-qt-pro
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
@@ -639,6 +681,8 @@ lib_ignore =
 platform = espressif32
 board = esp32dev
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_speed = 115200
 upload_speed = 921600
 ;build_type = debug
@@ -687,6 +731,8 @@ lib_ignore =
 platform = espressif32
 board = esp32dev
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_speed = 115200
 monitor_filters = 
 	esp32_exception_decoder
@@ -740,6 +786,8 @@ lib_ignore =
 platform = espressif32
 board = lilygo-t-hmi
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 board_build.partitions = default_16MB.csv
 monitor_filters =
 	esp32_exception_decoder
@@ -776,6 +824,8 @@ lib_ignore =
 platform = espressif32
 board = ttgo-lora32-v1
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_speed = 115200
 upload_speed = 115200
 board_build.partitions = huge_app.csv
@@ -797,6 +847,8 @@ lib_ignore =
 platform = espressif32
 board = m5stack-stamps3
 framework = arduino
+extra_scripts =
+    pre:auto_firmware_version.py
 monitor_filters = 
 	esp32_exception_decoder
 	time
diff --git a/src/drivers/displays/wt32DisplayDriver.cpp b/src/drivers/displays/wt32DisplayDriver.cpp
index f1d51d9..ed6b379 100644
--- a/src/drivers/displays/wt32DisplayDriver.cpp
+++ b/src/drivers/displays/wt32DisplayDriver.cpp
@@ -323,10 +323,12 @@ void wt32Display_NoScreen(unsigned long mElapsed)
 void wt32Display_LoadingScreen(void)
 {
   Serial.println("Initializing...");
+  Serial.print("Firmware Version: ");
+  Serial.println(AUTO_VERSION);
   lv_label_set_text(ui_lblssid, "SSID HanSoloAP");
   lv_label_set_text(ui_lblpassword, "Password MineYourCoins");
-  lv_label_set_text(ui_lblversion, "Version 1.6.4 (RC1)");
-  _ui_screen_change(&ui_HomeScreen, LV_SCR_LOAD_ANIM_FADE_ON, 500, 0, &ui_HomeScreen_screen_init);
+  lv_label_set_text(ui_lblversion, AUTO_VERSION);
+  _ui_screen_change(&ui_HomeScreen, LV_SCR_LOAD_ANIM_FADE_ON, 2000, 0, &ui_HomeScreen_screen_init);
 }
 
 void wt32Display_SetupScreen(void)