From 087532085fa11cf7c4fb5ecf3b96c61a72cfa058 Mon Sep 17 00:00:00 2001
From: PavelSindler <sindlerpa@gmail.com>
Date: Thu, 11 Jan 2018 15:50:26 +0100
Subject: [PATCH] development fw versions has initial message for warning

---
 Firmware/Configuration.h  | 13 +++++++++----
 Firmware/Marlin.h         |  1 +
 Firmware/Marlin_main.cpp  | 18 ++++++++++++++++--
 Firmware/language_all.cpp | 28 ++++++++++++++++++++++++++++
 Firmware/language_all.h   |  8 ++++++++
 Firmware/language_cz.h    |  5 +++++
 Firmware/language_en.h    |  4 ++++
 Firmware/ultralcd.cpp     |  4 ++--
 Firmware/util.cpp         |  2 +-
 9 files changed, 74 insertions(+), 9 deletions(-)

diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h
index d24c4371..ab486845 100644
--- a/Firmware/Configuration.h
+++ b/Firmware/Configuration.h
@@ -8,11 +8,16 @@
 #define STR(x) STR_HELPER(x)
 
 // Firmware version
-#define FW_version "3.1.1-RC4"
-#define FW_build   143
-//#define FW_build   --BUILD-NUMBER--
-#define FW_version_build FW_version " b" STR(FW_build) "e"
+#define FW_VERSION "3.1.1-RC4"
+#define FW_COMMIT_NR   143
+#define FW_DEV_VERSION FW_VERSION_RC
+#define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR)
 
+#define FW_VERSION_UNKNOWN 4
+#define FW_VERSION_ALPHA 3
+#define FW_VERSION_BETA 2
+#define FW_VERSION_RC 1
+#define FW_VERSION_GOLD 0
 
 #define FW_PRUSA3D_MAGIC "PRUSA3DFW"
 #define FW_PRUSA3D_MAGIC_LEN 10
diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h
index 4d04b144..11a3bc24 100644
--- a/Firmware/Marlin.h
+++ b/Firmware/Marlin.h
@@ -369,6 +369,7 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
 float temp_comp_interpolation(float temperature);
 void temp_compensation_apply();
 void temp_compensation_start();
+void show_fw_version_warnings();
 
 #ifdef PINDA_THERMISTOR
 float temp_compensation_pinda_thermistor_offset(float temperature_pinda);
diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp
index 996ec118..eed2bfbf 100644
--- a/Firmware/Marlin_main.cpp
+++ b/Firmware/Marlin_main.cpp
@@ -886,6 +886,17 @@ void factory_reset()
 	KEEPALIVE_STATE(IN_HANDLER);
 }
 
+void show_fw_version_warnings() {
+	if (FW_DEV_VERSION == FW_VERSION_GOLD) return;
+	switch (FW_DEV_VERSION) {
+	case(FW_VERSION_ALPHA): lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_ALPHA); break;
+	case(FW_VERSION_BETA): lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_BETA); break;
+	case(FW_VERSION_RC): lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_RC); break;
+	default: lcd_show_fullscreen_message_and_wait_P(MSG_FW_VERSION_UNKNOWN); break;
+	}
+	lcd_update_enable(true);
+}
+
 // "Setup" function is called by the Arduino framework on startup.
 // Before startup, the Timers-functions (PWM)/Analog RW and HardwareSerial provided by the Arduino-code 
 // are initialized by the main() routine provided by the Arduino framework.
@@ -914,7 +925,7 @@ void setup()
 	stdout = uartout;
 	SERIAL_PROTOCOLLNPGM("start");
 	SERIAL_ECHO_START;
-	printf_P(PSTR(" "FW_version_build"\n"));
+	printf_P(PSTR(" "FW_VERSION_FULL"\n"));
 
 #if 0
 	SERIAL_ECHOLN("Reading eeprom from 0 to 100: start");
@@ -1122,6 +1133,9 @@ void setup()
 	
 #ifndef DEBUG_DISABLE_STARTMSGS
   KEEPALIVE_STATE(PAUSED_FOR_USER);
+
+  show_fw_version_warnings();
+
   if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 1) {
 	  lcd_wizard(0);
   }
@@ -2296,7 +2310,7 @@ void process_commands()
 		
 	} else if(code_seen("Fir")){
 
-      SERIAL_PROTOCOLLN(FW_version);
+      SERIAL_PROTOCOLLN(FW_VERSION);
 
     } else if(code_seen("Rev")){
 
diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp
index 27d4c1e0..f6241bea 100644
--- a/Firmware/language_all.cpp
+++ b/Firmware/language_all.cpp
@@ -817,6 +817,34 @@ const char * const MSG_FSENS_NOT_RESPONDING_LANG_TABLE[LANG_NUM] PROGMEM = {
 	MSG_FSENS_NOT_RESPONDING_CZ
 };
 
+const char MSG_FW_VERSION_ALPHA_EN[] PROGMEM = "You are using firmware alpha version. This is development version. Using this version is not recommended and may cause printer damage.";
+const char MSG_FW_VERSION_ALPHA_CZ[] PROGMEM = "Pouzivate alpha verzi firmwaru. Jedna se o vyvojovou verzi. Pouzivani teto verze firmware neni doporuceno a muze zpusobit poskozeni tiskarny.";
+const char * const MSG_FW_VERSION_ALPHA_LANG_TABLE[LANG_NUM] PROGMEM = {
+	MSG_FW_VERSION_ALPHA_EN,
+	MSG_FW_VERSION_ALPHA_CZ
+};
+
+const char MSG_FW_VERSION_BETA_EN[] PROGMEM = "You are using firmware beta version. This is development version. Using this version is not recommended and may cause printer damage.";
+const char MSG_FW_VERSION_BETA_CZ[] PROGMEM = "Pouzivate beta verzi firmwaru. Jedna se o vyvojovou verzi. Pouzivani teto verze firmware neni doporuceno a muze zpusobit poskozeni tiskarny.";
+const char * const MSG_FW_VERSION_BETA_LANG_TABLE[LANG_NUM] PROGMEM = {
+	MSG_FW_VERSION_BETA_EN,
+	MSG_FW_VERSION_BETA_CZ
+};
+
+const char MSG_FW_VERSION_RC_EN[] PROGMEM = "This firmware version is release candidate. Some of the features may not work properly.";
+const char MSG_FW_VERSION_RC_CZ[] PROGMEM = "Tato verze firmware je release candidate. Nektere z funkci nemusi pracovat spolehlive.";
+const char * const MSG_FW_VERSION_RC_LANG_TABLE[LANG_NUM] PROGMEM = {
+	MSG_FW_VERSION_RC_EN,
+	MSG_FW_VERSION_RC_CZ
+};
+
+const char MSG_FW_VERSION_UNKNOWN_EN[] PROGMEM = "WARNING: Unknown firmware version";
+const char MSG_FW_VERSION_UNKNOWN_CZ[] PROGMEM = "VAROVANI: Neznama verze firmware";
+const char * const MSG_FW_VERSION_UNKNOWN_LANG_TABLE[LANG_NUM] PROGMEM = {
+	MSG_FW_VERSION_UNKNOWN_EN,
+	MSG_FW_VERSION_UNKNOWN_CZ
+};
+
 const char MSG_HEATING_EN[] PROGMEM = "Heating";
 const char MSG_HEATING_CZ[] PROGMEM = "Zahrivani";
 const char * const MSG_HEATING_LANG_TABLE[LANG_NUM] PROGMEM = {
diff --git a/Firmware/language_all.h b/Firmware/language_all.h
index d9577ca2..e4d23036 100644
--- a/Firmware/language_all.h
+++ b/Firmware/language_all.h
@@ -282,6 +282,14 @@ extern const char* const MSG_FSENS_AUTOLOAD_ON_LANG_TABLE[LANG_NUM];
 #define MSG_FSENS_AUTOLOAD_ON LANG_TABLE_SELECT(MSG_FSENS_AUTOLOAD_ON_LANG_TABLE)
 extern const char* const MSG_FSENS_NOT_RESPONDING_LANG_TABLE[LANG_NUM];
 #define MSG_FSENS_NOT_RESPONDING LANG_TABLE_SELECT(MSG_FSENS_NOT_RESPONDING_LANG_TABLE)
+extern const char* const MSG_FW_VERSION_ALPHA_LANG_TABLE[LANG_NUM];
+#define MSG_FW_VERSION_ALPHA LANG_TABLE_SELECT(MSG_FW_VERSION_ALPHA_LANG_TABLE)
+extern const char* const MSG_FW_VERSION_BETA_LANG_TABLE[LANG_NUM];
+#define MSG_FW_VERSION_BETA LANG_TABLE_SELECT(MSG_FW_VERSION_BETA_LANG_TABLE)
+extern const char* const MSG_FW_VERSION_RC_LANG_TABLE[LANG_NUM];
+#define MSG_FW_VERSION_RC LANG_TABLE_SELECT(MSG_FW_VERSION_RC_LANG_TABLE)
+extern const char* const MSG_FW_VERSION_UNKNOWN_LANG_TABLE[LANG_NUM];
+#define MSG_FW_VERSION_UNKNOWN LANG_TABLE_SELECT(MSG_FW_VERSION_UNKNOWN_LANG_TABLE)
 extern const char* const MSG_HEATING_LANG_TABLE[LANG_NUM];
 #define MSG_HEATING LANG_TABLE_SELECT(MSG_HEATING_LANG_TABLE)
 extern const char* const MSG_HEATING_COMPLETE_LANG_TABLE[LANG_NUM];
diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h
index 15eee1dc..c9b630eb 100644
--- a/Firmware/language_cz.h
+++ b/Firmware/language_cz.h
@@ -397,3 +397,8 @@ ve
 
 #define(length=20, lines=4) MSG_FSENS_NOT_RESPONDING     "CHYBA: Filament senzor nereaguje, zkontrolujte zapojeni."
 
+#define(length=20, lines=8) MSG_FW_VERSION_UNKNOWN		 "VAROVANI: Neznama verze firmware"
+#define(length=20, lines=8) MSG_FW_VERSION_ALPHA		 "Pouzivate alpha verzi firmwaru. Jedna se o vyvojovou verzi. Pouzivani teto verze firmware neni doporuceno a muze zpusobit poskozeni tiskarny." 
+#define(length=20, lines=8) MSG_FW_VERSION_BETA			 "Pouzivate beta verzi firmwaru. Jedna se o vyvojovou verzi. Pouzivani teto verze firmware neni doporuceno a muze zpusobit poskozeni tiskarny."
+#define(length=20, lines=8) MSG_FW_VERSION_RC			 "Tato verze firmware je release candidate. Nektere z funkci nemusi pracovat spolehlive."
+
diff --git a/Firmware/language_en.h b/Firmware/language_en.h
index 2a17a710..9cc91a00 100644
--- a/Firmware/language_en.h
+++ b/Firmware/language_en.h
@@ -402,3 +402,7 @@
 #define(length=20, lines=4) MSG_AUTOLOADING_ONLY_IF_FSENS_ON     "Autoloading filament available only when filament sensor is turned on..."
 
 #define(length=20, lines=4) MSG_FSENS_NOT_RESPONDING     "ERROR: Filament sensor is not responding, please check connection."
+#define(length=20, lines=8) MSG_FW_VERSION_UNKNOWN		 "WARNING: Unknown firmware version"
+#define(length=20, lines=8) MSG_FW_VERSION_ALPHA		 "You are using firmware alpha version. This is development version. Using this version is not recommended and may cause printer damage." 
+#define(length=20, lines=8) MSG_FW_VERSION_BETA			 "You are using firmware beta version. This is development version. Using this version is not recommended and may cause printer damage."
+#define(length=20, lines=8) MSG_FW_VERSION_RC			 "This firmware version is release candidate. Some of the features may not work properly."
diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp
index 6943c416..d45b8878 100644
--- a/Firmware/ultralcd.cpp
+++ b/Firmware/ultralcd.cpp
@@ -1665,7 +1665,7 @@ static void lcd_support_menu()
   MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
 
   MENU_ITEM(back, PSTR("Firmware:"), lcd_main_menu);
-  MENU_ITEM(back, PSTR(" " FW_version_build), lcd_main_menu);
+  MENU_ITEM(back, PSTR(" " FW_VERSION_FULL), lcd_main_menu);
   // Ideally this block would be optimized out by the compiler.
 /*  const uint8_t fw_string_len = strlen_P(FW_VERSION_STR_P());
   if (fw_string_len < 6) {
@@ -3133,7 +3133,7 @@ static void prusa_stat_printinfo()
 		SERIAL_ECHO(0);
 	}
 	SERIAL_ECHO("][FWR:");
-	SERIAL_ECHO(FW_version);
+	SERIAL_ECHO(FW_VERSION);
 	SERIAL_ECHO("]");
 }
 
diff --git a/Firmware/util.cpp b/Firmware/util.cpp
index 8c575ca8..ea439bd2 100644
--- a/Firmware/util.cpp
+++ b/Firmware/util.cpp
@@ -5,7 +5,7 @@
 #include "util.h"
 
 // Allocate the version string in the program memory. Otherwise the string lands either on the stack or in the global RAM.
-const char FW_VERSION_STR[] PROGMEM = FW_version;
+const char FW_VERSION_STR[] PROGMEM = FW_VERSION;
 
 const char* FW_VERSION_STR_P()
 {