浏览代码

Merge branch 'MK3' into MK3-Gcode_documentation

Merge with MK3 branch
3d-gussner 5 年之前
父节点
当前提交
5eaf6f0133

+ 3 - 0
Firmware/Marlin_main.cpp

@@ -7747,6 +7747,7 @@ Sigma_Exit:
     case 603: {
     case 603: {
 		lcd_print_stop();
 		lcd_print_stop();
 	}
 	}
+	break;
 
 
 #ifdef PINDA_THERMISTOR
 #ifdef PINDA_THERMISTOR
     /*!
     /*!
@@ -9450,6 +9451,8 @@ void delay_keep_alive(unsigned int ms)
 }
 }
 
 
 static void wait_for_heater(long codenum, uint8_t extruder) {
 static void wait_for_heater(long codenum, uint8_t extruder) {
+    if (!degTargetHotend(extruder))
+        return;
 
 
 #ifdef TEMP_RESIDENCY_TIME
 #ifdef TEMP_RESIDENCY_TIME
 	long residencyStart;
 	long residencyStart;

+ 3 - 2
Firmware/adc.c

@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <stdio.h>
 #include <avr/io.h>
 #include <avr/io.h>
 #include <avr/pgmspace.h>
 #include <avr/pgmspace.h>
+#include "pins.h"
 
 
 uint8_t adc_state;
 uint8_t adc_state;
 uint8_t adc_count;
 uint8_t adc_count;
@@ -24,8 +25,8 @@ void adc_init(void)
 	ADMUX |= (1 << REFS0);
 	ADMUX |= (1 << REFS0);
 	ADCSRA |= (1 << ADEN);
 	ADCSRA |= (1 << ADEN);
 //	ADCSRA |= (1 << ADIF) | (1 << ADSC);
 //	ADCSRA |= (1 << ADIF) | (1 << ADSC);
-	DIDR0 = (ADC_CHAN_MSK & 0xff);
-	DIDR2 = (ADC_CHAN_MSK >> 8);
+	DIDR0 = ((ADC_CHAN_MSK & ADC_DIDR_MSK) & 0xff);
+	DIDR2 = ((ADC_CHAN_MSK & ADC_DIDR_MSK) >> 8);
 	adc_reset();
 	adc_reset();
 //	adc_sim_mask = 0b0101;
 //	adc_sim_mask = 0b0101;
 //	adc_sim_mask = 0b100101;
 //	adc_sim_mask = 0b100101;

+ 13 - 4
Firmware/config.h

@@ -2,9 +2,21 @@
 #define _CONFIG_H
 #define _CONFIG_H
 
 
 
 
+#include "Configuration_prusa.h"
+#include "pins.h"
+
+#define IR_SENSOR_ANALOG (defined(VOLT_IR_PIN) && defined(IR_SENSOR))
+
 //ADC configuration
 //ADC configuration
+#if !IR_SENSOR_ANALOG
 #define ADC_CHAN_MSK      0b0000001001011111 //used AD channels bit mask (0,1,2,3,4,6,9)
 #define ADC_CHAN_MSK      0b0000001001011111 //used AD channels bit mask (0,1,2,3,4,6,9)
+#define ADC_DIDR_MSK      0b0000001001011111 //AD channels DIDR mask (1 ~ disabled digital input)
 #define ADC_CHAN_CNT      7         //number of used channels)
 #define ADC_CHAN_CNT      7         //number of used channels)
+#else //!IR_SENSOR_ANALOG
+#define ADC_CHAN_MSK      0b0000001101011111 //used AD channels bit mask (0,1,2,3,4,6,8,9)
+#define ADC_DIDR_MSK      0b0000001001011111 //AD channels DIDR mask (1 ~ disabled digital input)
+#define ADC_CHAN_CNT      8         //number of used channels)
+#endif //!IR_SENSOR_ANALOG
 #define ADC_OVRSAMPL      16        //oversampling multiplier
 #define ADC_OVRSAMPL      16        //oversampling multiplier
 #define ADC_CALLBACK      adc_ready //callback function ()
 #define ADC_CALLBACK      adc_ready //callback function ()
 
 
@@ -42,11 +54,8 @@
 #define W25X20CL_SPCR          SPI_SPCR(W25X20CL_SPI_RATE, 1, 1, 1, 0)
 #define W25X20CL_SPCR          SPI_SPCR(W25X20CL_SPI_RATE, 1, 1, 1, 0)
 #define W25X20CL_SPSR          SPI_SPSR(W25X20CL_SPI_RATE)
 #define W25X20CL_SPSR          SPI_SPSR(W25X20CL_SPI_RATE)
 
 
-#include "boards.h"
-#include "Configuration_prusa.h"
-
 //LANG - Multi-language support
 //LANG - Multi-language support
-//#define LANG_MODE              0 // primary language only
+//define LANG_MODE              0 // primary language only
 #define LANG_MODE              1 // sec. language support
 #define LANG_MODE              1 // sec. language support
 
 
 #define LANG_SIZE_RESERVED     0x3000 // reserved space for secondary language (12288 bytes)
 #define LANG_SIZE_RESERVED     0x3000 // reserved space for secondary language (12288 bytes)

+ 3 - 0
Firmware/eeprom.h

@@ -201,6 +201,9 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
 #define EEPROM_SHEETS_BASE (EEPROM_CHECK_GCODE - EEPROM_SHEETS_SIZEOF) // Sheets
 #define EEPROM_SHEETS_BASE (EEPROM_CHECK_GCODE - EEPROM_SHEETS_SIZEOF) // Sheets
 static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
 static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
 
 
+#define EEPROM_FSENSOR_PCB (EEPROM_SHEETS_BASE-1) // uint8
+#define EEPROM_FSENSOR_ACTION_NA (EEPROM_FSENSOR_PCB-1) // uint8
+
 
 
 //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
 //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
 #define EEPROM_LAST_ITEM EEPROM_SHEETS_BASE
 #define EEPROM_LAST_ITEM EEPROM_SHEETS_BASE

+ 120 - 18
Firmware/fsensor.cpp

@@ -15,6 +15,10 @@
 #include "mmu.h"
 #include "mmu.h"
 #include "cardreader.h"
 #include "cardreader.h"
 
 
+#include "adc.h"
+#include "temperature.h"
+#include "config.h"
+
 //! @name Basic parameters
 //! @name Basic parameters
 //! @{
 //! @{
 #define FSENSOR_CHUNK_LEN    0.64F  //!< filament sensor chunk length 0.64mm
 #define FSENSOR_CHUNK_LEN    0.64F  //!< filament sensor chunk length 0.64mm
@@ -117,6 +121,13 @@ int16_t fsensor_oq_yd_max;
 uint16_t fsensor_oq_sh_sum;
 uint16_t fsensor_oq_sh_sum;
 //! @}
 //! @}
 
 
+#if IR_SENSOR_ANALOG
+ClFsensorPCB oFsensorPCB;
+ClFsensorActionNA oFsensorActionNA;
+bool bIRsensorStateFlag=false;
+unsigned long nIRsensorLastTime;
+#endif //IR_SENSOR_ANALOG
+
 void fsensor_stop_and_save_print(void)
 void fsensor_stop_and_save_print(void)
 {
 {
     printf_P(PSTR("fsensor_stop_and_save_print\n"));
     printf_P(PSTR("fsensor_stop_and_save_print\n"));
@@ -136,10 +147,11 @@ void fsensor_init(void)
 {
 {
 #ifdef PAT9125
 #ifdef PAT9125
 	uint8_t pat9125 = pat9125_init();
 	uint8_t pat9125 = pat9125_init();
-    printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
+     printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
 #endif //PAT9125
 #endif //PAT9125
 	uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR);
 	uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR);
 	fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED);
 	fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED);
+     fsensor_not_responding = false;
 #ifdef PAT9125
 #ifdef PAT9125
 	uint8_t oq_meassure_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENS_OQ_MEASS_ENABLED);
 	uint8_t oq_meassure_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENS_OQ_MEASS_ENABLED);
 	fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false;
 	fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false;
@@ -150,19 +162,27 @@ void fsensor_init(void)
 		fsensor = 0; //disable sensor
 		fsensor = 0; //disable sensor
 		fsensor_not_responding = true;
 		fsensor_not_responding = true;
 	}
 	}
-	else
-		fsensor_not_responding = false;
 #endif //PAT9125
 #endif //PAT9125
+#if IR_SENSOR_ANALOG
+     bIRsensorStateFlag=false;
+     oFsensorPCB=(ClFsensorPCB)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_PCB);
+     oFsensorActionNA=(ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA);
+#endif //IR_SENSOR_ANALOG
 	if (fsensor)
 	if (fsensor)
-		fsensor_enable();
+		fsensor_enable(false);                  // (in this case) EEPROM update is not necessary
 	else
 	else
-		fsensor_disable();
-	printf_P(PSTR("FSensor %S\n"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED\n")));
+		fsensor_disable(false);                 // (in this case) EEPROM update is not necessary
+	printf_P(PSTR("FSensor %S"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED")));
+#if IR_SENSOR_ANALOG
+     printf_P(PSTR(" (sensor board revision: %S)\n"),(oFsensorPCB==ClFsensorPCB::_Rev03b)?PSTR("03b or newer"):PSTR("03 or older"));
+#else //IR_SENSOR_ANALOG
+     printf_P(PSTR("\n"));
+#endif //IR_SENSOR_ANALOG
 	if (check_for_ir_sensor()) ir_sensor_detected = true;
 	if (check_for_ir_sensor()) ir_sensor_detected = true;
 
 
 }
 }
 
 
-bool fsensor_enable(void)
+bool fsensor_enable(bool bUpdateEEPROM)
 {
 {
 #ifdef PAT9125
 #ifdef PAT9125
 	if (mmu_enabled == false) { //filament sensor is pat9125, enable only if it is working
 	if (mmu_enabled == false) { //filament sensor is pat9125, enable only if it is working
@@ -187,18 +207,34 @@ bool fsensor_enable(void)
 		FSensorStateMenu = 1;
 		FSensorStateMenu = 1;
 	}
 	}
 #else // PAT9125
 #else // PAT9125
-	fsensor_enabled = true;
-	eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x01);
-	FSensorStateMenu = 1;
-#endif // PAT9125
+#if IR_SENSOR_ANALOG
+     if(!fsensor_IR_check())
+          {
+          bUpdateEEPROM=true;
+          fsensor_enabled=false;
+          fsensor_not_responding=true;
+          FSensorStateMenu=0;
+          }
+     else {
+#endif //IR_SENSOR_ANALOG
+     fsensor_enabled=true;
+     fsensor_not_responding=false;
+     FSensorStateMenu=1;
+#if IR_SENSOR_ANALOG
+          }
+#endif //IR_SENSOR_ANALOG
+     if(bUpdateEEPROM)
+          eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, FSensorStateMenu);
+#endif //PAT9125
 	return fsensor_enabled;
 	return fsensor_enabled;
 }
 }
 
 
-void fsensor_disable(void)
-{
+void fsensor_disable(bool bUpdateEEPROM)
+{ 
 	fsensor_enabled = false;
 	fsensor_enabled = false;
-	eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x00); 
 	FSensorStateMenu = 0;
 	FSensorStateMenu = 0;
+     if(bUpdateEEPROM)
+          eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x00); 
 }
 }
 
 
 void fsensor_autoload_set(bool State)
 void fsensor_autoload_set(bool State)
@@ -589,10 +625,76 @@ void fsensor_update(void)
 			fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp;
 			fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp;
 		}
 		}
 #else //PAT9125
 #else //PAT9125
-		if ((digitalRead(IR_SENSOR_PIN) == 1) && CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected && ( ! fsensor_m600_enqueued) )
-		{
-			fsensor_stop_and_save_print();
-			fsensor_enque_M600();
+		if (CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected && ( ! fsensor_m600_enqueued) )
+          {
+               if(digitalRead(IR_SENSOR_PIN))
+               {                                  // IR_SENSOR_PIN ~ H
+#if IR_SENSOR_ANALOG
+                    if(!bIRsensorStateFlag)
+                    {
+                         bIRsensorStateFlag=true;
+                         nIRsensorLastTime=_millis();
+                    }
+                    else
+                    {
+                         if((_millis()-nIRsensorLastTime)>IR_SENSOR_STEADY)
+                         {
+                              uint8_t nMUX1,nMUX2;
+                              uint16_t nADC;
+                              bIRsensorStateFlag=false;
+                              // sequence for direct data reading from AD converter
+                              DISABLE_TEMPERATURE_INTERRUPT();
+                              nMUX1=ADMUX;        // ADMUX saving
+                              nMUX2=ADCSRB;
+                              adc_setmux(VOLT_IR_PIN);
+                              ADCSRA|=(1<<ADSC);  // first conversion after ADMUX change discarded (preventively)
+                              while(ADCSRA&(1<<ADSC))
+                                   ;
+                              ADCSRA|=(1<<ADSC);  // second conversion used
+                              while(ADCSRA&(1<<ADSC))
+                                   ;
+                              nADC=ADC;
+                              ADMUX=nMUX1;        // ADMUX restoring
+                              ADCSRB=nMUX2;
+                              ENABLE_TEMPERATURE_INTERRUPT();
+                              // end of sequence for ...
+                              if((oFsensorPCB==ClFsensorPCB::_Rev03b)&&((nADC*OVERSAMPLENR)>((int)IRsensor_Hopen_TRESHOLD)))
+                              {
+                                   fsensor_disable();
+                                   fsensor_not_responding = true;
+                                   printf_P(PSTR("IR sensor not responding (%d)!\n"),1);
+                                   if((ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA)==ClFsensorActionNA::_Pause)
+                                   if(oFsensorActionNA==ClFsensorActionNA::_Pause)
+                                        lcd_pause_print();
+                              }
+                              else
+                              {
+#endif //IR_SENSOR_ANALOG
+                                   fsensor_stop_and_save_print();
+                                   fsensor_enque_M600();
+#if IR_SENSOR_ANALOG
+                              }
+                         }
+                    }
+               }
+               else
+               {                                  // IR_SENSOR_PIN ~ L
+                    bIRsensorStateFlag=false;
+#endif //IR_SENSOR_ANALOG
+               }
 		}
 		}
 #endif //PAT9125
 #endif //PAT9125
 }
 }
+
+#if IR_SENSOR_ANALOG
+bool fsensor_IR_check()
+{
+uint16_t volt_IR_int;
+bool bCheckResult;
+
+volt_IR_int=current_voltage_raw_IR;
+bCheckResult=(volt_IR_int<((int)IRsensor_Lmax_TRESHOLD))||(volt_IR_int>((int)IRsensor_Hmin_TRESHOLD));
+bCheckResult=bCheckResult&&(!((oFsensorPCB==ClFsensorPCB::_Rev03b)&&(volt_IR_int>((int)IRsensor_Hopen_TRESHOLD))));
+return(bCheckResult);
+}
+#endif //IR_SENSOR_ANALOG

+ 27 - 2
Firmware/fsensor.h

@@ -3,6 +3,7 @@
 #define FSENSOR_H
 #define FSENSOR_H
 
 
 #include <inttypes.h>
 #include <inttypes.h>
+#include "config.h"
 
 
 
 
 //! minimum meassured chunk length in steps
 //! minimum meassured chunk length in steps
@@ -27,8 +28,8 @@ extern void fsensor_init(void);
 
 
 //! @name enable/disable
 //! @name enable/disable
 //! @{
 //! @{
-extern bool fsensor_enable(void);
-extern void fsensor_disable(void);
+extern bool fsensor_enable(bool bUpdateEEPROM=true);
+extern void fsensor_disable(bool bUpdateEEPROM=true);
 //! @}
 //! @}
 
 
 //autoload feature enabled
 //autoload feature enabled
@@ -65,4 +66,28 @@ extern void fsensor_st_block_begin(block_t* bl);
 extern void fsensor_st_block_chunk(block_t* bl, int cnt);
 extern void fsensor_st_block_chunk(block_t* bl, int cnt);
 //! @}
 //! @}
 
 
+
+#if IR_SENSOR_ANALOG
+#define IR_SENSOR_STEADY 10                       // [ms]
+
+enum class ClFsensorPCB:uint_least8_t
+{
+    _Old=0,
+    _Rev03b=1,
+    _Undef=EEPROM_EMPTY_VALUE
+};
+
+enum class ClFsensorActionNA:uint_least8_t
+{
+    _Continue=0,
+    _Pause=1,
+    _Undef=EEPROM_EMPTY_VALUE
+};
+
+extern ClFsensorPCB oFsensorPCB;
+extern ClFsensorActionNA oFsensorActionNA;
+
+extern bool fsensor_IR_check();
+#endif //IR_SENSOR_ANALOG
+
 #endif //FSENSOR_H
 #endif //FSENSOR_H

+ 46 - 8
Firmware/menu.cpp

@@ -184,6 +184,22 @@ static void menu_draw_item_puts_P(char type_char, const char* str)
     lcd_printf_P(PSTR("%c%-18.18S%c"), menu_selection_mark(), str, type_char);
     lcd_printf_P(PSTR("%c%-18.18S%c"), menu_selection_mark(), str, type_char);
 }
 }
 
 
+static void menu_draw_toggle_puts_P(const char* str, const char* toggle, const uint8_t settings)
+{
+    //settings:
+    //xxxxxcba
+    //a = selection mark. If it's set(1), then '>' will be used as the first character on the line. Else leave blank
+    //b = toggle string is from progmem
+    //c = do not set cursor at all. Must be handled externally.
+    char lineStr[LCD_WIDTH + 1];
+    const char eol = (toggle == NULL)?LCD_STR_ARROW_RIGHT[0]:' ';
+    if (toggle == NULL) toggle = _T(MSG_NA);
+    sprintf_P(lineStr, PSTR("%c%-18.18S"), (settings & 0x01)?'>':' ', str);
+    sprintf_P(lineStr + LCD_WIDTH - ((settings & 0x02)?strlen_P(toggle):strlen(toggle)) - 3, (settings & 0x02)?PSTR("[%S]%c"):PSTR("[%s]%c"), toggle, eol);
+    if (!(settings & 0x04)) lcd_set_cursor(0, menu_row);
+    fputs(lineStr, lcdout);
+}
+
 //! @brief Format sheet name
 //! @brief Format sheet name
 //!
 //!
 //! @param[in] sheet_E Sheet in EEPROM
 //! @param[in] sheet_E Sheet in EEPROM
@@ -375,6 +391,33 @@ uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t)
     return 0;
     return 0;
 }
 }
 
 
+uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings)
+{
+	if (menu_item == menu_line)
+	{
+		if (lcd_draw_update) menu_draw_toggle_puts_P(str, toggle, settings | (menu_selection_mark()=='>'));
+		if (menu_clicked && (lcd_encoder == menu_item))
+		{
+			if (toggle == NULL) // print N/A warning message
+			{
+				menu_submenu(func);
+				return menu_item_ret();
+			}
+			else // do the actual toggling
+			{
+				menu_clicked = false;
+				lcd_consume_click();
+				lcd_update_enabled = 0;
+				if (func) func();
+				lcd_update_enabled = 1;
+				return menu_item_ret();
+			}
+		}
+	}
+	menu_item++;
+	return 0;
+}
+
 uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
 uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
 {
 {
 	if (menu_item == menu_line)
 	if (menu_item == menu_line)
@@ -390,17 +433,12 @@ uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
 	return 0;
 	return 0;
 }
 }
 
 
-
-const char menu_20x_space[] PROGMEM = "                    ";
-
 const char menu_fmt_int3[] PROGMEM = "%c%.15S:%s%3d";
 const char menu_fmt_int3[] PROGMEM = "%c%.15S:%s%3d";
 
 
 const char menu_fmt_float31[] PROGMEM = "%-12.12S%+8.1f";
 const char menu_fmt_float31[] PROGMEM = "%-12.12S%+8.1f";
 
 
 const char menu_fmt_float13[] PROGMEM = "%c%-13.13S%+5.3f";
 const char menu_fmt_float13[] PROGMEM = "%c%-13.13S%+5.3f";
 
 
-const char menu_fmt_float13off[] PROGMEM = "%c%-13.13S%6.6S";
-
 template<typename T>
 template<typename T>
 static void menu_draw_P(char chr, const char* str, int16_t val);
 static void menu_draw_P(char chr, const char* str, int16_t val);
 
 
@@ -409,8 +447,8 @@ void menu_draw_P<int16_t*>(char chr, const char* str, int16_t val)
 {
 {
 	int text_len = strlen_P(str);
 	int text_len = strlen_P(str);
 	if (text_len > 15) text_len = 15;
 	if (text_len > 15) text_len = 15;
-	char spaces[21];
-	strcpy_P(spaces, menu_20x_space);
+	char spaces[LCD_WIDTH + 1] = {0};
+    memset(spaces,' ', LCD_WIDTH);
 	if (val <= -100) spaces[15 - text_len - 1] = 0;
 	if (val <= -100) spaces[15 - text_len - 1] = 0;
 	else spaces[15 - text_len] = 0;
 	else spaces[15 - text_len] = 0;
 	lcd_printf_P(menu_fmt_int3, chr, str, spaces, val);
 	lcd_printf_P(menu_fmt_int3, chr, str, spaces, val);
@@ -423,7 +461,7 @@ void menu_draw_P<uint8_t*>(char chr, const char* str, int16_t val)
     float factor = 1.0f + static_cast<float>(val) / 1000.0f;
     float factor = 1.0f + static_cast<float>(val) / 1000.0f;
     if (val <= _md->minEditValue)
     if (val <= _md->minEditValue)
     {
     {
-        lcd_printf_P(menu_fmt_float13off, chr, str, _i(" [off]"));
+        menu_draw_toggle_puts_P(str, _T(MSG_OFF), 0x04 | 0x02 | (chr=='>'));
     }
     }
     else
     else
     {
     {

+ 4 - 0
Firmware/menu.h

@@ -118,6 +118,10 @@ extern uint8_t menu_item_function_P(const char* str, menu_func_t func);
 #define MENU_ITEM_FUNCTION_NR_P(str, number, func, fn_par) do { if (menu_item_function_P(str, number, func, fn_par)) return; } while (0)
 #define MENU_ITEM_FUNCTION_NR_P(str, number, func, fn_par) do { if (menu_item_function_P(str, number, func, fn_par)) return; } while (0)
 extern uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t), uint8_t fn_par);
 extern uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t), uint8_t fn_par);
 
 
+#define MENU_ITEM_TOGGLE_P(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, 0x02)) return; } while (0)
+#define MENU_ITEM_TOGGLE(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, 0x00)) return; } while (0)
+extern uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings);
+
 #define MENU_ITEM_GCODE_P(str, str_gcode) do { if (menu_item_gcode_P(str, str_gcode)) return; } while (0)
 #define MENU_ITEM_GCODE_P(str, str_gcode) do { if (menu_item_gcode_P(str, str_gcode)) return; } while (0)
 extern uint8_t menu_item_gcode_P(const char* str, const char* str_gcode);
 extern uint8_t menu_item_gcode_P(const char* str, const char* str_gcode);
 
 

+ 40 - 14
Firmware/messages.c

@@ -9,7 +9,6 @@
 
 
 //internationalized messages
 //internationalized messages
 const char MSG_AUTO_HOME[] PROGMEM_I1 = ISTR("Auto home"); ////
 const char MSG_AUTO_HOME[] PROGMEM_I1 = ISTR("Auto home"); ////
-const char MSG_AUTO_MODE_ON[] PROGMEM_I1 = ISTR("Mode [auto power]"); ////
 const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); //// c=18
 const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); //// c=18
 const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."); ////c=20 r=12
 const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."); ////c=20 r=12
 const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); ////
 const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); ////
@@ -22,9 +21,7 @@ const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); ////
 const char MSG_CONFIRM_NOZZLE_CLEAN[] PROGMEM_I1 = ISTR("Please clean the nozzle for calibration. Click when done."); ////c=20 r=8
 const char MSG_CONFIRM_NOZZLE_CLEAN[] PROGMEM_I1 = ISTR("Please clean the nozzle for calibration. Click when done."); ////c=20 r=8
 const char MSG_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////
 const char MSG_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////
 const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1
 const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1
-const char MSG_CRASHDETECT_NA[] PROGMEM_I1 = ISTR("Crash det.  [N/A]"); ////
-const char MSG_CRASHDETECT_OFF[] PROGMEM_I1 = ISTR("Crash det.  [off]"); ////
-const char MSG_CRASHDETECT_ON[] PROGMEM_I1 = ISTR("Crash det.   [on]"); ////
+const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////
 const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////
 const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////
 const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1
 const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1
 const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1
 const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1
@@ -40,9 +37,8 @@ const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[] PROGMEM_I1 = ISTR(" of 4"); ////
 const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20 r=1
 const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20 r=1
 const char MSG_FOLLOW_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
 const char MSG_FOLLOW_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
 const char MSG_FOLLOW_Z_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
 const char MSG_FOLLOW_Z_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
-const char MSG_FSENS_AUTOLOAD_NA[] PROGMEM_I1 = ISTR("F. autoload [N/A]"); ////c=17 r=1
-const char MSG_FSENSOR_OFF[] PROGMEM_I1 = ISTR("Fil. sensor [off]"); ////
-const char MSG_FSENSOR_ON[] PROGMEM_I1 = ISTR("Fil. sensor  [on]"); ////
+const char MSG_FSENSOR_AUTOLOAD[] PROGMEM_I1 = ISTR("F. autoload"); ////c=17 r=1
+const char MSG_FSENSOR[] PROGMEM_I1 = ISTR("Fil. sensor"); ////
 const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); ////
 const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); ////
 const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20
 const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20
 const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); ////
 const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); ////
@@ -85,14 +81,16 @@ const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor");
 const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////
 const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////
 const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////
 const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////
 const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); ////
 const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); ////
-const char MSG_SILENT_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [high power]"); ////
-const char MSG_SILENT_MODE_ON[] PROGMEM_I1 = ISTR("Mode     [silent]"); ////
-const char MSG_STEALTH_MODE_OFF[] PROGMEM_I1 = ISTR("Mode     [Normal]"); ////
-const char MSG_STEALTH_MODE_ON[] PROGMEM_I1 = ISTR("Mode    [Stealth]"); ////
+const char MSG_MODE[] PROGMEM_I1 = ISTR("Mode"); ////
+const char MSG_HIGH_POWER[] PROGMEM_I1 = ISTR("High power"); ////
+const char MSG_AUTO_POWER[] PROGMEM_I1 = ISTR("Auto power"); ////
+const char MSG_SILENT[] PROGMEM_I1 = ISTR("Silent"); ////
+const char MSG_NORMAL[] PROGMEM_I1 = ISTR("Normal"); ////
+const char MSG_STEALTH[] PROGMEM_I1 = ISTR("Stealth"); ////
 const char MSG_STEEL_SHEET_CHECK[] PROGMEM_I1 = ISTR("Is steel sheet on heatbed?"); ////c=20 r=2
 const char MSG_STEEL_SHEET_CHECK[] PROGMEM_I1 = ISTR("Is steel sheet on heatbed?"); ////c=20 r=2
 const char MSG_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////
 const char MSG_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////
 const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED. "); ////
 const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED. "); ////
-const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal.          "); ////c=20 r=1
+const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal."); ////c=12 r=1
 const char MSG_TEMP_CALIBRATION_DONE[] PROGMEM_I1 = ISTR("Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."); ////c=20 r=12
 const char MSG_TEMP_CALIBRATION_DONE[] PROGMEM_I1 = ISTR("Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."); ////c=20 r=12
 const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////c=17
 const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////c=17
 const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20 r=1
 const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20 r=1
@@ -104,13 +102,41 @@ const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard
 const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); ////
 const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); ////
 const char MSG_V2_CALIBRATION[] PROGMEM_I1 = ISTR("First layer cal."); ////c=17 r=1
 const char MSG_V2_CALIBRATION[] PROGMEM_I1 = ISTR("First layer cal."); ////c=17 r=1
 const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " OK."); ////c=20
 const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " OK."); ////c=20
+const char MSG_OFF[] PROGMEM_I1 = ISTR("Off"); ////
+const char MSG_ON[] PROGMEM_I1 = ISTR("On"); ////
+const char MSG_NA[] PROGMEM_I1 = ISTR("N/A"); ////
+const char MSG_AUTO_DEPLETE[] PROGMEM_I1 = ISTR("SpoolJoin"); ////
+const char MSG_CUTTER[] PROGMEM_I1 = ISTR("Cutter"); ////
+const char MSG_NONE[] PROGMEM_I1 = ISTR("None"); ////
+const char MSG_WARN[] PROGMEM_I1 = ISTR("Warn"); ////
+const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); ////
+const char MSG_MODEL[] PROGMEM_I1 = ISTR("Model"); ////
+const char MSG_FIRMWARE[] PROGMEM_I1 = ISTR("Firmware"); ////
+const char MSG_GCODE[] PROGMEM_I1 = ISTR("Gcode"); ////
+const char MSG_NOZZLE_DIAMETER[] PROGMEM_I1 = ISTR("Nozzle d."); ////
+const char MSG_MMU_MODE[] PROGMEM_I1 = ISTR("MMU Mode"); ////
+const char MSG_SD_CARD[] PROGMEM_I1 = ISTR("SD card"); ////
+const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[] PROGMEM_I1 = ISTR("FlashAir"); ////
+const char MSG_SORT[] PROGMEM_I1 = ISTR("Sort"); ////
+const char MSG_SORT_TIME[] PROGMEM_I1 = ISTR("Time"); ////
+const char MSG_SORT_ALPHA[] PROGMEM_I1 = ISTR("Alphabet"); ////
+const char MSG_RPI_PORT[] PROGMEM_I1 = ISTR("RPi port"); ////
+const char MSG_SOUND[] PROGMEM_I1 = ISTR("Sound"); ////
+const char MSG_SOUND_LOUD[] PROGMEM_I1 = ISTR("Loud"); ////
+const char MSG_SOUND_ONCE[] PROGMEM_I1 = ISTR("Once"); ////
+const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); ////
+const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); ////
+const char MSG_Z_PROBE_NR[] PROGMEM_I1 = ISTR("Z-probe nr."); ////
+const char MSG_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); ////
+const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////
+const char MSG_FS_CONTINUE[] PROGMEM_I1 = ISTR("Cont."); ////
+const char MSG_FS_PAUSE[] PROGMEM_I1 = ISTR("Pause"); ////
+
 //not internationalized messages
 //not internationalized messages
 const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////
 const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////
 const char MSG_BROWNOUT_RESET[] PROGMEM_N1 = " Brown out Reset"; ////
 const char MSG_BROWNOUT_RESET[] PROGMEM_N1 = " Brown out Reset"; ////
 const char MSG_EXTERNAL_RESET[] PROGMEM_N1 = " External Reset"; ////
 const char MSG_EXTERNAL_RESET[] PROGMEM_N1 = " External Reset"; ////
 const char MSG_FILE_SAVED[] PROGMEM_N1 = "Done saving file."; ////
 const char MSG_FILE_SAVED[] PROGMEM_N1 = "Done saving file."; ////
-const char MSG_OFF[] PROGMEM_N1 = "Off"; ////
-const char MSG_ON[] PROGMEM_N1 = "On "; ////
 const char MSG_POSITION_UNKNOWN[] PROGMEM_N1 = "Home X/Y before Z"; ////
 const char MSG_POSITION_UNKNOWN[] PROGMEM_N1 = "Home X/Y before Z"; ////
 const char MSG_SOFTWARE_RESET[] PROGMEM_N1 = " Software Reset"; ////
 const char MSG_SOFTWARE_RESET[] PROGMEM_N1 = " Software Reset"; ////
 const char MSG_UNKNOWN_COMMAND[] PROGMEM_N1 = "Unknown command: \""; ////
 const char MSG_UNKNOWN_COMMAND[] PROGMEM_N1 = "Unknown command: \""; ////

+ 39 - 13
Firmware/messages.h

@@ -10,7 +10,6 @@ extern "C" {
 // LCD Menu Messages
 // LCD Menu Messages
 //internationalized messages
 //internationalized messages
 extern const char MSG_AUTO_HOME[];
 extern const char MSG_AUTO_HOME[];
-extern const char MSG_AUTO_MODE_ON[];
 extern const char MSG_BABYSTEP_Z[];
 extern const char MSG_BABYSTEP_Z[];
 extern const char MSG_BABYSTEP_Z_NOT_SET[];
 extern const char MSG_BABYSTEP_Z_NOT_SET[];
 extern const char MSG_BED[];
 extern const char MSG_BED[];
@@ -23,9 +22,7 @@ extern const char MSG_CARD_MENU[];
 extern const char MSG_CONFIRM_NOZZLE_CLEAN[];
 extern const char MSG_CONFIRM_NOZZLE_CLEAN[];
 extern const char MSG_COOLDOWN[];
 extern const char MSG_COOLDOWN[];
 extern const char MSG_CRASH_DETECTED[];
 extern const char MSG_CRASH_DETECTED[];
-extern const char MSG_CRASHDETECT_NA[];
-extern const char MSG_CRASHDETECT_OFF[];
-extern const char MSG_CRASHDETECT_ON[];
+extern const char MSG_CRASHDETECT[];
 extern const char MSG_ERROR[];
 extern const char MSG_ERROR[];
 extern const char MSG_EXTRUDER[];
 extern const char MSG_EXTRUDER[];
 extern const char MSG_FILAMENT[];
 extern const char MSG_FILAMENT[];
@@ -41,9 +38,8 @@ extern const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[];
 extern const char MSG_FINISHING_MOVEMENTS[];
 extern const char MSG_FINISHING_MOVEMENTS[];
 extern const char MSG_FOLLOW_CALIBRATION_FLOW[];
 extern const char MSG_FOLLOW_CALIBRATION_FLOW[];
 extern const char MSG_FOLLOW_Z_CALIBRATION_FLOW[];
 extern const char MSG_FOLLOW_Z_CALIBRATION_FLOW[];
-extern const char MSG_FSENS_AUTOLOAD_NA[];
-extern const char MSG_FSENSOR_OFF[];
-extern const char MSG_FSENSOR_ON[];
+extern const char MSG_FSENSOR_AUTOLOAD[];
+extern const char MSG_FSENSOR[];
 extern const char MSG_HEATING[];
 extern const char MSG_HEATING[];
 extern const char MSG_HEATING_COMPLETE[];
 extern const char MSG_HEATING_COMPLETE[];
 extern const char MSG_HOMEYZ[];
 extern const char MSG_HOMEYZ[];
@@ -85,10 +81,12 @@ extern const char MSG_SELFTEST_FILAMENT_SENSOR[];
 extern const char MSG_SELFTEST_WIRINGERROR[];
 extern const char MSG_SELFTEST_WIRINGERROR[];
 extern const char MSG_SETTINGS[];
 extern const char MSG_SETTINGS[];
 extern const char MSG_HW_SETUP[];
 extern const char MSG_HW_SETUP[];
-extern const char MSG_SILENT_MODE_OFF[];
-extern const char MSG_SILENT_MODE_ON[];
-extern const char MSG_STEALTH_MODE_OFF[];
-extern const char MSG_STEALTH_MODE_ON[];
+extern const char MSG_MODE[];
+extern const char MSG_HIGH_POWER[];
+extern const char MSG_AUTO_POWER[];
+extern const char MSG_SILENT[];
+extern const char MSG_NORMAL[];
+extern const char MSG_STEALTH[];
 extern const char MSG_STEEL_SHEET_CHECK[];
 extern const char MSG_STEEL_SHEET_CHECK[];
 extern const char MSG_STOP_PRINT[];
 extern const char MSG_STOP_PRINT[];
 extern const char MSG_STOPPED[];
 extern const char MSG_STOPPED[];
@@ -104,12 +102,40 @@ extern const char MSG_WIZARD_QUIT[];
 extern const char MSG_YES[];
 extern const char MSG_YES[];
 extern const char MSG_V2_CALIBRATION[];
 extern const char MSG_V2_CALIBRATION[];
 extern const char WELCOME_MSG[];
 extern const char WELCOME_MSG[];
+extern const char MSG_OFF[];
+extern const char MSG_ON[];
+extern const char MSG_NA[];
+extern const char MSG_AUTO_DEPLETE[];
+extern const char MSG_CUTTER[];
+extern const char MSG_NONE[];
+extern const char MSG_WARN[];
+extern const char MSG_STRICT[];
+extern const char MSG_MODEL[];
+extern const char MSG_FIRMWARE[];
+extern const char MSG_GCODE[];
+extern const char MSG_NOZZLE_DIAMETER[];
+extern const char MSG_MMU_MODE[];
+extern const char MSG_SD_CARD[];
+extern const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[];
+extern const char MSG_SORT[];
+extern const char MSG_SORT_TIME[];
+extern const char MSG_SORT_ALPHA[];
+extern const char MSG_RPI_PORT[];
+extern const char MSG_SOUND[];
+extern const char MSG_SOUND_LOUD[];
+extern const char MSG_SOUND_ONCE[];
+extern const char MSG_SOUND_BLIND[];
+extern const char MSG_MESH[];
+extern const char MSG_Z_PROBE_NR[];
+extern const char MSG_MAGNETS_COMP[];
+extern const char MSG_FS_ACTION[];
+extern const char MSG_FS_CONTINUE[];
+extern const char MSG_FS_PAUSE[];
+
 //not internationalized messages
 //not internationalized messages
 extern const char MSG_BROWNOUT_RESET[];
 extern const char MSG_BROWNOUT_RESET[];
 extern const char MSG_EXTERNAL_RESET[];
 extern const char MSG_EXTERNAL_RESET[];
 extern const char MSG_FILE_SAVED[];
 extern const char MSG_FILE_SAVED[];
-extern const char MSG_OFF[];
-extern const char MSG_ON[];
 extern const char MSG_POSITION_UNKNOWN[];
 extern const char MSG_POSITION_UNKNOWN[];
 extern const char MSG_SOFTWARE_RESET[];
 extern const char MSG_SOFTWARE_RESET[];
 extern const char MSG_UNKNOWN_COMMAND[];
 extern const char MSG_UNKNOWN_COMMAND[];

+ 3 - 0
Firmware/mmu.cpp

@@ -70,6 +70,7 @@ uint8_t mmu_extruder = MMU_FILAMENT_UNKNOWN;
 uint8_t tmp_extruder = MMU_FILAMENT_UNKNOWN;
 uint8_t tmp_extruder = MMU_FILAMENT_UNKNOWN;
 
 
 int8_t mmu_finda = -1;
 int8_t mmu_finda = -1;
+uint32_t mmu_last_finda_response = 0;
 
 
 int16_t mmu_version = -1;
 int16_t mmu_version = -1;
 
 
@@ -264,6 +265,7 @@ void mmu_loop(void)
 		if (mmu_rx_ok() > 0)
 		if (mmu_rx_ok() > 0)
 		{
 		{
 			fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
 			fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
+			mmu_last_finda_response = _millis();
 			FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
 			FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
 			puts_P(PSTR("MMU - ENABLED"));
 			puts_P(PSTR("MMU - ENABLED"));
 			mmu_enabled = true;
 			mmu_enabled = true;
@@ -376,6 +378,7 @@ void mmu_loop(void)
 		if (mmu_rx_ok() > 0)
 		if (mmu_rx_ok() > 0)
 		{
 		{
 			fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
 			fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
+			mmu_last_finda_response = _millis();
 			FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
 			FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
 			//printf_P(PSTR("Eact: %d\n"), int(e_active()));
 			//printf_P(PSTR("Eact: %d\n"), int(e_active()));
 			if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) {
 			if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) {

+ 1 - 0
Firmware/mmu.h

@@ -14,6 +14,7 @@ extern uint8_t mmu_extruder;
 extern uint8_t tmp_extruder;
 extern uint8_t tmp_extruder;
 
 
 extern int8_t mmu_finda;
 extern int8_t mmu_finda;
+extern uint32_t mmu_last_finda_response;
 extern bool ir_sensor_detected;
 extern bool ir_sensor_detected;
 
 
 extern int16_t mmu_version;
 extern int16_t mmu_version;

+ 2 - 1
Firmware/pins_Einsy_1_0.h

@@ -71,12 +71,13 @@
 #define HEATER_2_PIN        -1
 #define HEATER_2_PIN        -1
 #define TEMP_2_PIN          -1
 #define TEMP_2_PIN          -1
 
 
-#define TEMP_AMBIENT_PIN     5 //A5
+#define TEMP_AMBIENT_PIN     6 //A6
 
 
 #define TEMP_PINDA_PIN       3 //A3
 #define TEMP_PINDA_PIN       3 //A3
 
 
 #define VOLT_PWR_PIN         4 //A4
 #define VOLT_PWR_PIN         4 //A4
 #define VOLT_BED_PIN         9 //A9
 #define VOLT_BED_PIN         9 //A9
+#define VOLT_IR_PIN          8 //A8
 
 
 
 
 #define E0_TMC2130_CS       66
 #define E0_TMC2130_CS       66

+ 0 - 6
Firmware/sound.h

@@ -3,12 +3,6 @@
 #define SOUND_H
 #define SOUND_H
 
 
 
 
-#define MSG_SOUND_MODE_LOUD   "Sound      [loud]"
-#define MSG_SOUND_MODE_ONCE   "Sound      [once]"
-#define MSG_SOUND_MODE_SILENT "Sound    [silent]"
-#define MSG_SOUND_MODE_BLIND  "Sound    [assist]" 
-
-
 #define e_SOUND_MODE_NULL 0xFF
 #define e_SOUND_MODE_NULL 0xFF
 typedef enum
 typedef enum
      {e_SOUND_MODE_LOUD,e_SOUND_MODE_ONCE,e_SOUND_MODE_SILENT,e_SOUND_MODE_BLIND} eSOUND_MODE;
      {e_SOUND_MODE_LOUD,e_SOUND_MODE_ONCE,e_SOUND_MODE_SILENT,e_SOUND_MODE_BLIND} eSOUND_MODE;

+ 10 - 1
Firmware/temperature.cpp

@@ -44,6 +44,8 @@
 #include "Timer.h"
 #include "Timer.h"
 #include "Configuration_prusa.h"
 #include "Configuration_prusa.h"
 
 
+#include "config.h"
+
 //===========================================================================
 //===========================================================================
 //=============================public variables============================
 //=============================public variables============================
 //===========================================================================
 //===========================================================================
@@ -71,6 +73,10 @@ int current_voltage_raw_pwr = 0;
 int current_voltage_raw_bed = 0;
 int current_voltage_raw_bed = 0;
 #endif
 #endif
 
 
+#if IR_SENSOR_ANALOG
+int current_voltage_raw_IR = 0;
+#endif //IR_SENSOR_ANALOG
+
 int current_temperature_bed_raw = 0;
 int current_temperature_bed_raw = 0;
 float current_temperature_bed = 0.0;
 float current_temperature_bed = 0.0;
   
   
@@ -1576,11 +1582,14 @@ void adc_ready(void) //callback from adc when sampling finished
 	current_voltage_raw_pwr = adc_values[ADC_PIN_IDX(VOLT_PWR_PIN)];
 	current_voltage_raw_pwr = adc_values[ADC_PIN_IDX(VOLT_PWR_PIN)];
 #endif
 #endif
 #ifdef AMBIENT_THERMISTOR
 #ifdef AMBIENT_THERMISTOR
-	current_temperature_raw_ambient = adc_values[ADC_PIN_IDX(TEMP_AMBIENT_PIN)];
+	current_temperature_raw_ambient = adc_values[ADC_PIN_IDX(TEMP_AMBIENT_PIN)]; // 5->6
 #endif //AMBIENT_THERMISTOR
 #endif //AMBIENT_THERMISTOR
 #ifdef VOLT_BED_PIN
 #ifdef VOLT_BED_PIN
 	current_voltage_raw_bed = adc_values[ADC_PIN_IDX(VOLT_BED_PIN)]; // 6->9
 	current_voltage_raw_bed = adc_values[ADC_PIN_IDX(VOLT_BED_PIN)]; // 6->9
 #endif
 #endif
+#if IR_SENSOR_ANALOG
+     current_voltage_raw_IR = adc_values[ADC_PIN_IDX(VOLT_IR_PIN)];
+#endif //IR_SENSOR_ANALOG
 	temp_meas_ready = true;
 	temp_meas_ready = true;
 }
 }
 
 

+ 5 - 0
Firmware/temperature.h

@@ -27,6 +27,8 @@
   #include "stepper.h"
   #include "stepper.h"
 #endif
 #endif
 
 
+#include "config.h"
+
 
 
 #ifdef SYSTEM_TIMER_2
 #ifdef SYSTEM_TIMER_2
 
 
@@ -74,6 +76,9 @@ extern int current_voltage_raw_pwr;
 extern int current_voltage_raw_bed;
 extern int current_voltage_raw_bed;
 #endif
 #endif
 
 
+#if IR_SENSOR_ANALOG
+extern int current_voltage_raw_IR;
+#endif //IR_SENSOR_ANALOG
 
 
 #if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
 #if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
   extern unsigned char soft_pwm_bed;
   extern unsigned char soft_pwm_bed;

+ 330 - 177
Firmware/ultralcd.cpp

@@ -45,6 +45,10 @@
 #include "io_atmega2560.h"
 #include "io_atmega2560.h"
 #include "first_lay_cal.h"
 #include "first_lay_cal.h"
 
 
+#include "fsensor.h"
+#include "adc.h"
+#include "config.h"
+
 
 
 int scrollstuff = 0;
 int scrollstuff = 0;
 char longFilenameOLD[LONG_FILENAME_LENGTH];
 char longFilenameOLD[LONG_FILENAME_LENGTH];
@@ -61,9 +65,6 @@ uint8_t SilentModeMenu_MMU = 1; //activate mmu unit stealth mode
 
 
 int8_t FSensorStateMenu = 1;
 int8_t FSensorStateMenu = 1;
 
 
-extern bool fsensor_enable();
-extern void fsensor_disable();
-
 
 
 #ifdef SDCARD_SORT_ALPHA
 #ifdef SDCARD_SORT_ALPHA
 bool presort_flag = false;
 bool presort_flag = false;
@@ -147,6 +148,10 @@ static void mmu_cut_filament_menu();
 static void lcd_menu_fails_stats();
 static void lcd_menu_fails_stats();
 #endif //TMC2130 or FILAMENT_SENSOR
 #endif //TMC2130 or FILAMENT_SENSOR
 
 
+#ifdef TMC2130
+static void lcd_belttest_v();
+#endif //TMC2130
+
 static void lcd_selftest_v();
 static void lcd_selftest_v();
 
 
 #ifdef TMC2130
 #ifdef TMC2130
@@ -193,6 +198,7 @@ enum class TestError : uint_least8_t
     SwappedFan,
     SwappedFan,
     WiringFsensor,
     WiringFsensor,
     TriggeringFsensor,
     TriggeringFsensor,
+    FsensorLevel
 };
 };
 
 
 static int  lcd_selftest_screen(TestScreen screen, int _progress, int _progress_scale, bool _clear, int _delay);
 static int  lcd_selftest_screen(TestScreen screen, int _progress, int _progress_scale, bool _clear, int _delay);
@@ -224,6 +230,9 @@ static FanCheck lcd_selftest_fan_auto(int _fan);
 static bool lcd_selftest_fsensor();
 static bool lcd_selftest_fsensor();
 #endif //PAT9125
 #endif //PAT9125
 static bool selftest_irsensor();
 static bool selftest_irsensor();
+#if IR_SENSOR_ANALOG
+static bool lcd_selftest_IRsensor();
+#endif //IR_SENSOR_ANALOG
 static void lcd_selftest_error(TestError error, const char *_error_1, const char *_error_2);
 static void lcd_selftest_error(TestError error, const char *_error_1, const char *_error_2);
 static void lcd_colorprint_change();
 static void lcd_colorprint_change();
 #ifdef SNMM
 #ifdef SNMM
@@ -608,11 +617,21 @@ void lcdui_print_feedrate(void)
 // Print percent done in form "USB---%", " SD---%", "   ---%" (7 chars total)
 // Print percent done in form "USB---%", " SD---%", "   ---%" (7 chars total)
 void lcdui_print_percent_done(void)
 void lcdui_print_percent_done(void)
 {
 {
+	char sheet[8];
 	const char* src = is_usb_printing?_N("USB"):(IS_SD_PRINTING?_N(" SD"):_N("   "));
 	const char* src = is_usb_printing?_N("USB"):(IS_SD_PRINTING?_N(" SD"):_N("   "));
 	char per[4];
 	char per[4];
 	bool num = IS_SD_PRINTING || (PRINTER_ACTIVE && (print_percent_done_normal != PRINT_PERCENT_DONE_INIT));
 	bool num = IS_SD_PRINTING || (PRINTER_ACTIVE && (print_percent_done_normal != PRINT_PERCENT_DONE_INIT));
-	sprintf_P(per, num?_N("%3hhd"):_N("---"), calc_percent_done());
-	lcd_printf_P(_N("%3S%3s%%"), src, per);
+	if (!num || heating_status) // either not printing or heating
+	{
+		eeprom_read_block(sheet, EEPROM_Sheets_base->s[eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet))].name, 7);
+		sheet[7] = '\0';
+		lcd_printf_P(PSTR("%s"),sheet);
+	}
+	else
+	{
+		sprintf_P(per, num?_N("%3hhd"):_N("---"), calc_percent_done());
+		lcd_printf_P(_N("%3S%3s%%"), src, per);
+	}
 }
 }
 
 
 // Print extruder status (5 chars total)
 // Print extruder status (5 chars total)
@@ -844,12 +863,13 @@ void lcdui_print_status_line(void)
 			break;
 			break;
 		case CustomMsg::TempCal: // PINDA temp calibration in progress
 		case CustomMsg::TempCal: // PINDA temp calibration in progress
 			{
 			{
+				char statusLine[LCD_WIDTH + 1];
+				sprintf_P(statusLine, PSTR("%-20S"), _T(MSG_TEMP_CALIBRATION));
 				char progress[4];
 				char progress[4];
+				sprintf_P(progress, PSTR("%d/6"), custom_message_state);
+				memcpy(statusLine + 12, progress, sizeof(progress) - 1);
 				lcd_set_cursor(0, 3);
 				lcd_set_cursor(0, 3);
-				lcd_puts_P(_T(MSG_TEMP_CALIBRATION));
-				lcd_set_cursor(12, 3);
-				sprintf(progress, "%d/6", custom_message_state);
-				lcd_print(progress);
+				lcd_print(statusLine);
 			}
 			}
 			break;
 			break;
 		case CustomMsg::TempCompPreheat: // temp compensation preheat
 		case CustomMsg::TempCompPreheat: // temp compensation preheat
@@ -2003,11 +2023,11 @@ static void lcd_menu_temperatures()
     menu_back_if_clicked();
     menu_back_if_clicked();
 }
 }
 
 
-#if defined (VOLT_BED_PIN) || defined (VOLT_PWR_PIN)
+#if defined (VOLT_BED_PIN) || defined (VOLT_PWR_PIN) || IR_SENSOR_ANALOG
 #define VOLT_DIV_R1 10000
 #define VOLT_DIV_R1 10000
 #define VOLT_DIV_R2 2370
 #define VOLT_DIV_R2 2370
 #define VOLT_DIV_FAC ((float)VOLT_DIV_R2 / (VOLT_DIV_R2 + VOLT_DIV_R1))
 #define VOLT_DIV_FAC ((float)VOLT_DIV_R2 / (VOLT_DIV_R2 + VOLT_DIV_R1))
-#define VOLT_DIV_REF 5
+
 //! @brief Show Voltages
 //! @brief Show Voltages
 //!
 //!
 //! @code{.unparsed}
 //! @code{.unparsed}
@@ -2025,10 +2045,17 @@ static void lcd_menu_voltages()
 	float volt_pwr = VOLT_DIV_REF * ((float)current_voltage_raw_pwr / (1023 * OVERSAMPLENR)) / VOLT_DIV_FAC;
 	float volt_pwr = VOLT_DIV_REF * ((float)current_voltage_raw_pwr / (1023 * OVERSAMPLENR)) / VOLT_DIV_FAC;
 	float volt_bed = VOLT_DIV_REF * ((float)current_voltage_raw_bed / (1023 * OVERSAMPLENR)) / VOLT_DIV_FAC;
 	float volt_bed = VOLT_DIV_REF * ((float)current_voltage_raw_bed / (1023 * OVERSAMPLENR)) / VOLT_DIV_FAC;
 	lcd_home();
 	lcd_home();
-	lcd_printf_P(PSTR(" PWR:      %d.%01dV\n" " BED:      %d.%01dV"), (int)volt_pwr, (int)(10*fabs(volt_pwr - (int)volt_pwr)), (int)volt_bed, (int)(10*fabs(volt_bed - (int)volt_bed)));
-    menu_back_if_clicked();
+#if !IR_SENSOR_ANALOG
+	lcd_printf_P(PSTR("\n"));
+#endif //!IR_SENSOR_ANALOG
+     lcd_printf_P(PSTR(" PWR:      %4.1fV\n" " BED:      %4.1fV"), volt_pwr, volt_bed);
+#if IR_SENSOR_ANALOG
+     float volt_IR = VOLT_DIV_REF * ((float)current_voltage_raw_IR / (1023 * OVERSAMPLENR));
+     lcd_printf_P(PSTR("\n IR :       %3.1fV"),volt_IR);
+#endif //IR_SENSOR_ANALOG
+     menu_back_if_clicked();
 }
 }
-#endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN
+#endif //defined (VOLT_BED_PIN) || defined (VOLT_PWR_PIN) || IR_SENSOR_ANALOG
 
 
 #ifdef TMC2130
 #ifdef TMC2130
 //! @brief Show Belt Status
 //! @brief Show Belt Status
@@ -3021,7 +3048,7 @@ static void lcd_menu_xyz_y_min()
 	for (uint8_t i = 0; i < 2; i++)
 	for (uint8_t i = 0; i < 2; i++)
 	{
 	{
 		lcd_set_cursor(11,2+i);
 		lcd_set_cursor(11,2+i);
-		if (distanceMin[i] >= 200) lcd_puts_P(_N("N/A"));  ////c=3 r=1
+		if (distanceMin[i] >= 200) lcd_puts_P(_T(MSG_NA)); ////c=3 r=1
 		else lcd_printf_P(_N("%6.2fmm"), distanceMin[i]);
 		else lcd_printf_P(_N("%6.2fmm"), distanceMin[i]);
 	}
 	}
     if (lcd_clicked())
     if (lcd_clicked())
@@ -3067,7 +3094,7 @@ static void lcd_menu_xyz_skew()
 	}
 	}
 	else{
 	else{
 		lcd_set_cursor(15,0);
 		lcd_set_cursor(15,0);
-		lcd_puts_P(_N("N/A"));
+		lcd_puts_P(_T(MSG_NA));
 	}
 	}
     if (lcd_clicked())
     if (lcd_clicked())
         menu_goto(lcd_menu_xyz_offset, 0, true, true);
         menu_goto(lcd_menu_xyz_offset, 0, true, true);
@@ -4004,13 +4031,13 @@ static void lcd_print_state(uint8_t state)
 {
 {
 	switch (state) {
 	switch (state) {
 		case STATE_ON:
 		case STATE_ON:
-			lcd_puts_P(_i("  1"));
+			lcd_puts_P(_N("  1"));
 		break;
 		break;
 		case STATE_OFF:
 		case STATE_OFF:
-			lcd_puts_P(_i("  0"));
+			lcd_puts_P(_N("  0"));
 		break;
 		break;
 		default: 
 		default: 
-			lcd_puts_P(_i("N/A"));
+			lcd_puts_P(_T(MSG_NA));
 		break;
 		break;
 	}
 	}
 }
 }
@@ -4023,7 +4050,8 @@ static void lcd_show_sensors_state()
 	uint8_t idler_state = STATE_NA;
 	uint8_t idler_state = STATE_NA;
 
 
 	pinda_state = READ(Z_MIN_PIN);
 	pinda_state = READ(Z_MIN_PIN);
-	if (mmu_enabled) {
+	if (mmu_enabled && ((_millis() - mmu_last_finda_response) < 1000ul) )
+	{
 		finda_state = mmu_finda;
 		finda_state = mmu_finda;
 	}
 	}
 	if (ir_sensor_detected) {
 	if (ir_sensor_detected) {
@@ -4783,10 +4811,10 @@ void lcd_toshiba_flash_air_compatibility_toggle()
 //!
 //!
 //! @code{.unparsed}
 //! @code{.unparsed}
 //! |01234567890123456789|
 //! |01234567890123456789|
-//! |[Smooth1]Live adj. Z|  c=11
-//! |value set, continue |  c=20
-//! |or start from zero? |  c=20
-//! |>Continue Reset     |  c=a, c=b, a+b = 18
+//! |Sheet Smooth1 actual|  c=a, c=b, a+b = 13
+//! |Z offset: -1.480 mm |  c=a, c=b, a+b = 14
+//! |>Continue           |  c=19
+//! | Start from zero    |  c=19
 //! ----------------------
 //! ----------------------
 //! @endcode
 //! @endcode
 void lcd_first_layer_calibration_reset()
 void lcd_first_layer_calibration_reset()
@@ -4824,8 +4852,9 @@ void lcd_first_layer_calibration_reset()
     char sheet_name[sizeof(Sheet::name)];
     char sheet_name[sizeof(Sheet::name)];
     eeprom_read_block(sheet_name, &EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].name, sizeof(Sheet::name));
     eeprom_read_block(sheet_name, &EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].name, sizeof(Sheet::name));
     lcd_set_cursor(0, 0);
     lcd_set_cursor(0, 0);
-    lcd_printf_P(_i("[%.7s]Live adj. Z\nvalue set, continue\nor start from zero?\n%cContinue%cReset"), //// \n denotes line break, %.7s is replaced by 7 character long sheet name, %+1.3f is replaced by 6 character long floating point number, %c is replaced by > or white space (one character) based on whether first or second option is selected. % denoted place holders can not be reordered. r=4
-            sheet_name, menuData->reset ? ' ' : '>', menuData->reset ? '>' : ' ');
+    float offset = static_cast<int16_t>(eeprom_read_word(reinterpret_cast<uint16_t*>(&EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)))/cs.axis_steps_per_unit[Z_AXIS];
+    lcd_printf_P(_i("Sheet %.7s\nZ offset: %+1.3f mm\n%cContinue\n%cStart from zero"), //// \n denotes line break, %.7s is replaced by 7 character long sheet name, %+1.3f is replaced by 6 character long floating point number, %c is replaced by > or white space (one character) based on whether first or second option is selected. % denoted place holders can not be reordered. r=4
+            sheet_name, offset, menuData->reset ? ' ' : '>', menuData->reset ? '>' : ' ');
 
 
 }
 }
 
 
@@ -5222,29 +5251,29 @@ do\
         if (fsensor_not_responding && (mmu_enabled == false))\
         if (fsensor_not_responding && (mmu_enabled == false))\
         {\
         {\
             /* Filament sensor not working*/\
             /* Filament sensor not working*/\
-            MENU_ITEM_FUNCTION_P(_i("Fil. sensor [N/A]"), lcd_fsensor_state_set);/*////MSG_FSENSOR_NA*/\
-            MENU_ITEM_SUBMENU_P(_T(MSG_FSENS_AUTOLOAD_NA), lcd_fsensor_fail);\
+            MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), _T(MSG_NA), lcd_fsensor_state_set);/*////MSG_FSENSOR_NA*/\
+            MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR_AUTOLOAD), NULL, lcd_fsensor_fail);\
         }\
         }\
         else\
         else\
         {\
         {\
             /* Filament sensor turned off, working, no problems*/\
             /* Filament sensor turned off, working, no problems*/\
-            MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_OFF), lcd_fsensor_state_set);\
+            MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), _T(MSG_OFF), lcd_fsensor_state_set);\
             if (mmu_enabled == false)\
             if (mmu_enabled == false)\
             {\
             {\
-                MENU_ITEM_SUBMENU_P(_T(MSG_FSENS_AUTOLOAD_NA), lcd_filament_autoload_info);\
+                MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR_AUTOLOAD), NULL, lcd_filament_autoload_info);\
             }\
             }\
         }\
         }\
     }\
     }\
     else\
     else\
     {\
     {\
         /* Filament sensor turned on, working, no problems*/\
         /* Filament sensor turned on, working, no problems*/\
-        MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_ON), lcd_fsensor_state_set);\
+        MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), _T(MSG_ON), lcd_fsensor_state_set);\
         if (mmu_enabled == false)\
         if (mmu_enabled == false)\
         {\
         {\
             if (fsensor_autoload_enabled)\
             if (fsensor_autoload_enabled)\
-                MENU_ITEM_FUNCTION_P(_i("F. autoload  [on]"), lcd_set_filament_autoload);/*////MSG_FSENS_AUTOLOAD_ON c=17 r=1*/\
+                MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR_AUTOLOAD), _T(MSG_ON), lcd_set_filament_autoload);/*////MSG_FSENS_AUTOLOAD_ON c=17 r=1*/\
             else\
             else\
-                MENU_ITEM_FUNCTION_P(_i("F. autoload [off]"), lcd_set_filament_autoload);/*////MSG_FSENS_AUTOLOAD_OFF c=17 r=1*/\
+                MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR_AUTOLOAD), _T(MSG_OFF), lcd_set_filament_autoload);/*////MSG_FSENS_AUTOLOAD_OFF c=17 r=1*/\
             /*if (fsensor_oq_meassure_enabled)*/\
             /*if (fsensor_oq_meassure_enabled)*/\
                 /*MENU_ITEM_FUNCTION_P(_i("F. OQ meass. [on]"), lcd_set_filament_oq_meass);*//*////MSG_FSENS_OQMEASS_ON c=17 r=1*/\
                 /*MENU_ITEM_FUNCTION_P(_i("F. OQ meass. [on]"), lcd_set_filament_oq_meass);*//*////MSG_FSENS_OQMEASS_ON c=17 r=1*/\
             /*else*/\
             /*else*/\
@@ -5264,60 +5293,58 @@ static void auto_deplete_switch()
     eeprom_update_byte((unsigned char *)EEPROM_AUTO_DEPLETE, lcd_autoDeplete);
     eeprom_update_byte((unsigned char *)EEPROM_AUTO_DEPLETE, lcd_autoDeplete);
 }
 }
 
 
-static bool settingsAutoDeplete()
+static void settingsAutoDeplete()
 {
 {
     if (mmu_enabled)
     if (mmu_enabled)
     {
     {
         if (!fsensor_enabled)
         if (!fsensor_enabled)
         {
         {
-            if (menu_item_text_P(_i("SpoolJoin   [N/A]"))) return true;
+            MENU_ITEM_TOGGLE_P(_T(MSG_AUTO_DEPLETE), _T(MSG_NA), NULL);
         }
         }
         else if (lcd_autoDeplete)
         else if (lcd_autoDeplete)
         {
         {
-            if (menu_item_function_P(_i("SpoolJoin    [on]"), auto_deplete_switch)) return true;
+            MENU_ITEM_TOGGLE_P(_T(MSG_AUTO_DEPLETE), _T(MSG_ON), auto_deplete_switch);
         }
         }
         else
         else
         {
         {
-            if (menu_item_function_P(_i("SpoolJoin   [off]"), auto_deplete_switch)) return true;
+            MENU_ITEM_TOGGLE_P(_T(MSG_AUTO_DEPLETE), _T(MSG_OFF), auto_deplete_switch);
         }
         }
     }
     }
-    return false;
 }
 }
 
 
 #define SETTINGS_AUTO_DEPLETE \
 #define SETTINGS_AUTO_DEPLETE \
 do\
 do\
 {\
 {\
-    if(settingsAutoDeplete()) return;\
+    settingsAutoDeplete();\
 }\
 }\
 while(0)\
 while(0)\
 
 
 #ifdef MMU_HAS_CUTTER
 #ifdef MMU_HAS_CUTTER
-static bool settingsCutter()
+static void settingsCutter()
 {
 {
     if (mmu_enabled)
     if (mmu_enabled)
     {
     {
         if (EEPROM_MMU_CUTTER_ENABLED_enabled == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
         if (EEPROM_MMU_CUTTER_ENABLED_enabled == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
         {
         {
-            if (menu_item_function_P(_i("Cutter       [on]"), lcd_cutter_enabled)) return true;//// c=17 r=1
+            MENU_ITEM_TOGGLE_P(_T(MSG_CUTTER), _T(MSG_ON), lcd_cutter_enabled);
         }
         }
 #ifdef MMU_ALWAYS_CUT
 #ifdef MMU_ALWAYS_CUT
         else if (EEPROM_MMU_CUTTER_ENABLED_always == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
         else if (EEPROM_MMU_CUTTER_ENABLED_always == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
         {
         {
-            if (menu_item_function_P(_i("Cutter   [always]"), lcd_cutter_enabled)) return true;//// c=17 r=1
+            MENU_ITEM_TOGGLE_P(_T(MSG_CUTTER), _i("Always"), lcd_cutter_enabled);
         }
         }
 #endif
 #endif
         else
         else
         {
         {
-            if (menu_item_function_P(_i("Cutter      [off]"), lcd_cutter_enabled)) return true;//// c=17 r=1
+            MENU_ITEM_TOGGLE_P(_T(MSG_CUTTER), _T(MSG_OFF), lcd_cutter_enabled);
         }
         }
     }
     }
-    return false;
 }
 }
 
 
 #define SETTINGS_CUTTER \
 #define SETTINGS_CUTTER \
 do\
 do\
 {\
 {\
-    if(settingsCutter()) return;\
+    settingsCutter();\
 }\
 }\
 while(0)
 while(0)
 #else
 #else
@@ -5332,18 +5359,15 @@ do\
     {\
     {\
         if (SilentModeMenu == SILENT_MODE_NORMAL)\
         if (SilentModeMenu == SILENT_MODE_NORMAL)\
         {\
         {\
-            MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set);\
+            MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_NORMAL), lcd_silent_mode_set);\
         }\
         }\
-        else MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set);\
+        else MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_STEALTH), lcd_silent_mode_set);\
         if (SilentModeMenu == SILENT_MODE_NORMAL)\
         if (SilentModeMenu == SILENT_MODE_NORMAL)\
         {\
         {\
-            if (lcd_crash_detect_enabled())\
-            {\
-                MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_ON), crash_mode_switch);\
-            }\
-            else MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_OFF), crash_mode_switch);\
+            if (lcd_crash_detect_enabled()) MENU_ITEM_TOGGLE_P(_T(MSG_CRASHDETECT), _T(MSG_ON), crash_mode_switch);\
+            else MENU_ITEM_TOGGLE_P(_T(MSG_CRASHDETECT), _T(MSG_OFF), crash_mode_switch);\
         }\
         }\
-        else MENU_ITEM_SUBMENU_P(_T(MSG_CRASHDETECT_NA), lcd_crash_mode_info);\
+        else MENU_ITEM_TOGGLE_P(_T(MSG_CRASHDETECT), NULL, lcd_crash_mode_info);\
     }\
     }\
 }\
 }\
 while (0)
 while (0)
@@ -5357,16 +5381,16 @@ do\
         switch (SilentModeMenu)\
         switch (SilentModeMenu)\
         {\
         {\
         case SILENT_MODE_POWER:\
         case SILENT_MODE_POWER:\
-            MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set);\
+            MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_HIGH_POWER), lcd_silent_mode_set);\
             break;\
             break;\
         case SILENT_MODE_SILENT:\
         case SILENT_MODE_SILENT:\
-            MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_ON), lcd_silent_mode_set);\
+            MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_SILENT), lcd_silent_mode_set);\
             break;\
             break;\
         case SILENT_MODE_AUTO:\
         case SILENT_MODE_AUTO:\
-            MENU_ITEM_FUNCTION_P(_T(MSG_AUTO_MODE_ON), lcd_silent_mode_set);\
+            MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_AUTO_POWER), lcd_silent_mode_set);\
             break;\
             break;\
         default:\
         default:\
-            MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set);\
+            MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_HIGH_POWER), lcd_silent_mode_set);\
             break; /* (probably) not needed*/\
             break; /* (probably) not needed*/\
         }\
         }\
     }\
     }\
@@ -5380,8 +5404,8 @@ do\
 {\
 {\
 	if (mmu_enabled)\
 	if (mmu_enabled)\
 	{\
 	{\
-		if (SilentModeMenu_MMU == 0) MENU_ITEM_FUNCTION_P(_i("MMU Mode [Normal]"), lcd_silent_mode_mmu_set); \
-		else MENU_ITEM_FUNCTION_P(_i("MMU Mode[Stealth]"), lcd_silent_mode_mmu_set); \
+		if (SilentModeMenu_MMU == 0) MENU_ITEM_TOGGLE_P(_T(MSG_MMU_MODE), _T(MSG_NORMAL), lcd_silent_mode_mmu_set);\
+		else MENU_ITEM_TOGGLE_P(_T(MSG_MMU_MODE), _T(MSG_STEALTH), lcd_silent_mode_mmu_set);\
 	}\
 	}\
 }\
 }\
 while (0) 
 while (0) 
@@ -5394,9 +5418,9 @@ while (0)
 do\
 do\
 {\
 {\
     if (card.ToshibaFlashAir_isEnabled())\
     if (card.ToshibaFlashAir_isEnabled())\
-        MENU_ITEM_FUNCTION_P(_i("SD card [flshAir]"), lcd_toshiba_flash_air_compatibility_toggle);/*////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1*/\
+        MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), _T(MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY), lcd_toshiba_flash_air_compatibility_toggle);\
     else\
     else\
-        MENU_ITEM_FUNCTION_P(_i("SD card  [normal]"), lcd_toshiba_flash_air_compatibility_toggle);/*////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1*/\
+        MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), _T(MSG_NORMAL), lcd_toshiba_flash_air_compatibility_toggle);\
 \
 \
     if (!farm_mode)\
     if (!farm_mode)\
     {\
     {\
@@ -5404,9 +5428,9 @@ do\
         EEPROM_read(EEPROM_SD_SORT, (uint8_t*)&sdSort, sizeof(sdSort));\
         EEPROM_read(EEPROM_SD_SORT, (uint8_t*)&sdSort, sizeof(sdSort));\
         switch (sdSort)\
         switch (sdSort)\
         {\
         {\
-          case SD_SORT_TIME: MENU_ITEM_FUNCTION_P(_i("Sort       [time]"), lcd_sort_type_set); break;/*////MSG_SORT_TIME c=17 r=1*/\
-          case SD_SORT_ALPHA: MENU_ITEM_FUNCTION_P(_i("Sort   [alphabet]"), lcd_sort_type_set); break;/*////MSG_SORT_ALPHA c=17 r=1*/\
-          default: MENU_ITEM_FUNCTION_P(_i("Sort       [none]"), lcd_sort_type_set);/*////MSG_SORT_NONE c=17 r=1*/\
+          case SD_SORT_TIME: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_SORT_TIME), lcd_sort_type_set); break;\
+          case SD_SORT_ALPHA: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_SORT_ALPHA), lcd_sort_type_set); break;\
+          default: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_NONE), lcd_sort_type_set);\
         }\
         }\
     }\
     }\
 }\
 }\
@@ -5416,9 +5440,9 @@ while (0)
 do\
 do\
 {\
 {\
     if (card.ToshibaFlashAir_isEnabled())\
     if (card.ToshibaFlashAir_isEnabled())\
-        MENU_ITEM_FUNCTION_P(_i("SD card [flshAir]"), lcd_toshiba_flash_air_compatibility_toggle);/*////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1*/\
+        MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), _T(MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY), lcd_toshiba_flash_air_compatibility_toggle);\
     else\
     else\
-        MENU_ITEM_FUNCTION_P(_i("SD card  [normal]"), lcd_toshiba_flash_air_compatibility_toggle);/*////MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1*/\
+        MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), _T(MSG_NORMAL), lcd_toshiba_flash_air_compatibility_toggle);\
 }\
 }\
 while (0)
 while (0)
 #endif // SDCARD_SORT_ALPHA
 #endif // SDCARD_SORT_ALPHA
@@ -5450,22 +5474,22 @@ while (0)
 do\
 do\
 {\
 {\
     switch(eSoundMode)\
     switch(eSoundMode)\
-         {\
-         case e_SOUND_MODE_LOUD:\
-              MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_LOUD),lcd_sound_state_set);\
-              break;\
-         case e_SOUND_MODE_ONCE:\
-              MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_ONCE),lcd_sound_state_set);\
-              break;\
-         case e_SOUND_MODE_SILENT:\
-              MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_SILENT),lcd_sound_state_set);\
-              break;\
-         case e_SOUND_MODE_BLIND:\
-              MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_BLIND),lcd_sound_state_set);\
-              break;\
-         default:\
-              MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_LOUD),lcd_sound_state_set);\
-         }\
+    {\
+        case e_SOUND_MODE_LOUD:\
+            MENU_ITEM_TOGGLE_P(_T(MSG_SOUND), _T(MSG_SOUND_LOUD), lcd_sound_state_set);\
+            break;\
+        case e_SOUND_MODE_ONCE:\
+            MENU_ITEM_TOGGLE_P(_T(MSG_SOUND), _T(MSG_SOUND_ONCE), lcd_sound_state_set);\
+            break;\
+        case e_SOUND_MODE_SILENT:\
+            MENU_ITEM_TOGGLE_P(_T(MSG_SOUND), _T(MSG_SILENT), lcd_sound_state_set);\
+            break;\
+        case e_SOUND_MODE_BLIND:\
+            MENU_ITEM_TOGGLE_P(_T(MSG_SOUND), _T(MSG_SOUND_BLIND), lcd_sound_state_set);\
+            break;\
+        default:\
+            MENU_ITEM_TOGGLE_P(_T(MSG_SOUND), _T(MSG_SOUND_LOUD), lcd_sound_state_set);\
+    }\
 }\
 }\
 while (0)
 while (0)
 
 
@@ -5495,16 +5519,16 @@ do\
     switch(oCheckMode)\
     switch(oCheckMode)\
          {\
          {\
          case ClCheckMode::_None:\
          case ClCheckMode::_None:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle     [none]"),lcd_check_mode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_NONE), lcd_check_mode_set);\
               break;\
               break;\
          case ClCheckMode::_Warn:\
          case ClCheckMode::_Warn:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle     [warn]"),lcd_check_mode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_WARN), lcd_check_mode_set);\
               break;\
               break;\
          case ClCheckMode::_Strict:\
          case ClCheckMode::_Strict:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle   [strict]"),lcd_check_mode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_STRICT), lcd_check_mode_set);\
               break;\
               break;\
          default:\
          default:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle     [none]"),lcd_check_mode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_NONE), lcd_check_mode_set);\
          }\
          }\
 }\
 }\
 while (0)
 while (0)
@@ -5538,20 +5562,15 @@ eeprom_update_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM,nDiameter);
 #define SETTINGS_NOZZLE \
 #define SETTINGS_NOZZLE \
 do\
 do\
 {\
 {\
+    float fNozzleDiam;\
     switch(oNozzleDiameter)\
     switch(oNozzleDiameter)\
-         {\
-         case ClNozzleDiameter::_Diameter_250:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle d.  [0.25]"),lcd_nozzle_diameter_set);\
-              break;\
-         case ClNozzleDiameter::_Diameter_400:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle d.  [0.40]"),lcd_nozzle_diameter_set);\
-              break;\
-         case ClNozzleDiameter::_Diameter_600:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle d.  [0.60]"),lcd_nozzle_diameter_set);\
-              break;\
-         default:\
-              MENU_ITEM_FUNCTION_P(_i("Nozzle d.  [0.40]"),lcd_nozzle_diameter_set);\
-         }\
+    {\
+        case ClNozzleDiameter::_Diameter_250: fNozzleDiam = 0.25f; break;\
+        case ClNozzleDiameter::_Diameter_400: fNozzleDiam = 0.4f; break;\
+        case ClNozzleDiameter::_Diameter_600: fNozzleDiam = 0.6f; break;\
+        default: fNozzleDiam = 0.4f; break;\
+    }\
+    MENU_ITEM_TOGGLE(_T(MSG_NOZZLE_DIAMETER), ftostr12ns(fNozzleDiam), lcd_nozzle_diameter_set);\
 }\
 }\
 while (0)
 while (0)
 
 
@@ -5580,16 +5599,16 @@ do\
     switch(oCheckModel)\
     switch(oCheckModel)\
          {\
          {\
          case ClCheckModel::_None:\
          case ClCheckModel::_None:\
-              MENU_ITEM_FUNCTION_P(_i("Model      [none]"),lcd_check_model_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_NONE), lcd_check_model_set);\
               break;\
               break;\
          case ClCheckModel::_Warn:\
          case ClCheckModel::_Warn:\
-              MENU_ITEM_FUNCTION_P(_i("Model      [warn]"),lcd_check_model_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_WARN), lcd_check_model_set);\
               break;\
               break;\
          case ClCheckModel::_Strict:\
          case ClCheckModel::_Strict:\
-              MENU_ITEM_FUNCTION_P(_i("Model    [strict]"),lcd_check_model_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_STRICT), lcd_check_model_set);\
               break;\
               break;\
          default:\
          default:\
-              MENU_ITEM_FUNCTION_P(_i("Model      [none]"),lcd_check_model_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_NONE), lcd_check_model_set);\
          }\
          }\
 }\
 }\
 while (0)
 while (0)
@@ -5619,16 +5638,16 @@ do\
     switch(oCheckVersion)\
     switch(oCheckVersion)\
          {\
          {\
          case ClCheckVersion::_None:\
          case ClCheckVersion::_None:\
-              MENU_ITEM_FUNCTION_P(_i("Firmware   [none]"),lcd_check_version_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_NONE), lcd_check_version_set);\
               break;\
               break;\
          case ClCheckVersion::_Warn:\
          case ClCheckVersion::_Warn:\
-              MENU_ITEM_FUNCTION_P(_i("Firmware   [warn]"),lcd_check_version_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_WARN), lcd_check_version_set);\
               break;\
               break;\
          case ClCheckVersion::_Strict:\
          case ClCheckVersion::_Strict:\
-              MENU_ITEM_FUNCTION_P(_i("Firmware [strict]"),lcd_check_version_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_STRICT), lcd_check_version_set);\
               break;\
               break;\
          default:\
          default:\
-              MENU_ITEM_FUNCTION_P(_i("Firmware   [none]"),lcd_check_version_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_FIRMWARE), _T(MSG_NONE), lcd_check_version_set);\
          }\
          }\
 }\
 }\
 while (0)
 while (0)
@@ -5658,16 +5677,16 @@ do\
     switch(oCheckGcode)\
     switch(oCheckGcode)\
          {\
          {\
          case ClCheckGcode::_None:\
          case ClCheckGcode::_None:\
-              MENU_ITEM_FUNCTION_P(_i("Gcode      [none]"),lcd_check_gcode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_NONE), lcd_check_gcode_set);\
               break;\
               break;\
          case ClCheckGcode::_Warn:\
          case ClCheckGcode::_Warn:\
-              MENU_ITEM_FUNCTION_P(_i("Gcode      [warn]"),lcd_check_gcode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_WARN), lcd_check_gcode_set);\
               break;\
               break;\
          case ClCheckGcode::_Strict:\
          case ClCheckGcode::_Strict:\
-              MENU_ITEM_FUNCTION_P(_i("Gcode    [strict]"),lcd_check_gcode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_STRICT), lcd_check_gcode_set);\
               break;\
               break;\
          default:\
          default:\
-              MENU_ITEM_FUNCTION_P(_i("Gcode      [none]"),lcd_check_gcode_set);\
+              MENU_ITEM_TOGGLE_P(_T(MSG_GCODE), _T(MSG_NONE), lcd_check_gcode_set);\
          }\
          }\
 }\
 }\
 while (0)
 while (0)
@@ -5684,6 +5703,41 @@ SETTINGS_VERSION;
 MENU_END();
 MENU_END();
 }
 }
 
 
+#if IR_SENSOR_ANALOG
+static void lcd_fsensor_actionNA_set(void)
+{
+switch(oFsensorActionNA)
+     {
+     case ClFsensorActionNA::_Continue:
+          oFsensorActionNA=ClFsensorActionNA::_Pause;
+          break;
+     case ClFsensorActionNA::_Pause:
+          oFsensorActionNA=ClFsensorActionNA::_Continue;
+          break;
+     default:
+          oFsensorActionNA=ClFsensorActionNA::_Continue;
+     }
+eeprom_update_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA,(uint8_t)oFsensorActionNA);
+}
+
+#define FSENSOR_ACTION_NA \
+do\
+{\
+    switch(oFsensorActionNA)\
+         {\
+         case ClFsensorActionNA::_Continue:\
+              MENU_ITEM_TOGGLE_P(_T(MSG_FS_ACTION), _T(MSG_FS_CONTINUE), lcd_fsensor_actionNA_set);\
+              break;\
+         case ClFsensorActionNA::_Pause:\
+              MENU_ITEM_TOGGLE_P(_T(MSG_FS_ACTION), _T(MSG_FS_PAUSE), lcd_fsensor_actionNA_set);\
+              break;\
+         default:\
+              oFsensorActionNA=ClFsensorActionNA::_Continue;\
+         }\
+}\
+while (0)
+#endif //IR_SENSOR_ANALOG
+
 template <uint8_t number>
 template <uint8_t number>
 static void select_sheet_menu()
 static void select_sheet_menu()
 {
 {
@@ -5715,6 +5769,9 @@ void lcd_hw_setup_menu(void)                      // can not be "static"
     SETTINGS_NOZZLE;
     SETTINGS_NOZZLE;
     MENU_ITEM_SUBMENU_P(_i("Checks"), lcd_checking_menu);
     MENU_ITEM_SUBMENU_P(_i("Checks"), lcd_checking_menu);
 
 
+#if IR_SENSOR_ANALOG
+    FSENSOR_ACTION_NA;
+#endif //IR_SENSOR_ANALOG
     MENU_END();
     MENU_END();
 }
 }
 
 
@@ -5736,10 +5793,7 @@ static void lcd_settings_menu()
 
 
 	SETTINGS_CUTTER;
 	SETTINGS_CUTTER;
 
 
-	if (fans_check_enabled == true)
-		MENU_ITEM_FUNCTION_P(_i("Fans check   [on]"), lcd_set_fan_check);////MSG_FANS_CHECK_ON c=17 r=1
-	else
-		MENU_ITEM_FUNCTION_P(_i("Fans check  [off]"), lcd_set_fan_check);////MSG_FANS_CHECK_OFF c=17 r=1
+	MENU_ITEM_TOGGLE_P(_i("Fans check"), fans_check_enabled ? _T(MSG_ON) : _T(MSG_OFF), lcd_set_fan_check);
 
 
 	SETTINGS_SILENT_MODE;
 	SETTINGS_SILENT_MODE;
 
 
@@ -5757,16 +5811,10 @@ static void lcd_settings_menu()
     MENU_ITEM_SUBMENU_P(_i("Lin. correction"), lcd_settings_linearity_correction_menu);
     MENU_ITEM_SUBMENU_P(_i("Lin. correction"), lcd_settings_linearity_correction_menu);
 #endif //LINEARITY_CORRECTION && TMC2130
 #endif //LINEARITY_CORRECTION && TMC2130
 
 
-  if (temp_cal_active == false)
-	  MENU_ITEM_FUNCTION_P(_i("Temp. cal.  [off]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_OFF c=20 r=1
-  else
-	  MENU_ITEM_FUNCTION_P(_i("Temp. cal.   [on]"), lcd_temp_calibration_set);////MSG_TEMP_CALIBRATION_ON c=20 r=1
+	MENU_ITEM_TOGGLE_P(_T(MSG_TEMP_CALIBRATION), temp_cal_active ? _T(MSG_ON) : _T(MSG_OFF), lcd_temp_calibration_set);
 
 
 #ifdef HAS_SECOND_SERIAL_PORT
 #ifdef HAS_SECOND_SERIAL_PORT
-	if (selectedSerialPort == 0)
-		MENU_ITEM_FUNCTION_P(_i("RPi port    [off]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_OFF c=17 r=1
-	else
-		MENU_ITEM_FUNCTION_P(_i("RPi port     [on]"), lcd_second_serial_set);////MSG_SECOND_SERIAL_ON c=17 r=1
+    MENU_ITEM_TOGGLE_P(_T(MSG_RPI_PORT), (selectedSerialPort == 0) ? _T(MSG_OFF) : _T(MSG_ON), lcd_second_serial_set);
 #endif //HAS_SECOND_SERIAL
 #endif //HAS_SECOND_SERIAL
 
 
 	if (!isPrintPaused && !homing_flag)
 	if (!isPrintPaused && !homing_flag)
@@ -5827,6 +5875,9 @@ static void lcd_calibration_menu()
          MENU_ITEM_SUBMENU_P(_T(MSG_V2_CALIBRATION), lcd_first_layer_calibration_reset);
          MENU_ITEM_SUBMENU_P(_T(MSG_V2_CALIBRATION), lcd_first_layer_calibration_reset);
     }
     }
 	MENU_ITEM_GCODE_P(_T(MSG_AUTO_HOME), PSTR("G28 W"));
 	MENU_ITEM_GCODE_P(_T(MSG_AUTO_HOME), PSTR("G28 W"));
+#ifdef TMC2130
+	MENU_ITEM_FUNCTION_P(_i("Belt test        "), lcd_belttest_v);////MSG_BELTTEST
+#endif //TMC2130
 	MENU_ITEM_FUNCTION_P(_i("Selftest         "), lcd_selftest_v);////MSG_SELFTEST
 	MENU_ITEM_FUNCTION_P(_i("Selftest         "), lcd_selftest_v);////MSG_SELFTEST
 #ifdef MK1BP
 #ifdef MK1BP
     // MK1
     // MK1
@@ -7054,11 +7105,21 @@ static void lcd_tune_menu()
 
 
 #ifdef FILAMENT_SENSOR
 #ifdef FILAMENT_SENSOR
 	if (FSensorStateMenu == 0) {
 	if (FSensorStateMenu == 0) {
-		MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_OFF), lcd_fsensor_state_set);
+          if (fsensor_not_responding && (mmu_enabled == false)) {
+               /* Filament sensor not working*/
+               MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), _T(MSG_NA), lcd_fsensor_state_set);
+          }
+          else {
+               /* Filament sensor turned off, working, no problems*/
+               MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), _T(MSG_OFF), lcd_fsensor_state_set);
+          }
 	}
 	}
 	else {
 	else {
-		MENU_ITEM_FUNCTION_P(_T(MSG_FSENSOR_ON), lcd_fsensor_state_set);
+		MENU_ITEM_TOGGLE_P(_T(MSG_FSENSOR), _T(MSG_ON), lcd_fsensor_state_set);
 	}
 	}
+#if IR_SENSOR_ANALOG
+     FSENSOR_ACTION_NA;
+#endif //IR_SENSOR_ANALOG
 #endif //FILAMENT_SENSOR
 #endif //FILAMENT_SENSOR
 
 
 	SETTINGS_AUTO_DEPLETE;
 	SETTINGS_AUTO_DEPLETE;
@@ -7067,54 +7128,34 @@ static void lcd_tune_menu()
 
 
      if(farm_mode)
      if(farm_mode)
      {
      {
-          if (fans_check_enabled == true)
-               MENU_ITEM_FUNCTION_P(_i("Fans check   [on]"), lcd_set_fan_check);////MSG_FANS_CHECK_ON c=17 r=1
-          else
-               MENU_ITEM_FUNCTION_P(_i("Fans check  [off]"), lcd_set_fan_check);////MSG_FANS_CHECK_OFF c=17 r=1
+       MENU_ITEM_TOGGLE_P(_i("Fans check"), fans_check_enabled ? _T(MSG_ON) : _T(MSG_OFF), lcd_set_fan_check);
      }
      }
 
 
 #ifdef TMC2130
 #ifdef TMC2130
      if(!farm_mode)
      if(!farm_mode)
      {
      {
-          if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set);
-          else MENU_ITEM_FUNCTION_P(_T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set);
+          if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_NORMAL), lcd_silent_mode_set);
+          else MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_STEALTH), lcd_silent_mode_set);
 
 
           if (SilentModeMenu == SILENT_MODE_NORMAL)
           if (SilentModeMenu == SILENT_MODE_NORMAL)
           {
           {
-               if (lcd_crash_detect_enabled()) MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_ON), crash_mode_switch);
-               else MENU_ITEM_FUNCTION_P(_T(MSG_CRASHDETECT_OFF), crash_mode_switch);
+               if (lcd_crash_detect_enabled()) MENU_ITEM_TOGGLE_P(_T(MSG_CRASHDETECT), _T(MSG_ON), crash_mode_switch);
+               else MENU_ITEM_TOGGLE_P(_T(MSG_CRASHDETECT), _T(MSG_OFF), crash_mode_switch);
           }
           }
-          else MENU_ITEM_SUBMENU_P(_T(MSG_CRASHDETECT_NA), lcd_crash_mode_info);
+          else MENU_ITEM_TOGGLE_P(_T(MSG_CRASHDETECT), NULL, lcd_crash_mode_info);
      }
      }
 #else //TMC2130
 #else //TMC2130
 	if (!farm_mode) { //dont show in menu if we are in farm mode
 	if (!farm_mode) { //dont show in menu if we are in farm mode
 		switch (SilentModeMenu) {
 		switch (SilentModeMenu) {
-		case SILENT_MODE_POWER: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break;
-		case SILENT_MODE_SILENT: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_ON), lcd_silent_mode_set); break;
-		case SILENT_MODE_AUTO: MENU_ITEM_FUNCTION_P(_T(MSG_AUTO_MODE_ON), lcd_silent_mode_set); break;
-		default: MENU_ITEM_FUNCTION_P(_T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; // (probably) not needed
+		case SILENT_MODE_POWER: MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_HIGH_POWER), lcd_silent_mode_set); break;
+		case SILENT_MODE_SILENT: MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_SILENT), lcd_silent_mode_set); break;
+		case SILENT_MODE_AUTO: MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_AUTO_POWER), lcd_silent_mode_set); break;
+		default: MENU_ITEM_TOGGLE_P(_T(MSG_MODE), _T(MSG_HIGH_POWER), lcd_silent_mode_set); break; // (probably) not needed
 		}
 		}
 	}
 	}
 #endif //TMC2130
 #endif //TMC2130
-	 SETTINGS_MMU_MODE;
-     switch(eSoundMode)
-          {
-          case e_SOUND_MODE_LOUD:
-               MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_LOUD),lcd_sound_state_set);
-               break;
-          case e_SOUND_MODE_ONCE:
-               MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_ONCE),lcd_sound_state_set);
-               break;
-          case e_SOUND_MODE_SILENT:
-               MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_SILENT),lcd_sound_state_set);
-               break;
-          case e_SOUND_MODE_BLIND:
-               MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_BLIND),lcd_sound_state_set);
-               break;
-          default:
-               MENU_ITEM_FUNCTION_P(_i(MSG_SOUND_MODE_LOUD),lcd_sound_state_set);
-          }
-
+	SETTINGS_MMU_MODE;
+    SETTINGS_SOUND;
 	MENU_END();
 	MENU_END();
 }
 }
 
 
@@ -7147,21 +7188,19 @@ static void lcd_mesh_bed_leveling_settings()
 	
 	
 	bool magnet_elimination = (eeprom_read_byte((uint8_t*)EEPROM_MBL_MAGNET_ELIMINATION) > 0);
 	bool magnet_elimination = (eeprom_read_byte((uint8_t*)EEPROM_MBL_MAGNET_ELIMINATION) > 0);
 	uint8_t points_nr = eeprom_read_byte((uint8_t*)EEPROM_MBL_POINTS_NR);
 	uint8_t points_nr = eeprom_read_byte((uint8_t*)EEPROM_MBL_POINTS_NR);
+	char sToggle[4]; //enough for nxn format
 
 
 	MENU_BEGIN();
 	MENU_BEGIN();
-	MENU_ITEM_BACK_P(_T(MSG_SETTINGS)); 
-	if(points_nr == 3) MENU_ITEM_FUNCTION_P(_i("Mesh         [3x3]"), mbl_mesh_toggle); ////MSG_MESH_3x3 c=18
-	else			   MENU_ITEM_FUNCTION_P(_i("Mesh         [7x7]"), mbl_mesh_toggle); ////MSG_MESH_7x7 c=18
-	switch (mbl_z_probe_nr) {
-		case 1: MENU_ITEM_FUNCTION_P(_i("Z-probe nr.    [1]"), mbl_probe_nr_toggle); break; ////MSG_Z_PROBE_NR_1 c=18
-		case 5: MENU_ITEM_FUNCTION_P(_i("Z-probe nr.    [5]"), mbl_probe_nr_toggle); break; ////MSG_Z_PROBE_NR_1 c=18
-		default: MENU_ITEM_FUNCTION_P(_i("Z-probe nr.    [3]"), mbl_probe_nr_toggle); break; ////MSG_Z_PROBE_NR_1 c=18
-	}
-	if (points_nr == 7) {
-		if (magnet_elimination) MENU_ITEM_FUNCTION_P(_i("Magnets comp. [On]"), mbl_magnets_elimination_toggle); ////MSG_MAGNETS_COMP_ON c=18
-		else				    MENU_ITEM_FUNCTION_P(_i("Magnets comp.[Off]"), mbl_magnets_elimination_toggle); ////MSG_MAGNETS_COMP_OFF c=18
-	}
-	else					        menu_item_text_P(_i("Magnets comp.[N/A]")); ////MSG_MAGNETS_COMP_NA c=18
+	MENU_ITEM_BACK_P(_T(MSG_SETTINGS));
+	sToggle[0] = points_nr + '0';
+	sToggle[1] = 'x';
+	sToggle[2] = points_nr + '0';
+	sToggle[3] = 0;
+	MENU_ITEM_TOGGLE(_T(MSG_MESH), sToggle, mbl_mesh_toggle);
+	sToggle[0] = mbl_z_probe_nr + '0';
+	sToggle[1] = 0;
+	MENU_ITEM_TOGGLE(_T(MSG_Z_PROBE_NR), sToggle, mbl_probe_nr_toggle);
+	MENU_ITEM_TOGGLE_P(_T(MSG_MAGNETS_COMP), (points_nr == 7) ? (magnet_elimination ? _T(MSG_ON): _T(MSG_OFF)) : _T(MSG_NA), mbl_magnets_elimination_toggle);
 	MENU_END();
 	MENU_END();
 	//SETTINGS_MBL_MODE;
 	//SETTINGS_MBL_MODE;
 }
 }
@@ -7341,6 +7380,98 @@ void lcd_sdcard_menu()
   }
   }
   MENU_END();
   MENU_END();
 }
 }
+#ifdef TMC2130
+static void lcd_belttest_v()
+{
+    lcd_belttest();
+    menu_back_if_clicked();
+}
+void lcd_belttest_print(const char* msg, uint16_t X, uint16_t Y)
+{
+    lcd_clear();
+    lcd_printf_P(
+              _N(
+                 "%S:\n"
+                 "%S\n"
+                 "X:%d\n"
+                 "Y:%d"
+                 ),
+              _i("Belt status"),
+              msg,
+              X,Y
+            );
+}
+void lcd_belttest()
+{
+    int _progress = 0;
+    bool _result = true;
+    uint16_t   X = eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_X));
+    uint16_t   Y = eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_Y));
+    lcd_belttest_print(_i("Checking X..."), X, Y);
+
+    _delay(2000);
+    KEEPALIVE_STATE(IN_HANDLER);
+
+    _result = lcd_selfcheck_axis_sg(X_AXIS);
+    X = eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_X));
+    if (!_result){
+        lcd_belttest_print(_i("Error"), X, Y);
+        return;
+    }
+
+    lcd_belttest_print(_i("Checking Y..."), X, Y);
+    _result = lcd_selfcheck_axis_sg(Y_AXIS);
+    Y = eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_Y));
+
+    if (!_result){
+        lcd_belttest_print(_i("Error"), X, Y);
+        lcd_clear();
+        return;
+    }
+
+
+    lcd_belttest_print(_i("Done"), X, Y);
+
+    KEEPALIVE_STATE(NOT_BUSY);
+    _delay(3000);
+}
+#endif //TMC2130
+
+#if IR_SENSOR_ANALOG
+static bool lcd_selftest_IRsensor()
+{
+bool bAction;
+bool bPCBrev03b;
+uint16_t volt_IR_int;
+float volt_IR;
+
+volt_IR_int=current_voltage_raw_IR;
+bPCBrev03b=(volt_IR_int<((int)IRsensor_Hopen_TRESHOLD));
+volt_IR=VOLT_DIV_REF*((float)volt_IR_int/(1023*OVERSAMPLENR));
+printf_P(PSTR("Measured filament sensor high level: %4.2fV\n"),volt_IR);
+if(volt_IR_int<((int)IRsensor_Hmin_TRESHOLD))
+     {
+     lcd_selftest_error(TestError::FsensorLevel,"HIGH","");
+     return(false);
+     }
+lcd_show_fullscreen_message_and_wait_P(_i("Please insert filament (but not load them!) into extruder and then press the knob."));
+volt_IR_int=current_voltage_raw_IR;
+volt_IR=VOLT_DIV_REF*((float)volt_IR_int/(1023*OVERSAMPLENR));
+printf_P(PSTR("Measured filament sensor low level: %4.2fV\n"),volt_IR);
+if(volt_IR_int>((int)IRsensor_Lmax_TRESHOLD))
+     {
+     lcd_selftest_error(TestError::FsensorLevel,"LOW","");
+     return(false);
+     }
+if((bPCBrev03b?1:0)!=(uint8_t)oFsensorPCB)        // safer then "(uint8_t)bPCBrev03b"
+     {
+     printf_P(PSTR("Filament sensor board change detected: revision %S\n"),bPCBrev03b?PSTR("03b or newer"):PSTR("03 or older"));
+     oFsensorPCB=bPCBrev03b?ClFsensorPCB::_Rev03b:ClFsensorPCB::_Old;
+     eeprom_update_byte((uint8_t*)EEPROM_FSENSOR_PCB,(uint8_t)oFsensorPCB);
+     }
+return(true);
+}
+#endif //IR_SENSOR_ANALOG
 
 
 static void lcd_selftest_v()
 static void lcd_selftest_v()
 {
 {
@@ -7358,8 +7489,16 @@ bool lcd_selftest()
 	#ifdef TMC2130
 	#ifdef TMC2130
 	  FORCE_HIGH_POWER_START;
 	  FORCE_HIGH_POWER_START;
 	#endif // TMC2130
 	#endif // TMC2130
-	_delay(2000);
+#if !IR_SENSOR_ANALOG
+     _delay(2000);
+#endif //!IR_SENSOR_ANALOG
 	KEEPALIVE_STATE(IN_HANDLER);
 	KEEPALIVE_STATE(IN_HANDLER);
+#if IR_SENSOR_ANALOG
+     bool bAction;
+     bAction=lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is filament unloaded?"),false,true);
+     if(!bAction)
+          return(false);
+#endif //IR_SENSOR_ANALOG
 
 
 	_progress = lcd_selftest_screen(TestScreen::ExtruderFan, _progress, 3, true, 2000);
 	_progress = lcd_selftest_screen(TestScreen::ExtruderFan, _progress, 3, true, 2000);
 #if (defined(FANCHECK) && defined(TACH_0))
 #if (defined(FANCHECK) && defined(TACH_0))
@@ -7545,12 +7684,20 @@ bool lcd_selftest()
         {
         {
 #ifdef PAT9125
 #ifdef PAT9125
 			_progress = lcd_selftest_screen(TestScreen::Fsensor, _progress, 3, true, 2000); //check filaments sensor
 			_progress = lcd_selftest_screen(TestScreen::Fsensor, _progress, 3, true, 2000); //check filaments sensor
-            _result = lcd_selftest_fsensor();
+               _result = lcd_selftest_fsensor();
 			if (_result)
 			if (_result)
 			{
 			{
 				_progress = lcd_selftest_screen(TestScreen::FsensorOk, _progress, 3, true, 2000); //fil sensor OK
 				_progress = lcd_selftest_screen(TestScreen::FsensorOk, _progress, 3, true, 2000); //fil sensor OK
 			}
 			}
 #endif //PAT9125
 #endif //PAT9125
+#if IR_SENSOR_ANALOG
+			_progress = lcd_selftest_screen(TestScreen::Fsensor, _progress, 3, true, 2000); //check filament sensor
+               _result = lcd_selftest_IRsensor();
+			if (_result)
+			{
+				_progress = lcd_selftest_screen(TestScreen::FsensorOk, _progress, 3, true, 2000); //filament sensor OK
+			}
+#endif //IR_SENSOR_ANALOG
         }
         }
     }
     }
 #endif //FILAMENT_SENSOR
 #endif //FILAMENT_SENSOR
@@ -8086,11 +8233,17 @@ static void lcd_selftest_error(TestError testError, const char *_error_1, const
 		lcd_puts_P(_T(MSG_SELFTEST_WIRINGERROR));
 		lcd_puts_P(_T(MSG_SELFTEST_WIRINGERROR));
 		break;
 		break;
 	case TestError::TriggeringFsensor:
 	case TestError::TriggeringFsensor:
-	    lcd_set_cursor(0, 2);
-        lcd_puts_P(_T(MSG_SELFTEST_FILAMENT_SENSOR));
-        lcd_set_cursor(0, 3);
-        lcd_puts_P(_i("False triggering"));////c=20
-        break;
+          lcd_set_cursor(0, 2);
+          lcd_puts_P(_T(MSG_SELFTEST_FILAMENT_SENSOR));
+          lcd_set_cursor(0, 3);
+          lcd_puts_P(_i("False triggering"));////c=20
+          break;
+	case TestError::FsensorLevel:
+          lcd_set_cursor(0, 2);
+          lcd_puts_P(_T(MSG_SELFTEST_FILAMENT_SENSOR));
+          lcd_set_cursor(0, 3);
+          lcd_printf_P(_i("%s level expected"),_error_1);////c=20
+          break;
 	}
 	}
 
 
 	_delay(1000);
 	_delay(1000);

+ 11 - 0
Firmware/ultralcd.h

@@ -7,6 +7,8 @@
 #include "menu.h"
 #include "menu.h"
 #include "mesh_bed_calibration.h"
 #include "mesh_bed_calibration.h"
 
 
+#include "config.h"
+
 extern void menu_lcd_longpress_func(void);
 extern void menu_lcd_longpress_func(void);
 extern void menu_lcd_charsetup_func(void);
 extern void menu_lcd_charsetup_func(void);
 extern void menu_lcd_lcdupdate_func(void);
 extern void menu_lcd_lcdupdate_func(void);
@@ -47,6 +49,7 @@ unsigned char lcd_choose_color();
 void lcd_load_filament_color_check();
 void lcd_load_filament_color_check();
 //void lcd_mylang();
 //void lcd_mylang();
 
 
+extern void lcd_belttest();
 extern bool lcd_selftest();
 extern bool lcd_selftest();
 
 
 void lcd_menu_statistics(); 
 void lcd_menu_statistics(); 
@@ -244,4 +247,12 @@ enum class WizState : uint8_t
 
 
 void lcd_wizard(WizState state);
 void lcd_wizard(WizState state);
 
 
+#define VOLT_DIV_REF 5
+#if IR_SENSOR_ANALOG
+#define IRsensor_Hmin_TRESHOLD (3.0*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~3.0V (0.6*Vcc)
+#define IRsensor_Lmax_TRESHOLD (1.5*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~1.5V (0.3*Vcc)
+#define IRsensor_Hopen_TRESHOLD (4.6*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~4.6V (N.C. @ Ru~20-50k, Rd'=56k, Ru'=10k)
+#define IRsensor_Ldiode_TRESHOLD (0.3*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~0.3V
+#endif //IR_SENSOR_ANALOG
+
 #endif //ULTRALCD_H
 #endif //ULTRALCD_H

+ 71 - 141
lang/lang_en.txt

@@ -37,14 +37,8 @@
 #MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
 #MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
 "Are left and right Z~carriages all up?"
 "Are left and right Z~carriages all up?"
 
 
-#MSG_AUTO_DEPLETE_ON c=17 r=1
-"SpoolJoin    [on]"
-
-#
-"SpoolJoin   [N/A]"
-
-#MSG_AUTO_DEPLETE_OFF c=17 r=1
-"SpoolJoin   [off]"
+#MSG_AUTO_DEPLETE c=17 r=1
+"SpoolJoin"
 
 
 #MSG_AUTO_HOME
 #MSG_AUTO_HOME
 "Auto home"
 "Auto home"
@@ -130,18 +124,11 @@
 #
 #
 "Copy selected language?"
 "Copy selected language?"
 
 
-#MSG_CRASHDETECT_ON
-"Crash det.   [on]"
-
+#MSG_CRASHDETECT
+"Crash det."
 #
 #
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 
 
-#MSG_CRASHDETECT_NA
-"Crash det.  [N/A]"
-
-#MSG_CRASHDETECT_OFF
-"Crash det.  [off]"
-
 #MSG_CRASH_DETECTED c=20 r=1
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
 "Crash detected."
 
 
@@ -205,14 +192,8 @@
 #
 #
 "Fail stats MMU"
 "Fail stats MMU"
 
 
-#MSG_FSENS_AUTOLOAD_ON c=17 r=1
-"F. autoload  [on]"
-
-#MSG_FSENS_AUTOLOAD_NA c=17 r=1
-"F. autoload [N/A]"
-
-#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
-"F. autoload [off]"
+#MSG_FSENSOR_AUTOLOAD
+"F. autoload"
 
 
 #
 #
 "Fail stats"
 "Fail stats"
@@ -223,20 +204,11 @@
 #MSG_SELFTEST_FAN c=20
 #MSG_SELFTEST_FAN c=20
 "Fan test"
 "Fan test"
 
 
-#MSG_FANS_CHECK_ON c=17 r=1
-"Fans check   [on]"
-
-#MSG_FANS_CHECK_OFF c=17 r=1
-"Fans check  [off]"
-
-#MSG_FSENSOR_ON
-"Fil. sensor  [on]"
-
-#MSG_FSENSOR_NA
-"Fil. sensor [N/A]"
+#MSG_FANS_CHECK
+"Fans check"
 
 
-#MSG_FSENSOR_OFF
-"Fil. sensor [off]"
+#MSG_FSENSOR
+"Fil. sensor"
 
 
 #
 #
 "Filam. runouts"
 "Filam. runouts"
@@ -433,11 +405,14 @@
 #MSG_MMU_OK_RESUMING c=20 r=4
 #MSG_MMU_OK_RESUMING c=20 r=4
 "MMU OK. Resuming..."
 "MMU OK. Resuming..."
 
 
-#MSG_STEALTH_MODE_OFF
-"Mode     [Normal]"
+#MSG_MODE
+"Mode"
 
 
-#MSG_SILENT_MODE_ON
-"Mode     [silent]"
+#MSG_NORMAL
+"Normal"
+
+#MSG_SILENT
+"Silent"
 
 
 #
 #
 "MMU needs user attention."
 "MMU needs user attention."
@@ -445,14 +420,14 @@
 #
 #
 "MMU power fails"
 "MMU power fails"
 
 
-#MSG_STEALTH_MODE_ON
-"Mode    [Stealth]"
+#MSG_STEALTH
+"Stealth"
 
 
-#MSG_AUTO_MODE_ON
-"Mode [auto power]"
+#MSG_AUTO_POWER
+"Auto power"
 
 
-#MSG_SILENT_MODE_OFF
-"Mode [high power]"
+#MSG_HIGH_POWER
+"High power"
 
 
 #
 #
 "MMU2 connected"
 "MMU2 connected"
@@ -478,7 +453,7 @@
 #MSG_NO_CARD
 #MSG_NO_CARD
 "No SD card"
 "No SD card"
 
 
-#
+#MSG_NA
 "N/A"
 "N/A"
 
 
 #MSG_NO
 #MSG_NO
@@ -658,20 +633,17 @@
 #MSG_BED_CORRECTION_RIGHT c=14 r=1
 #MSG_BED_CORRECTION_RIGHT c=14 r=1
 "Right side[um]"
 "Right side[um]"
 
 
-#MSG_SECOND_SERIAL_ON c=17 r=1
-"RPi port     [on]"
-
-#MSG_SECOND_SERIAL_OFF c=17 r=1
-"RPi port    [off]"
+#MSG_RPI_PORT
+"RPi port"
 
 
 #MSG_WIZARD_RERUN c=20 r=7
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
-"SD card  [normal]"
+#MSG_SD_CARD
+"SD card"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
-"SD card [flshAir]"
+#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
+"FlashAir"
 
 
 #
 #
 "Right"
 "Right"
@@ -718,38 +690,38 @@
 #MSG_FILE_CNT c=20 r=4
 #MSG_FILE_CNT c=20 r=4
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 
 
-#MSG_SORT_NONE c=17 r=1
-"Sort       [none]"
+#MSG_SORT
+"Sort"
 
 
-#MSG_SORT_TIME c=17 r=1
-"Sort       [time]"
+#MSG_NONE
+"None"
+
+#MSG_SORT_TIME
+"Time"
 
 
 #
 #
 "Severe skew:"
 "Severe skew:"
 
 
-#MSG_SORT_ALPHA c=17 r=1
-"Sort   [alphabet]"
+#MSG_SORT_ALPHA
+"Alphabet"
 
 
 #MSG_SORTING c=20 r=1
 #MSG_SORTING c=20 r=1
 "Sorting files"
 "Sorting files"
 
 
-#MSG_SOUND_LOUD c=17 r=1
-"Sound      [loud]"
+#MSG_SOUND_LOUD
+"Loud"
 
 
 #
 #
 "Slight skew:"
 "Slight skew:"
 
 
-#MSG_SOUND_MUTE c=17 r=1
-"Sound      [mute]"
+#MSG_SOUND
+"Sound"
 
 
 #
 #
 "Some problem encountered, Z-leveling enforced ..."
 "Some problem encountered, Z-leveling enforced ..."
 
 
-#MSG_SOUND_ONCE c=17 r=1
-"Sound      [once]"
-
-#MSG_SOUND_SILENT c=17 r=1
-"Sound    [silent]"
+#MSG_SOUND_ONCE
+"Once"
 
 
 #MSG_SPEED
 #MSG_SPEED
 "Speed"
 "Speed"
@@ -778,18 +750,12 @@
 #
 #
 "Select filament:"
 "Select filament:"
 
 
-#MSG_TEMP_CALIBRATION c=20 r=1
-"Temp. cal.          "
-
-#MSG_TEMP_CALIBRATION_ON c=20 r=1
-"Temp. cal.   [on]"
+#MSG_TEMP_CALIBRATION c=12 r=1
+"Temp. cal."
 
 
 #
 #
 "Select temperature which matches your material."
 "Select temperature which matches your material."
 
 
-#MSG_TEMP_CALIBRATION_OFF c=20 r=1
-"Temp. cal.  [off]"
-
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 "Temp. calibration"
 "Temp. calibration"
 
 
@@ -929,7 +895,10 @@
 "Y-correct:"
 "Y-correct:"
 
 
 #MSG_OFF
 #MSG_OFF
-" [off]"
+"Off"
+
+#MSG_ON
+"On"
 
 
 #
 #
 "Back"
 "Back"
@@ -943,14 +912,14 @@
 #
 #
 "FINDA:"
 "FINDA:"
 
 
-#
-"Firmware   [none]"
+#MSG_FIRMWARE
+"Firmware"
 
 
-#
-"Firmware [strict]"
+#MSG_STRICT
+"Strict"
 
 
-#
-"Firmware   [warn]"
+#MSG_WARN
+"Warn"
 
 
 #
 #
 "HW Setup"
 "HW Setup"
@@ -958,20 +927,11 @@
 #
 #
 "IR:"
 "IR:"
 
 
-#
-"Magnets comp.[N/A]"
-
-#
-"Magnets comp.[Off]"
+#MSG_MAGNETS_COMP
+"Magnets comp."
 
 
-#
-"Magnets comp. [On]"
-
-#
-"Mesh         [3x3]"
-
-#
-"Mesh         [7x7]"
+#MSG_MESH
+"Mesh"
 
 
 #
 #
 "Mesh bed leveling"
 "Mesh bed leveling"
@@ -979,41 +939,17 @@
 #
 #
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detected on MK3 printer"
 
 
-#
-"MMU Mode [Normal]"
-
-#
-"MMU Mode[Stealth]"
+#MSG_MMU_MODE
+"MMU Mode"
 
 
 #
 #
 "Mode change in progress ..."
 "Mode change in progress ..."
 
 
-#
-"Model      [none]"
-
-#
-"Model    [strict]"
-
-#
-"Model      [warn]"
+#MSG_MODEL
+"Model"
 
 
-#
-"Nozzle d.  [0.25]"
-
-#
-"Nozzle d.  [0.40]"
-
-#
-"Nozzle d.  [0.60]"
-
-#
-"Nozzle     [none]"
-
-#
-"Nozzle   [strict]"
-
-#
-"Nozzle     [warn]"
+#MSG_NOZZLE_DIAMETER
+"Nozzle d."
 
 
 #
 #
 "G-code sliced for a different level. Continue?"
 "G-code sliced for a different level. Continue?"
@@ -1060,8 +996,8 @@
 #
 #
 "Sheet"
 "Sheet"
 
 
-#
-"Sound    [assist]"
+#MSG_SOUND_BLIND
+"Assist"
 
 
 #
 #
 "Steel sheets"
 "Steel sheets"
@@ -1069,11 +1005,5 @@
 #
 #
 "Z-correct:"
 "Z-correct:"
 
 
-#
-"Z-probe nr.    [1]"
-
-#
-"Z-probe nr.    [3]"
-
-#
-"Z-probe nr.    [5]"
+#MSG_Z_PROBE_NR
+"Z-probe nr."

+ 104 - 196
lang/lang_en_cz.txt

@@ -50,18 +50,10 @@
 "Are left and right Z~carriages all up?"
 "Are left and right Z~carriages all up?"
 "Dojely oba Z voziky k~hornimu dorazu?"
 "Dojely oba Z voziky k~hornimu dorazu?"
 
 
-#MSG_AUTO_DEPLETE_ON c=17 r=1
-"SpoolJoin    [on]"
-"SpoolJoin   [zap]"
-
-#
-"SpoolJoin   [N/A]"
+#MSG_AUTO_DEPLETE c=17 r=1
+"SpoolJoin"
 "\x00"
 "\x00"
 
 
-#MSG_AUTO_DEPLETE_OFF c=17 r=1
-"SpoolJoin   [off]"
-"SpoolJoin   [vyp]"
-
 #MSG_AUTO_HOME
 #MSG_AUTO_HOME
 "Auto home"
 "Auto home"
 "\x00"
 "\x00"
@@ -174,21 +166,13 @@
 "Copy selected language?"
 "Copy selected language?"
 "Kopirovat vybrany jazyk?"
 "Kopirovat vybrany jazyk?"
 
 
-#MSG_CRASHDETECT_ON
-"Crash det.   [on]"
-"Crash det.  [zap]"
+#MSG_CRASHDETECT
+"Crash det."
+"\x00"
 
 
 #
 #
-"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Zvolte filament pro kalibraci prvni vrstvy z nasledujiciho menu"
 "Zvolte filament pro kalibraci prvni vrstvy z nasledujiciho menu"
-
-#MSG_CRASHDETECT_NA
-"Crash det.  [N/A]"
-"\x00"
-
-#MSG_CRASHDETECT_OFF
-"Crash det.  [off]"
-"Crash det.  [vyp]"
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 
 
 #MSG_CRASH_DETECTED c=20 r=1
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
 "Crash detected."
@@ -274,17 +258,9 @@
 "Fail stats MMU"
 "Fail stats MMU"
 "Selhani MMU"
 "Selhani MMU"
 
 
-#MSG_FSENS_AUTOLOAD_ON c=17 r=1
-"F. autoload  [on]"
-"F. autozav. [zap]"
-
-#MSG_FSENS_AUTOLOAD_NA c=17 r=1
-"F. autoload [N/A]"
-"F. autozav. [N/A]"
-
-#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
-"F. autoload [off]"
-"F. autozav. [vyp]"
+#MSG_FSENSOR_AUTOLOAD
+"F. autoload"
+"F. autozav."
 
 
 #
 #
 "Fail stats"
 "Fail stats"
@@ -298,25 +274,13 @@
 "Fan test"
 "Fan test"
 "Test ventilatoru"
 "Test ventilatoru"
 
 
-#MSG_FANS_CHECK_ON c=17 r=1
-"Fans check   [on]"
-"Kontr. vent.[zap]"
-
-#MSG_FANS_CHECK_OFF c=17 r=1
-"Fans check  [off]"
-"Kontr. vent.[vyp]"
-
-#MSG_FSENSOR_ON
-"Fil. sensor  [on]"
-"Fil. senzor [zap]"
+#MSG_FANS_CHECK
+"Fans check"
+"Kontr. vent."
 
 
-#MSG_FSENSOR_NA
-"Fil. sensor [N/A]"
-"Fil. senzor [N/A]"
-
-#MSG_FSENSOR_OFF
-"Fil. sensor [off]"
-"Fil. senzor [vyp]"
+#MSG_FSENSOR
+"Fil. sensor"
+"Fil. senzor"
 
 
 #
 #
 "Filam. runouts"
 "Filam. runouts"
@@ -578,13 +542,17 @@
 "MMU OK. Resuming..."
 "MMU OK. Resuming..."
 "MMU OK. Pokracuji..."
 "MMU OK. Pokracuji..."
 
 
-#MSG_STEALTH_MODE_OFF
-"Mode     [Normal]"
-"Mod      [Normal]"
+#MSG_MODE
+"Mode"
+"Mod"
+
+#MSG_NORMAL
+"Normal"
+"\x00"
 
 
-#MSG_SILENT_MODE_ON
-"Mode     [silent]"
-"Mod       [tichy]"
+#MSG_SILENT
+"Silent"
+"Tichy"
 
 
 #
 #
 "MMU needs user attention."
 "MMU needs user attention."
@@ -594,17 +562,17 @@
 "MMU power fails"
 "MMU power fails"
 "MMU vypadky proudu"
 "MMU vypadky proudu"
 
 
-#MSG_STEALTH_MODE_ON
-"Mode    [Stealth]"
-"Mod       [tichy]"
+#MSG_STEALTH
+"Stealth"
+"Tichy"
 
 
-#MSG_AUTO_MODE_ON
-"Mode [auto power]"
-"Mod [automaticky]"
+#MSG_AUTO_POWER
+"Auto power"
+"Automaticky"
 
 
-#MSG_SILENT_MODE_OFF
-"Mode [high power]"
-"Mod  [vys. vykon]"
+#MSG_HIGH_POWER
+"High power"
+"Vys. vykon"
 
 
 #
 #
 "MMU2 connected"
 "MMU2 connected"
@@ -638,7 +606,7 @@
 "No SD card"
 "No SD card"
 "Zadna SD karta"
 "Zadna SD karta"
 
 
-#
+#MSG_NA
 "N/A"
 "N/A"
 "\x00"
 "\x00"
 
 
@@ -878,25 +846,21 @@
 "Right side[um]"
 "Right side[um]"
 "Vpravo [um]"
 "Vpravo [um]"
 
 
-#MSG_SECOND_SERIAL_ON c=17 r=1
-"RPi port     [on]"
-"RPi port    [zap]"
-
-#MSG_SECOND_SERIAL_OFF c=17 r=1
-"RPi port    [off]"
-"RPi port    [vyp]"
+#MSG_RPI_PORT
+"RPi port"
+"\x00"
 
 
 #MSG_WIZARD_RERUN c=20 r=7
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Spusteni Pruvodce vymaze ulozene vysledky vsech kalibraci a spusti kalibracni proces od zacatku. Pokracovat?"
 "Spusteni Pruvodce vymaze ulozene vysledky vsech kalibraci a spusti kalibracni proces od zacatku. Pokracovat?"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
-"SD card  [normal]"
+#MSG_SD_CARD
+"SD card"
 "\x00"
 "\x00"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
-"SD card [flshAir]"
-"SD card [FlshAir]"
+#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
+"FlashAir"
+"\x00"
 
 
 #
 #
 "Right"
 "Right"
@@ -958,49 +922,49 @@
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Nektere soubory nebudou setrideny. Maximalni pocet souboru ve slozce pro setrideni je 100."
 "Nektere soubory nebudou setrideny. Maximalni pocet souboru ve slozce pro setrideni je 100."
 
 
-#MSG_SORT_NONE c=17 r=1
-"Sort       [none]"
-"Trideni   [Zadne]"
+#MSG_SORT
+"Sort"
+"Trideni"
+
+#MSG_NONE
+"None"
+"Zadne"
 
 
-#MSG_SORT_TIME c=17 r=1
-"Sort       [time]"
-"Trideni     [cas]"
+#MSG_SORT_TIME
+"Time"
+"Cas"
 
 
 #
 #
 "Severe skew:"
 "Severe skew:"
 "Tezke zkoseni:"
 "Tezke zkoseni:"
 
 
-#MSG_SORT_ALPHA c=17 r=1
-"Sort   [alphabet]"
-"Trideni [Abeceda]"
+#MSG_SORT_ALPHA
+"Alphabet"
+"Abeceda"
 
 
 #MSG_SORTING c=20 r=1
 #MSG_SORTING c=20 r=1
 "Sorting files"
 "Sorting files"
 "Trideni souboru"
 "Trideni souboru"
 
 
-#MSG_SOUND_LOUD c=17 r=1
-"Sound      [loud]"
-"Zvuk    [hlasity]"
+#MSG_SOUND_LOUD
+"Loud"
+"Hlasity"
 
 
 #
 #
 "Slight skew:"
 "Slight skew:"
 "Lehke zkoseni:"
 "Lehke zkoseni:"
 
 
-#MSG_SOUND_MUTE c=17 r=1
-"Sound      [mute]"
-"Zvuk    [vypnuto]"
+#MSG_SOUND
+"Sound"
+"Zvuk"
 
 
 #
 #
 "Some problem encountered, Z-leveling enforced ..."
 "Some problem encountered, Z-leveling enforced ..."
 "Vyskytl se problem, srovnavam osu Z ..."
 "Vyskytl se problem, srovnavam osu Z ..."
 
 
-#MSG_SOUND_ONCE c=17 r=1
-"Sound      [once]"
-"Zvuk     [jednou]"
-
-#MSG_SOUND_SILENT c=17 r=1
-"Sound    [silent]"
-"Zvuk      [tichy]"
+#MSG_SOUND_ONCE
+"Once"
+"Jednou"
 
 
 #MSG_SPEED
 #MSG_SPEED
 "Speed"
 "Speed"
@@ -1038,22 +1002,14 @@
 "Select filament:"
 "Select filament:"
 "Zvolte filament:"
 "Zvolte filament:"
 
 
-#MSG_TEMP_CALIBRATION c=20 r=1
-"Temp. cal.          "
-"Tepl. kal. "
-
-#MSG_TEMP_CALIBRATION_ON c=20 r=1
-"Temp. cal.   [on]"
-"Tepl. kal.  [zap]"
+#MSG_TEMP_CALIBRATION c=12 r=1
+"Temp. cal."
+"Tepl. kal."
 
 
 #
 #
 "Select temperature which matches your material."
 "Select temperature which matches your material."
 "Zvolte teplotu, ktera odpovida vasemu materialu."
 "Zvolte teplotu, ktera odpovida vasemu materialu."
 
 
-#MSG_TEMP_CALIBRATION_OFF c=20 r=1
-"Temp. cal.  [off]"
-"Tepl. kal.  [vyp]"
-
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 "Temp. calibration"
 "Temp. calibration"
 "Teplot. kalibrace"
 "Teplot. kalibrace"
@@ -1239,8 +1195,12 @@
 "Korekce Y:"
 "Korekce Y:"
 
 
 #MSG_OFF
 #MSG_OFF
-" [off]"
-" [vyp]"
+"Off"
+"Vyp"
+
+#MSG_ON
+"On"
+"Zap"
 
 
 #
 #
 "Back"
 "Back"
@@ -1258,17 +1218,17 @@
 "FINDA:"
 "FINDA:"
 "\x00"
 "\x00"
 
 
-#
-"Firmware   [none]"
-"Firmware  [Zadne]"
+#MSG_FIRMWARE
+"Firmware"
+"\x00"
 
 
-#
-"Firmware [strict]"
-"Firmware [Prisne]"
+#MSG_STRICT
+"Strict"
+"Prisne"
 
 
-#
-"Firmware   [warn]"
-"Firmware[Varovat]"
+#MSG_WARN
+"Warn"
+"Varovat"
 
 
 #
 #
 "HW Setup"
 "HW Setup"
@@ -1278,25 +1238,13 @@
 "IR:"
 "IR:"
 "\x00"
 "\x00"
 
 
-#
-"Magnets comp.[N/A]"
-"Komp. magnetu[N/A]"
-
-#
-"Magnets comp.[Off]"
-"Komp. magnetu[Vyp]"
+#MSG_MAGNETS_COMP
+"Magnets comp."
+"Komp. magnetu"
 
 
-#
-"Magnets comp. [On]"
-"Komp. magnetu[Zap]"
-
-#
-"Mesh         [3x3]"
-"Mesh         [3x3]"
-
-#
-"Mesh         [7x7]"
-"Mesh         [7x7]"
+#MSG_MESH
+"Mesh"
+"\x00"
 
 
 #
 #
 "Mesh bed leveling"
 "Mesh bed leveling"
@@ -1306,53 +1254,21 @@
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detekovan na tiskarne MK3"
 "MK3S firmware detekovan na tiskarne MK3"
 
 
-#
-"MMU Mode [Normal]"
-"MMU mod  [Normal]"
-
-#
-"MMU Mode[Stealth]"
-"MMU Mod   [Tichy]"
+#MSG_MMU_MODE
+"MMU Mode"
+"MMU mod"
 
 
 #
 #
 "Mode change in progress ..."
 "Mode change in progress ..."
 "Probiha zmena modu..."
 "Probiha zmena modu..."
 
 
-#
-"Model      [none]"
-"Model     [Zadne]"
-
-#
-"Model    [strict]"
-"Model    [Prisne]"
-
-#
-"Model      [warn]"
-"Model   [Varovat]"
-
-#
-"Nozzle d.  [0.25]"
-"Tryska     [0.25]"
-
-#
-"Nozzle d.  [0.40]"
-"Tryska     [0.40]"
-
-#
-"Nozzle d.  [0.60]"
-"Tryska     [0.60]"
-
-#
-"Nozzle     [none]"
-"Tryska    [Zadne]"
-
-#
-"Nozzle   [strict]"
-"Tryska   [Prisne]"
+#MSG_MODEL
+"Model"
+"\x00"
 
 
-#
-"Nozzle     [warn]"
-"Tryska  [Varovat]"
+#MSG_NOZZLE_DIAMETER
+"Nozzle d."
+"Tryska"
 
 
 #
 #
 "G-code sliced for a different level. Continue?"
 "G-code sliced for a different level. Continue?"
@@ -1414,9 +1330,9 @@
 "Sheet"
 "Sheet"
 "Plat"
 "Plat"
 
 
-#
-"Sound    [assist]"
-"Zvuk     [Asist.]"
+#MSG_SOUND_BLIND
+"Assist"
+"Asist."
 
 
 #
 #
 "Steel sheets"
 "Steel sheets"
@@ -1426,14 +1342,6 @@
 "Z-correct:"
 "Z-correct:"
 "Korekce Z:"
 "Korekce Z:"
 
 
-#
-"Z-probe nr.    [1]"
-"Pocet mereni Z [1]"
-
-#
-"Z-probe nr.    [3]"
-"Pocet mereni Z [3]"
-
-#
-"Z-probe nr.    [5]"
-"Pocet mereni Z [5]"
+#MSG_Z_PROBE_NR
+"Z-probe nr."
+"Pocet mereni Z"

+ 106 - 198
lang/lang_en_de.txt

@@ -50,17 +50,9 @@
 "Are left and right Z~carriages all up?"
 "Are left and right Z~carriages all up?"
 "Sind linke+rechte Z- Schlitten ganz oben?"
 "Sind linke+rechte Z- Schlitten ganz oben?"
 
 
-#MSG_AUTO_DEPLETE_ON c=17 r=1
-"SpoolJoin    [on]"
-"SpoolJoin    [an]"
-
-#
-"SpoolJoin   [N/A]"
-"SpoolJoin   [N/V]"
-
-#MSG_AUTO_DEPLETE_OFF c=17 r=1
-"SpoolJoin   [off]"
-"SpoolJoin   [aus]"
+#MSG_AUTO_DEPLETE c=17 r=1
+"SpoolJoin"
+"\x00"
 
 
 #MSG_AUTO_HOME
 #MSG_AUTO_HOME
 "Auto home"
 "Auto home"
@@ -174,22 +166,14 @@
 "Copy selected language?"
 "Copy selected language?"
 "Gewaehlte Sprache kopieren?"
 "Gewaehlte Sprache kopieren?"
 
 
-#MSG_CRASHDETECT_ON
-"Crash det.   [on]"
-"Crash Erk.   [an]"
+#MSG_CRASHDETECT
+"Crash det."
+"Crash Erk."
 
 
 #
 #
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Waehlen Sie ein Filament fuer Erste Schichtkalibrierung aus und waehlen Sie es im On-Screen-Menu aus."
 "Waehlen Sie ein Filament fuer Erste Schichtkalibrierung aus und waehlen Sie es im On-Screen-Menu aus."
 
 
-#MSG_CRASHDETECT_NA
-"Crash det.  [N/A]"
-"Crash Erk.   [nv]"
-
-#MSG_CRASHDETECT_OFF
-"Crash det.  [off]"
-"Crash Erk.  [aus]"
-
 #MSG_CRASH_DETECTED c=20 r=1
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
 "Crash detected."
 "Crash erkannt."
 "Crash erkannt."
@@ -274,17 +258,9 @@
 "Fail stats MMU"
 "Fail stats MMU"
 "MMU-Fehler"
 "MMU-Fehler"
 
 
-#MSG_FSENS_AUTOLOAD_ON c=17 r=1
-"F. autoload  [on]"
-"F.Autoladen  [an]"
-
-#MSG_FSENS_AUTOLOAD_NA c=17 r=1
-"F. autoload [N/A]"
-"F. Autoload  [nv]"
-
-#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
-"F. autoload [off]"
-"F. Autoload [aus]"
+#MSG_FSENSOR_AUTOLOAD
+"F. autoload"
+"F. autoladen"
 
 
 #
 #
 "Fail stats"
 "Fail stats"
@@ -298,25 +274,13 @@
 "Fan test"
 "Fan test"
 "Lueftertest"
 "Lueftertest"
 
 
-#MSG_FANS_CHECK_ON c=17 r=1
-"Fans check   [on]"
-"Luefter Chk. [an]"
-
-#MSG_FANS_CHECK_OFF c=17 r=1
-"Fans check  [off]"
-"Luefter Chk.[aus]"
+#MSG_FANS_CHECK
+"Fans check"
+"Luefter Chk."
 
 
-#MSG_FSENSOR_ON
-"Fil. sensor  [on]"
-"Fil. Sensor  [an]"
-
-#MSG_FSENSOR_NA
-"Fil. sensor [N/A]"
-"Fil. Sensor  [nv]"
-
-#MSG_FSENSOR_OFF
-"Fil. sensor [off]"
-"Fil. Sensor [aus]"
+#MSG_FSENSOR
+"Fil. sensor"
+"\x00"
 
 
 #
 #
 "Filam. runouts"
 "Filam. runouts"
@@ -578,13 +542,17 @@
 "MMU OK. Resuming..."
 "MMU OK. Resuming..."
 "MMU OK.  Weiterdrucken..."
 "MMU OK.  Weiterdrucken..."
 
 
-#MSG_STEALTH_MODE_OFF
-"Mode     [Normal]"
-"Modus    [Normal]"
+#MSG_MODE
+"Mode"
+"Modus"
+
+#MSG_NORMAL
+"Normal"
+"\x00"
 
 
-#MSG_SILENT_MODE_ON
-"Mode     [silent]"
-"Modus     [leise]"
+#MSG_SILENT
+"Silent"
+"Leise"
 
 
 #
 #
 "MMU needs user attention."
 "MMU needs user attention."
@@ -594,17 +562,17 @@
 "MMU power fails"
 "MMU power fails"
 "MMU Netzfehler"
 "MMU Netzfehler"
 
 
-#MSG_STEALTH_MODE_ON
-"Mode    [Stealth]"
-"Modus   [Stealth]"
+#MSG_STEALTH
+"Stealth"
+"\x00"
 
 
-#MSG_AUTO_MODE_ON
-"Mode [auto power]"
-"Modus[Auto Power]"
+#MSG_AUTO_POWER
+"Auto power"
+"\x00"
 
 
-#MSG_SILENT_MODE_OFF
-"Mode [high power]"
-"Modus[Hohe Leist]"
+#MSG_HIGH_POWER
+"High power"
+"Hohe leist"
 
 
 #
 #
 "MMU2 connected"
 "MMU2 connected"
@@ -638,9 +606,9 @@
 "No SD card"
 "No SD card"
 "Keine SD Karte"
 "Keine SD Karte"
 
 
-#
+#MSG_NA
 "N/A"
 "N/A"
-"N.V."
+"N/V"
 
 
 #MSG_NO
 #MSG_NO
 "No"
 "No"
@@ -878,25 +846,21 @@
 "Right side[um]"
 "Right side[um]"
 "Rechts [um]"
 "Rechts [um]"
 
 
-#MSG_SECOND_SERIAL_ON c=17 r=1
-"RPi port     [on]"
-"RPi Port     [an]"
-
-#MSG_SECOND_SERIAL_OFF c=17 r=1
-"RPi port    [off]"
-"RPi Port    [aus]"
+#MSG_RPI_PORT
+"RPi port"
+"\x00"
 
 
 #MSG_WIZARD_RERUN c=20 r=7
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Der Assistent wird die aktuellen Kalibrierungsdaten loeschen und von vorne beginnen. Weiterfahren?"
 "Der Assistent wird die aktuellen Kalibrierungsdaten loeschen und von vorne beginnen. Weiterfahren?"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
-"SD card  [normal]"
-"SD Karte [normal]"
+#MSG_SD_CARD
+"SD card"
+"SD Karte"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
-"SD card [flshAir]"
-"SD Karte[flshAir]"
+#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
+"FlashAir"
+"\x00"
 
 
 #
 #
 "Right"
 "Right"
@@ -958,49 +922,49 @@
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Einige Dateien wur- den nicht sortiert. Max. Dateien pro Verzeichnis = 100."
 "Einige Dateien wur- den nicht sortiert. Max. Dateien pro Verzeichnis = 100."
 
 
-#MSG_SORT_NONE c=17 r=1
-"Sort       [none]"
-"Sort.      [ohne]"
+#MSG_SORT
+"Sort"
+"Sort."
+
+#MSG_NONE
+"None"
+"Ohne"
 
 
-#MSG_SORT_TIME c=17 r=1
-"Sort       [time]"
-"Sort.      [Zeit]"
+#MSG_SORT_TIME
+"Time"
+"Zeit"
 
 
 #
 #
 "Severe skew:"
 "Severe skew:"
 "Schwer.Schr:"
 "Schwer.Schr:"
 
 
-#MSG_SORT_ALPHA c=17 r=1
-"Sort   [alphabet]"
-"Sort.  [Alphabet]"
+#MSG_SORT_ALPHA
+"Alphabet"
+"\x00"
 
 
 #MSG_SORTING c=20 r=1
 #MSG_SORTING c=20 r=1
 "Sorting files"
 "Sorting files"
 "Sortiere Dateien"
 "Sortiere Dateien"
 
 
-#MSG_SOUND_LOUD c=17 r=1
-"Sound      [loud]"
-"Sound      [laut]"
+#MSG_SOUND_LOUD
+"Loud"
+"Laut"
 
 
 #
 #
 "Slight skew:"
 "Slight skew:"
 "Leicht.Schr:"
 "Leicht.Schr:"
 
 
-#MSG_SOUND_MUTE c=17 r=1
-"Sound      [mute]"
-"Sound     [stumm]"
+#MSG_SOUND
+"Sound"
+"\x00"
 
 
 #
 #
 "Some problem encountered, Z-leveling enforced ..."
 "Some problem encountered, Z-leveling enforced ..."
 "Fehler aufgetreten, Z-Kalibrierung erforderlich..."
 "Fehler aufgetreten, Z-Kalibrierung erforderlich..."
 
 
-#MSG_SOUND_ONCE c=17 r=1
-"Sound      [once]"
-"Sound    [einmal]"
-
-#MSG_SOUND_SILENT c=17 r=1
-"Sound    [silent]"
-"Sound     [leise]"
+#MSG_SOUND_ONCE
+"Once"
+"Einmal"
 
 
 #MSG_SPEED
 #MSG_SPEED
 "Speed"
 "Speed"
@@ -1038,22 +1002,14 @@
 "Select filament:"
 "Select filament:"
 "Filament auswaehlen:"
 "Filament auswaehlen:"
 
 
-#MSG_TEMP_CALIBRATION c=20 r=1
-"Temp. cal.          "
-"Temp Kalib.         "
-
-#MSG_TEMP_CALIBRATION_ON c=20 r=1
-"Temp. cal.   [on]"
-"Temp. Kal.   [an]"
+#MSG_TEMP_CALIBRATION c=12 r=1
+"Temp. cal."
+"Temp Kalib."
 
 
 #
 #
 "Select temperature which matches your material."
 "Select temperature which matches your material."
 "Waehlen Sie die Temperatur, die zu Ihrem Material passt."
 "Waehlen Sie die Temperatur, die zu Ihrem Material passt."
 
 
-#MSG_TEMP_CALIBRATION_OFF c=20 r=1
-"Temp. cal.  [off]"
-"Temp. Kal.  [aus]"
-
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 "Temp. calibration"
 "Temp. calibration"
 "Temp. kalibrieren"
 "Temp. kalibrieren"
@@ -1239,8 +1195,12 @@
 "Y-Korrektur:"
 "Y-Korrektur:"
 
 
 #MSG_OFF
 #MSG_OFF
-" [off]"
-" [aus]"
+"Off"
+"Aus"
+
+#MSG_ON
+"On"
+"An"
 
 
 #
 #
 "Back"
 "Back"
@@ -1258,17 +1218,17 @@
 "FINDA:"
 "FINDA:"
 "\x00"
 "\x00"
 
 
-#
-"Firmware   [none]"
-"Firmware   [ohne]"
+#MSG_FIRMWARE
+"Firmware"
+"\x00"
 
 
-#
-"Firmware [strict]"
-"Firmware [strikt]"
+#MSG_STRICT
+"Strict"
+"Strikt"
 
 
-#
-"Firmware   [warn]"
-"Firmware [warnen]"
+#MSG_WARN
+"Warn"
+"Warnen"
 
 
 #
 #
 "HW Setup"
 "HW Setup"
@@ -1278,25 +1238,13 @@
 "IR:"
 "IR:"
 "\x00"
 "\x00"
 
 
-#
-"Magnets comp.[N/A]"
-"Magnet Komp.  [nv]"
-
-#
-"Magnets comp.[Off]"
-"Magnet Komp. [Aus]"
+#MSG_MAGNETS_COMP
+"Magnets comp."
+"Magnet Komp."
 
 
-#
-"Magnets comp. [On]"
-"Magnet Komp.  [An]"
-
-#
-"Mesh         [3x3]"
-"Gitter       [3x3]"
-
-#
-"Mesh         [7x7]"
-"Gitter       [7x7]"
+#MSG_MESH
+"Mesh"
+"Gitter"
 
 
 #
 #
 "Mesh bed leveling"
 "Mesh bed leveling"
@@ -1306,53 +1254,21 @@
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detected on MK3 printer"
 "MK3S-Firmware auf MK3-Drucker erkannt"
 "MK3S-Firmware auf MK3-Drucker erkannt"
 
 
-#
-"MMU Mode [Normal]"
-"MMU Modus[Normal]"
-
-#
-"MMU Mode[Stealth]"
-"MMU Mod.[Stealth]"
+#MSG_MMU_MODE
+"MMU Mode"
+"MMU Modus"
 
 
 #
 #
 "Mode change in progress ..."
 "Mode change in progress ..."
 "Moduswechsel erfolgt..."
 "Moduswechsel erfolgt..."
 
 
-#
-"Model      [none]"
-"Modell     [ohne]"
-
-#
-"Model    [strict]"
-"Modell   [strikt]"
-
-#
-"Model      [warn]"
-"Modell   [warnen]"
-
-#
-"Nozzle d.  [0.25]"
-"Duese D.   [0.25]"
+#MSG_MODEL
+"Model"
+"Modell"
 
 
-#
-"Nozzle d.  [0.40]"
-"Duese D.   [0.40]"
-
-#
-"Nozzle d.  [0.60]"
-"Duese D.   [0.60]"
-
-#
-"Nozzle     [none]"
-"Duese      [ohne]"
-
-#
-"Nozzle   [strict]"
-"Duese    [strikt]"
-
-#
-"Nozzle     [warn]"
-"Duese    [warnen]"
+#MSG_NOZZLE_DIAMETER
+"Nozzle d."
+"Duese D."
 
 
 #
 #
 "G-code sliced for a different level. Continue?"
 "G-code sliced for a different level. Continue?"
@@ -1414,9 +1330,9 @@
 "Sheet"
 "Sheet"
 "Blech"
 "Blech"
 
 
-#
-"Sound    [assist]"
-"Sound    [Assist]"
+#MSG_SOUND_BLIND
+"Assist"
+"\x00"
 
 
 #
 #
 "Steel sheets"
 "Steel sheets"
@@ -1426,14 +1342,6 @@
 "Z-correct:"
 "Z-correct:"
 "Z-Korrektur:"
 "Z-Korrektur:"
 
 
-#
-"Z-probe nr.    [1]"
-"Z-Probe Nr.    [1]"
-
-#
-"Z-probe nr.    [3]"
-"Z-Probe Nr.    [3]"
-
-#
-"Z-probe nr.    [5]"
-"Z-Probe Nr.    [5]"
+#MSG_Z_PROBE_NR
+"Z-probe nr."
+"\x00"

+ 104 - 196
lang/lang_en_es.txt

@@ -50,16 +50,8 @@
 "Are left and right Z~carriages all up?"
 "Are left and right Z~carriages all up?"
 "Carros Z izq./der. estan arriba maximo?"
 "Carros Z izq./der. estan arriba maximo?"
 
 
-#MSG_AUTO_DEPLETE_ON c=17 r=1
-"SpoolJoin    [on]"
-"\x00"
-
-#
-"SpoolJoin   [N/A]"
-"\x00"
-
-#MSG_AUTO_DEPLETE_OFF c=17 r=1
-"SpoolJoin   [off]"
+#MSG_AUTO_DEPLETE c=17 r=1
+"SpoolJoin"
 "\x00"
 "\x00"
 
 
 #MSG_AUTO_HOME
 #MSG_AUTO_HOME
@@ -174,22 +166,14 @@
 "Copy selected language?"
 "Copy selected language?"
 "Copiar idioma seleccionado?"
 "Copiar idioma seleccionado?"
 
 
-#MSG_CRASHDETECT_ON
-"Crash det.   [on]"
-"Det. choque [act]"
+#MSG_CRASHDETECT
+"Crash det."
+"Det. choque"
 
 
 #
 #
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Escoge un filamento para la Calibracion de la Primera Capa y seleccionalo en el menu en pantalla."
 "Escoge un filamento para la Calibracion de la Primera Capa y seleccionalo en el menu en pantalla."
 
 
-#MSG_CRASHDETECT_NA
-"Crash det.  [N/A]"
-"Dec. choque [N/D]"
-
-#MSG_CRASHDETECT_OFF
-"Crash det.  [off]"
-"Det. choque [ina]"
-
 #MSG_CRASH_DETECTED c=20 r=1
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
 "Crash detected."
 "Choque detectado."
 "Choque detectado."
@@ -274,17 +258,9 @@
 "Fail stats MMU"
 "Fail stats MMU"
 "Estadistica de fallos MMU"
 "Estadistica de fallos MMU"
 
 
-#MSG_FSENS_AUTOLOAD_ON c=17 r=1
-"F. autoload  [on]"
-"Autocarg.Fil[act]"
-
-#MSG_FSENS_AUTOLOAD_NA c=17 r=1
-"F. autoload [N/A]"
-"Autocarg.Fil[N/D]"
-
-#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
-"F. autoload [off]"
-"Autocarg.Fil[ina]"
+#MSG_FSENSOR_AUTOLOAD
+"F. autoload"
+"Autocarg.fil."
 
 
 #
 #
 "Fail stats"
 "Fail stats"
@@ -298,25 +274,13 @@
 "Fan test"
 "Fan test"
 "Test ventiladores"
 "Test ventiladores"
 
 
-#MSG_FANS_CHECK_ON c=17 r=1
-"Fans check   [on]"
-"Comprob.vent[act]"
-
-#MSG_FANS_CHECK_OFF c=17 r=1
-"Fans check  [off]"
-"Comprob.vent[ina]"
-
-#MSG_FSENSOR_ON
-"Fil. sensor  [on]"
-"Sensor Fil. [act]"
-
-#MSG_FSENSOR_NA
-"Fil. sensor [N/A]"
-"Sensor Fil. [N/D]"
+#MSG_FANS_CHECK
+"Fans check"
+"Comprob.vent"
 
 
-#MSG_FSENSOR_OFF
-"Fil. sensor [off]"
-"Sensor Fil. [ina]"
+#MSG_FSENSOR
+"Fil. sensor"
+"Sensor Fil."
 
 
 #
 #
 "Filam. runouts"
 "Filam. runouts"
@@ -578,13 +542,17 @@
 "MMU OK. Resuming..."
 "MMU OK. Resuming..."
 "MMU OK. Resumiendo..."
 "MMU OK. Resumiendo..."
 
 
-#MSG_STEALTH_MODE_OFF
-"Mode     [Normal]"
-"Modo     [Normal]"
+#MSG_MODE
+"Mode"
+"Modo"
 
 
-#MSG_SILENT_MODE_ON
-"Mode     [silent]"
-"Modo   [silencio]"
+#MSG_NORMAL
+"Normal"
+"\x00"
+
+#MSG_SILENT
+"Silent"
+"Silencio"
 
 
 #
 #
 "MMU needs user attention."
 "MMU needs user attention."
@@ -594,17 +562,17 @@
 "MMU power fails"
 "MMU power fails"
 "Fallo de energia en MMU"
 "Fallo de energia en MMU"
 
 
-#MSG_STEALTH_MODE_ON
-"Mode    [Stealth]"
-"Modo   [Silencio]"
+#MSG_STEALTH
+"Stealth"
+"Silencio"
 
 
-#MSG_AUTO_MODE_ON
-"Mode [auto power]"
-"Modo[fuerza auto]"
+#MSG_AUTO_POWER
+"Auto power"
+"Fuerza auto"
 
 
-#MSG_SILENT_MODE_OFF
-"Mode [high power]"
-"Modo [rend.pleno]"
+#MSG_HIGH_POWER
+"High power"
+"Rend.pleno"
 
 
 #
 #
 "MMU2 connected"
 "MMU2 connected"
@@ -638,7 +606,7 @@
 "No SD card"
 "No SD card"
 "No hay tarjeta SD"
 "No hay tarjeta SD"
 
 
-#
+#MSG_NA
 "N/A"
 "N/A"
 "N/A"
 "N/A"
 
 
@@ -878,25 +846,21 @@
 "Right side[um]"
 "Right side[um]"
 "Derecha [um]"
 "Derecha [um]"
 
 
-#MSG_SECOND_SERIAL_ON c=17 r=1
-"RPi port     [on]"
-"Puerto RPi  [act]"
-
-#MSG_SECOND_SERIAL_OFF c=17 r=1
-"RPi port    [off]"
-"Puerto RPi  [ina]"
+#MSG_RPI_PORT
+"RPi port"
+"Puerto RPi"
 
 
 #MSG_WIZARD_RERUN c=20 r=7
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Ejecutar el Wizard borrara los valores de calibracion actuales y comenzara de nuevo. Continuar?"
 "Ejecutar el Wizard borrara los valores de calibracion actuales y comenzara de nuevo. Continuar?"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
-"SD card  [normal]"
-"Tarj. SD [normal]"
+#MSG_SD_CARD
+"SD card"
+"Tarj. SD"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
-"SD card [flshAir]"
-"Tarj. SD[FlshAir]"
+#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
+"FlashAir"
+"\x00"
 
 
 #
 #
 "Right"
 "Right"
@@ -958,49 +922,49 @@
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Algunos archivos no se ordenaran. Maximo 100 archivos por carpeta para ordenar. "
 "Algunos archivos no se ordenaran. Maximo 100 archivos por carpeta para ordenar. "
 
 
-#MSG_SORT_NONE c=17 r=1
-"Sort       [none]"
-"Ordenar [ninguno]"
+#MSG_SORT
+"Sort"
+"Ordenar"
 
 
-#MSG_SORT_TIME c=17 r=1
-"Sort       [time]"
-"Ordenar   [fecha]"
+#MSG_NONE
+"None"
+"Ninguno"
+
+#MSG_SORT_TIME
+"Time"
+"Fecha"
 
 
 #
 #
 "Severe skew:"
 "Severe skew:"
 "Incl.severa:"
 "Incl.severa:"
 
 
-#MSG_SORT_ALPHA c=17 r=1
-"Sort   [alphabet]"
-"Ordenar [alfabet]"
+#MSG_SORT_ALPHA
+"Alphabet"
+"Alfabet"
 
 
 #MSG_SORTING c=20 r=1
 #MSG_SORTING c=20 r=1
 "Sorting files"
 "Sorting files"
 "Ordenando archivos"
 "Ordenando archivos"
 
 
-#MSG_SOUND_LOUD c=17 r=1
-"Sound      [loud]"
-"Sonido     [alto]"
+#MSG_SOUND_LOUD
+"Loud"
+"Alto"
 
 
 #
 #
 "Slight skew:"
 "Slight skew:"
 "Liger.incl.:"
 "Liger.incl.:"
 
 
-#MSG_SOUND_MUTE c=17 r=1
-"Sound      [mute]"
-"Sonido[silenciad]"
+#MSG_SOUND
+"Sound"
+"Sonido"
 
 
 #
 #
 "Some problem encountered, Z-leveling enforced ..."
 "Some problem encountered, Z-leveling enforced ..."
 "Problema encontrado, nivelacion Z forzosa ..."
 "Problema encontrado, nivelacion Z forzosa ..."
 
 
-#MSG_SOUND_ONCE c=17 r=1
-"Sound      [once]"
-"Sonido  [una vez]"
-
-#MSG_SOUND_SILENT c=17 r=1
-"Sound    [silent]"
-"Sonido[silencios]"
+#MSG_SOUND_ONCE
+"Once"
+"Una vez"
 
 
 #MSG_SPEED
 #MSG_SPEED
 "Speed"
 "Speed"
@@ -1038,22 +1002,14 @@
 "Select filament:"
 "Select filament:"
 "Selecciona filamento:"
 "Selecciona filamento:"
 
 
-#MSG_TEMP_CALIBRATION c=20 r=1
-"Temp. cal.          "
-"Cal. temp. "
-
-#MSG_TEMP_CALIBRATION_ON c=20 r=1
-"Temp. cal.   [on]"
-"Cal. temp.   [on]"
+#MSG_TEMP_CALIBRATION c=12 r=1
+"Temp. cal."
+"Cal. temp."
 
 
 #
 #
 "Select temperature which matches your material."
 "Select temperature which matches your material."
 "Selecciona la temperatura adecuada a tu material."
 "Selecciona la temperatura adecuada a tu material."
 
 
-#MSG_TEMP_CALIBRATION_OFF c=20 r=1
-"Temp. cal.  [off]"
-"Cal. temp.  [off]"
-
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 "Temp. calibration"
 "Temp. calibration"
 "Calibracion temp."
 "Calibracion temp."
@@ -1239,8 +1195,12 @@
 "Corregir-Y:"
 "Corregir-Y:"
 
 
 #MSG_OFF
 #MSG_OFF
-" [off]"
-"[apag]"
+"Off"
+"Ina"
+
+#MSG_ON
+"On"
+"Act"
 
 
 #
 #
 "Back"
 "Back"
@@ -1258,17 +1218,17 @@
 "FINDA:"
 "FINDA:"
 "FINDA:"
 "FINDA:"
 
 
-#
-"Firmware   [none]"
-"Firmware[ninguno]"
+#MSG_FIRMWARE
+"Firmware"
+"\x00"
 
 
-#
-"Firmware [strict]"
-"Firmware[estrict]"
+#MSG_STRICT
+"Strict"
+"Estrict"
 
 
-#
-"Firmware   [warn]"
-"Firmware  [aviso]"
+#MSG_WARN
+"Warn"
+"Aviso"
 
 
 #
 #
 "HW Setup"
 "HW Setup"
@@ -1278,25 +1238,13 @@
 "IR:"
 "IR:"
 "\x00"
 "\x00"
 
 
-#
-"Magnets comp.[N/A]"
-"Comp. imanes [N/A]"
+#MSG_MAGNETS_COMP
+"Magnets comp."
+"Comp. imanes"
 
 
-#
-"Magnets comp.[Off]"
-"Comp. imanes [Off]"
-
-#
-"Magnets comp. [On]"
-"Comp. imanes  [On]"
-
-#
-"Mesh         [3x3]"
-"Malla        [3x3]"
-
-#
-"Mesh         [7x7]"
-"Malla        [7x7]"
+#MSG_MESH
+"Mesh"
+"Malla"
 
 
 #
 #
 "Mesh bed leveling"
 "Mesh bed leveling"
@@ -1306,53 +1254,21 @@
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detected on MK3 printer"
 "Firmware MK3S detectado en impresora MK3"
 "Firmware MK3S detectado en impresora MK3"
 
 
-#
-"MMU Mode [Normal]"
-"Modo MMU [Normal]"
-
-#
-"MMU Mode[Stealth]"
-"Modo MMU[Silenci]"
+#MSG_MMU_MODE
+"MMU Mode"
+"Modo MMU"
 
 
 #
 #
 "Mode change in progress ..."
 "Mode change in progress ..."
 "Cambio de modo progresando ..."
 "Cambio de modo progresando ..."
 
 
-#
-"Model      [none]"
-"Modelo  [ninguno]"
+#MSG_MODEL
+"Model"
+"Modelo"
 
 
-#
-"Model    [strict]"
-"Modelo [estricto]"
-
-#
-"Model      [warn]"
-"Modelo    [aviso]"
-
-#
-"Nozzle d.  [0.25]"
-"Diam. nozzl[0.25]"
-
-#
-"Nozzle d.  [0.40]"
-"Diam. nozzl[0.40]"
-
-#
-"Nozzle d.  [0.60]"
-"Diam. nozzl[0.60]"
-
-#
-"Nozzle     [none]"
-"Nozzle  [ninguno]"
-
-#
-"Nozzle   [strict]"
-"Nozzle [estricto]"
-
-#
-"Nozzle     [warn]"
-"Nozzle    [aviso]"
+#MSG_NOZZLE_DIAMETER
+"Nozzle d."
+"Diam. nozzl"
 
 
 #
 #
 "G-code sliced for a different level. Continue?"
 "G-code sliced for a different level. Continue?"
@@ -1414,9 +1330,9 @@
 "Sheet"
 "Sheet"
 "Lamina"
 "Lamina"
 
 
-#
-"Sound    [assist]"
-"Sonido [asistido]"
+#MSG_SOUND_BLIND
+"Assist"
+"Asistido"
 
 
 #
 #
 "Steel sheets"
 "Steel sheets"
@@ -1426,14 +1342,6 @@
 "Z-correct:"
 "Z-correct:"
 "Corregir-Z:"
 "Corregir-Z:"
 
 
-#
-"Z-probe nr.    [1]"
-"Z-sensor nr.   [1]"
-
-#
-"Z-probe nr.    [3]"
-"Z-sensor nr.   [3]"
-
-#
-"Z-probe nr.    [5]"
-"Z-sensor nr.   [5]"
+#MSG_Z_PROBE_NR
+"Z-probe nr."
+"Z-sensor nr."

+ 101 - 197
lang/lang_en_fr.txt

@@ -50,16 +50,8 @@
 "Are left and right Z~carriages all up?"
 "Are left and right Z~carriages all up?"
 "Z~carriages gauche + droite tout en haut?"
 "Z~carriages gauche + droite tout en haut?"
 
 
-#MSG_AUTO_DEPLETE_ON c=17 r=1
-"SpoolJoin    [on]"
-"\x00"
-
-#
-"SpoolJoin   [N/A]"
-"\x00"
-
-#MSG_AUTO_DEPLETE_OFF c=17 r=1
-"SpoolJoin   [off]"
+#MSG_AUTO_DEPLETE c=17 r=1
+"SpoolJoin"
 "\x00"
 "\x00"
 
 
 #MSG_AUTO_HOME
 #MSG_AUTO_HOME
@@ -174,22 +166,14 @@
 "Copy selected language?"
 "Copy selected language?"
 "Copier la langue selectionne?"
 "Copier la langue selectionne?"
 
 
-#MSG_CRASHDETECT_ON
-"Crash det.   [on]"
-"Detect.crash [on]"
+#MSG_CRASHDETECT
+"Crash det."
+"Detect.crash"
 
 
 #
 #
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Choisissez un filament pour la Calibration de la Premiere Couche et selectionnez-le depuis le menu a l'ecran."
 "Choisissez un filament pour la Calibration de la Premiere Couche et selectionnez-le depuis le menu a l'ecran."
 
 
-#MSG_CRASHDETECT_NA
-"Crash det.  [N/A]"
-"Detect.crash[N/A]"
-
-#MSG_CRASHDETECT_OFF
-"Crash det.  [off]"
-"Detect.crash[off]"
-
 #MSG_CRASH_DETECTED c=20 r=1
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
 "Crash detected."
 "Crash detecte."
 "Crash detecte."
@@ -274,18 +258,9 @@
 "Fail stats MMU"
 "Fail stats MMU"
 "Stat. d'echec MMU"
 "Stat. d'echec MMU"
 
 
-#MSG_FSENS_AUTOLOAD_ON c=17 r=1
-"F. autoload  [on]"
-"Autochargeur [on]"
-
-#MSG_FSENS_AUTOLOAD_NA c=17 r=1
-"F. autoload [N/A]"
-"Autochargeur[N/A]"
-
-#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
-"F. autoload [off]"
-"Autochargeur[off]"
-
+#MSG_FSENSOR_AUTOLOAD
+"F. autoload"
+"Autochargeur"
 #
 #
 "Fail stats"
 "Fail stats"
 "Stat. d'echec"
 "Stat. d'echec"
@@ -298,26 +273,13 @@
 "Fan test"
 "Fan test"
 "Test du ventilateur"
 "Test du ventilateur"
 
 
-#MSG_FANS_CHECK_ON c=17 r=1
-"Fans check   [on]"
-"Verif vent.  [on]"
-
-#MSG_FANS_CHECK_OFF c=17 r=1
-"Fans check  [off]"
-"Verif vent. [off]"
-
-#MSG_FSENSOR_ON
-"Fil. sensor  [on]"
-"Capteur Fil. [on]"
-
-#MSG_FSENSOR_NA
-"Fil. sensor [N/A]"
-"Capteur Fil.[N/A]"
-
-#MSG_FSENSOR_OFF
-"Fil. sensor [off]"
-"Capteur Fil.[off]"
+#MSG_FANS_CHECK
+"Fans check"
+"Verif vent."
 
 
+#MSG_FSENSOR
+"Fil. sensor"
+"Capteur Fil."
 #
 #
 "Filam. runouts"
 "Filam. runouts"
 "Fins de filament"
 "Fins de filament"
@@ -578,13 +540,17 @@
 "MMU OK. Resuming..."
 "MMU OK. Resuming..."
 "MMU OK. Reprise ..."
 "MMU OK. Reprise ..."
 
 
-#MSG_STEALTH_MODE_OFF
-"Mode     [Normal]"
+#MSG_MODE
+"Mode"
+"\x00"
+
+#MSG_NORMAL
+"Normal"
 "\x00"
 "\x00"
 
 
-#MSG_SILENT_MODE_ON
-"Mode     [silent]"
-"Mode     [feutre]"
+#MSG_SILENT
+"Silent"
+"Feutre"
 
 
 #
 #
 "MMU needs user attention."
 "MMU needs user attention."
@@ -594,17 +560,17 @@
 "MMU power fails"
 "MMU power fails"
 "Echecs alim. MMU"
 "Echecs alim. MMU"
 
 
-#MSG_STEALTH_MODE_ON
-"Mode    [Stealth]"
-"Mode     [furtif]"
+#MSG_STEALTH
+"Stealth"
+"Furtif"
 
 
-#MSG_AUTO_MODE_ON
-"Mode [auto power]"
-"Mode [puiss.auto]"
+#MSG_AUTO_POWER
+"Auto power"
+"Puiss.auto"
 
 
-#MSG_SILENT_MODE_OFF
-"Mode [high power]"
-"Mode[haute puiss]"
+#MSG_HIGH_POWER
+"High power"
+"Haute puiss"
 
 
 #
 #
 "MMU2 connected"
 "MMU2 connected"
@@ -638,7 +604,7 @@
 "No SD card"
 "No SD card"
 "Pas de carte SD"
 "Pas de carte SD"
 
 
-#
+#MSG_NA
 "N/A"
 "N/A"
 "\x00"
 "\x00"
 
 
@@ -878,25 +844,21 @@
 "Right side[um]"
 "Right side[um]"
 "Droite [um]"
 "Droite [um]"
 
 
-#MSG_SECOND_SERIAL_ON c=17 r=1
-"RPi port     [on]"
-"Port RPi     [on]"
-
-#MSG_SECOND_SERIAL_OFF c=17 r=1
-"RPi port    [off]"
-"Port RPi    [off]"
+#MSG_RPI_PORT
+"RPi port"
+"Port RPi"
 
 
 #MSG_WIZARD_RERUN c=20 r=7
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Lancement de l'Assistant supprimera les resultats actuels de calibration et commencera du debut. Continuer?"
 "Lancement de l'Assistant supprimera les resultats actuels de calibration et commencera du debut. Continuer?"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
-"SD card  [normal]"
-"Carte SD [normal]"
+#MSG_SD_CARD
+"SD card"
+"Carte SD"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
-"SD card [flshAir]"
-"Carte SD[flshAir]"
+#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
+"FlashAir"
+"FlshAir"
 
 
 #
 #
 "Right"
 "Right"
@@ -958,50 +920,49 @@
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Certains fichiers ne seront pas tries. Max 100 fichiers tries par dossier."
 "Certains fichiers ne seront pas tries. Max 100 fichiers tries par dossier."
 
 
-#MSG_SORT_NONE c=17 r=1
-"Sort       [none]"
-"Tri       [aucun]"
+#MSG_SORT
+"Sort"
+"Tri"
+
+#MSG_NONE
+"None"
+"Aucun"
 
 
-#MSG_SORT_TIME c=17 r=1
-"Sort       [time]"
-"Tri       [heure]"
+#MSG_SORT_TIME
+"Time"
+"Heure"
 
 
 #
 #
 "Severe skew:"
 "Severe skew:"
 "Deviat.sev.:"
 "Deviat.sev.:"
 
 
-#MSG_SORT_ALPHA c=17 r=1
-"Sort   [alphabet]"
-"Tri    [alphabet]"
+#MSG_SORT_ALPHA
+"Alphabet"
+"\x00"
 
 
 #MSG_SORTING c=20 r=1
 #MSG_SORTING c=20 r=1
 "Sorting files"
 "Sorting files"
 "Tri des fichiers"
 "Tri des fichiers"
 
 
-#MSG_SOUND_LOUD c=17 r=1
-"Sound      [loud]"
-"Son        [fort]"
+#MSG_SOUND_LOUD
+"Loud"
+"Fort"
 
 
 #
 #
 "Slight skew:"
 "Slight skew:"
 "Deviat.leg.:"
 "Deviat.leg.:"
 
 
-#MSG_SOUND_MUTE c=17 r=1
-"Sound      [mute]"
-"Son        [muet]"
+#MSG_SOUND
+"Sound"
+"Son"
 
 
 #
 #
 "Some problem encountered, Z-leveling enforced ..."
 "Some problem encountered, Z-leveling enforced ..."
 "Probleme rencontre, cliquez sur le bouton pour niveller l'axe Z..."
 "Probleme rencontre, cliquez sur le bouton pour niveller l'axe Z..."
 
 
-#MSG_SOUND_ONCE c=17 r=1
-"Sound      [once]"
-"Son    [une fois]"
-
-#MSG_SOUND_SILENT c=17 r=1
-"Sound    [silent]"
-"Son      [feutre]"
-
+#MSG_SOUND_ONCE
+"Once"
+"Une fois"
 #MSG_SPEED
 #MSG_SPEED
 "Speed"
 "Speed"
 "Vitesse"
 "Vitesse"
@@ -1038,22 +999,14 @@
 "Select filament:"
 "Select filament:"
 "Selectionnez le filament:"
 "Selectionnez le filament:"
 
 
-#MSG_TEMP_CALIBRATION c=20 r=1
-"Temp. cal.          "
+#MSG_TEMP_CALIBRATION c=12 r=1
+"Temp. cal."
 "Calib. Temp."
 "Calib. Temp."
 
 
-#MSG_TEMP_CALIBRATION_ON c=20 r=1
-"Temp. cal.   [on]"
-"Calib. Temp. [on]"
-
 #
 #
 "Select temperature which matches your material."
 "Select temperature which matches your material."
 "Selectionnez la temperature qui correspond a votre materiau."
 "Selectionnez la temperature qui correspond a votre materiau."
 
 
-#MSG_TEMP_CALIBRATION_OFF c=20 r=1
-"Temp. cal.  [off]"
-"Calib. Temp.[off]"
-
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 "Temp. calibration"
 "Temp. calibration"
 "Calibration temp."
 "Calibration temp."
@@ -1239,8 +1192,12 @@
 "Correct-Y:"
 "Correct-Y:"
 
 
 #MSG_OFF
 #MSG_OFF
-" [off]"
-" [off]"
+"Off"
+"\x00"
+
+#MSG_ON
+"On"
+"\x00"
 
 
 #
 #
 "Back"
 "Back"
@@ -1258,17 +1215,17 @@
 "FINDA:"
 "FINDA:"
 "FINDA:"
 "FINDA:"
 
 
-#
-"Firmware   [none]"
-"Firmware [aucune]"
+#MSG_FIRMWARE
+"Firmware"
+"\x00"
 
 
-#
-"Firmware [strict]"
-"Firmware[stricte]"
+#MSG_STRICT
+"Strict"
+"Stricte"
 
 
-#
-"Firmware   [warn]"
-"Firmware  [avert]"
+#MSG_WARN
+"Warn"
+"Avert"
 
 
 #
 #
 "HW Setup"
 "HW Setup"
@@ -1278,24 +1235,12 @@
 "IR:"
 "IR:"
 "IR:"
 "IR:"
 
 
-#
-"Magnets comp.[N/A]"
-"Compens. aim.[N/A]"
-
-#
-"Magnets comp.[Off]"
-"Compens. aim.[off]"
-
-#
-"Magnets comp. [On]"
-"Compens. aim. [on]"
+#MSG_MAGNETS_COMP
+"Magnets comp."
+"Compens. aim."
 
 
-#
-"Mesh         [3x3]"
-"\x00"
-
-#
-"Mesh         [7x7]"
+#MSG_MESH
+"Mesh"
 "\x00"
 "\x00"
 
 
 #
 #
@@ -1306,53 +1251,21 @@
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detected on MK3 printer"
 "Firmware MK3S detecte sur imprimante MK3"
 "Firmware MK3S detecte sur imprimante MK3"
 
 
-#
-"MMU Mode [Normal]"
-"Mode MMU [normal]"
-
-#
-"MMU Mode[Stealth]"
-"Mode MMU [feutre]"
+#MSG_MMU_MODE
+"MMU Mode"
+"Mode MMU"
 
 
 #
 #
 "Mode change in progress ..."
 "Mode change in progress ..."
 "Changement de mode en cours..."
 "Changement de mode en cours..."
 
 
-#
-"Model      [none]"
-"Modele   [aucune]"
-
-#
-"Model    [strict]"
-"Modele  [stricte]"
-
-#
-"Model      [warn]"
-"Modele    [avert]"
+#MSG_MODEL
+"Model"
+"Modele"
 
 
-#
-"Nozzle d.  [0.25]"
-"Diam. buse [0.25]"
-
-#
-"Nozzle d.  [0.40]"
-"Diam. buse [0.40]"
-
-#
-"Nozzle d.  [0.60]"
-"Diam. buse [0.60]"
-
-#
-"Nozzle     [none]"
-"Buse     [aucune]"
-
-#
-"Nozzle   [strict]"
-"Buse    [stricte]"
-
-#
-"Nozzle     [warn]"
-"Buse      [avert]"
+#MSG_NOZZLE_DIAMETER
+"Nozzle d."
+"Diam. buse"
 
 
 #
 #
 "G-code sliced for a different level. Continue?"
 "G-code sliced for a different level. Continue?"
@@ -1414,9 +1327,9 @@
 "Sheet"
 "Sheet"
 "Plaque"
 "Plaque"
 
 
-#
-"Sound    [assist]"
-"Son      [assist]"
+#MSG_SOUND_BLIND
+"Assist"
+"\x00"
 
 
 #
 #
 "Steel sheets"
 "Steel sheets"
@@ -1426,15 +1339,6 @@
 "Z-correct:"
 "Z-correct:"
 "Correct-Z:"
 "Correct-Z:"
 
 
-#
-"Z-probe nr.    [1]"
-"Mesurer x-fois [1]"
-
-#
-"Z-probe nr.    [3]"
-"Mesurer x-fois [3]"
-
-#
-"Z-probe nr.    [5]"
-"Mesurer x-fois [5]"
- 
+#MSG_Z_PROBE_NR
+"Z-probe nr."
+"Mesurer x-fois"

+ 103 - 196
lang/lang_en_it.txt

@@ -50,16 +50,8 @@
 "Are left and right Z~carriages all up?"
 "Are left and right Z~carriages all up?"
 "I carrelli Z sin/des sono altezza max?"
 "I carrelli Z sin/des sono altezza max?"
 
 
-#MSG_AUTO_DEPLETE_ON c=17 r=1
-"SpoolJoin    [on]"
-"\x00"
-
-#
-"SpoolJoin   [N/A]"
-"\x00"
-
-#MSG_AUTO_DEPLETE_OFF c=17 r=1
-"SpoolJoin   [off]"
+#MSG_AUTO_DEPLETE c=17 r=1
+"SpoolJoin"
 "\x00"
 "\x00"
 
 
 #MSG_AUTO_HOME
 #MSG_AUTO_HOME
@@ -174,22 +166,14 @@
 "Copy selected language?"
 "Copy selected language?"
 "Copiare la lingua selezionata?"
 "Copiare la lingua selezionata?"
 
 
-#MSG_CRASHDETECT_ON
-"Crash det.   [on]"
-"Rileva.crash [on]"
+#MSG_CRASHDETECT
+"Crash det."
+"Rileva.crash"
 
 
 #
 #
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Scegli un filamento per la calibrazione del primo strato e selezionalo nel menu sullo schermo."
 "Scegli un filamento per la calibrazione del primo strato e selezionalo nel menu sullo schermo."
 
 
-#MSG_CRASHDETECT_NA
-"Crash det.  [N/A]"
-"Rileva.crash[N/A]"
-
-#MSG_CRASHDETECT_OFF
-"Crash det.  [off]"
-"Rileva.crash[off]"
-
 #MSG_CRASH_DETECTED c=20 r=1
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
 "Crash detected."
 "Rilevato impatto."
 "Rilevato impatto."
@@ -274,17 +258,9 @@
 "Fail stats MMU"
 "Fail stats MMU"
 "Stat.fall. MMU"
 "Stat.fall. MMU"
 
 
-#MSG_FSENS_AUTOLOAD_ON c=17 r=1
-"F. autoload  [on]"
-"Autocar.fil. [on]"
-
-#MSG_FSENS_AUTOLOAD_NA c=17 r=1
-"F. autoload [N/A]"
-"Autocar.fil.[N/A]"
-
-#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
-"F. autoload [off]"
-"Autocar.fil.[off]"
+#MSG_FSENSOR_AUTOLOAD
+"F. autoload"
+"Autocar.fil."
 
 
 #
 #
 "Fail stats"
 "Fail stats"
@@ -298,26 +274,13 @@
 "Fan test"
 "Fan test"
 "Test ventola"
 "Test ventola"
 
 
-#MSG_FANS_CHECK_ON c=17 r=1
-"Fans check   [on]"
-"Control.vent [on]"
-
-#MSG_FANS_CHECK_OFF c=17 r=1
-"Fans check  [off]"
-"Control.vent[off]"
-
-#MSG_FSENSOR_ON
-"Fil. sensor  [on]"
-"Sensore fil. [on]"
-
-#MSG_FSENSOR_NA
-"Fil. sensor [N/A]"
-"Sensore fil.[N/A]"
-
-#MSG_FSENSOR_OFF
-"Fil. sensor [off]"
-"Sensore fil.[off]"
+#MSG_FANS_CHECK
+"Fans check"
+"Control.vent"
 
 
+#MSG_FSENSOR
+"Fil. sensor"
+"Sensore fil."
 #
 #
 "Filam. runouts"
 "Filam. runouts"
 "Filam. esauriti"
 "Filam. esauriti"
@@ -578,13 +541,17 @@
 "MMU OK. Resuming..."
 "MMU OK. Resuming..."
 "MMU OK. Riprendendo... "
 "MMU OK. Riprendendo... "
 
 
-#MSG_STEALTH_MODE_OFF
-"Mode     [Normal]"
-"Mod.    [normale]"
+#MSG_MODE
+"Mode"
+"Mod."
+
+#MSG_NORMAL
+"Normal"
+"Normale"
 
 
-#MSG_SILENT_MODE_ON
-"Mode     [silent]"
-"Mod. [silenziosa]"
+#MSG_SILENT
+"Silent"
+"Silenzioso"
 
 
 #
 #
 "MMU needs user attention."
 "MMU needs user attention."
@@ -594,17 +561,17 @@
 "MMU power fails"
 "MMU power fails"
 "Manc. corr. MMU"
 "Manc. corr. MMU"
 
 
-#MSG_STEALTH_MODE_ON
-"Mode    [Stealth]"
-"Mod. [silenziosa]"
+#MSG_STEALTH
+"Stealth"
+"Silenziosa"
 
 
-#MSG_AUTO_MODE_ON
-"Mode [auto power]"
-"Mod.       [auto]"
+#MSG_AUTO_POWER
+"Auto power"
+"Auto"
 
 
-#MSG_SILENT_MODE_OFF
-"Mode [high power]"
-"Mod.      [forte]"
+#MSG_HIGH_POWER
+"High power"
+"Forte"
 
 
 #
 #
 "MMU2 connected"
 "MMU2 connected"
@@ -638,7 +605,7 @@
 "No SD card"
 "No SD card"
 "Nessuna SD"
 "Nessuna SD"
 
 
-#
+#MSG_NA
 "N/A"
 "N/A"
 "\x00"
 "\x00"
 
 
@@ -878,25 +845,21 @@
 "Right side[um]"
 "Right side[um]"
 "Destra [um]"
 "Destra [um]"
 
 
-#MSG_SECOND_SERIAL_ON c=17 r=1
-"RPi port     [on]"
-"Porta RPi    [on]"
-
-#MSG_SECOND_SERIAL_OFF c=17 r=1
-"RPi port    [off]"
-"Porta RPi   [off]"
+#MSG_RPI_PORT
+"RPi port"
+"Porta RPi"
 
 
 #MSG_WIZARD_RERUN c=20 r=7
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Se avvi il Wizard perderai la calibrazione preesistente e dovrai ricominciare dall'inizio. Continuare?"
 "Se avvi il Wizard perderai la calibrazione preesistente e dovrai ricominciare dall'inizio. Continuare?"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
-"SD card  [normal]"
-"Mem. SD [normale]"
+#MSG_SD_CARD
+"SD card"
+"Mem. SD"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
-"SD card [flshAir]"
-"Mem. SD [flshAir]"
+#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
+"FlashAir"
+"\x00"
 
 
 #
 #
 "Right"
 "Right"
@@ -958,49 +921,49 @@
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Alcuni file non saranno ordinati. Il numero massimo di file in una cartella e 100 perche siano ordinati."
 "Alcuni file non saranno ordinati. Il numero massimo di file in una cartella e 100 perche siano ordinati."
 
 
-#MSG_SORT_NONE c=17 r=1
-"Sort       [none]"
-"Ordina  [nessuno]"
+#MSG_SORT
+"Sort"
+"Ordina"
+
+#MSG_NONE
+"None"
+"Nessuno"
 
 
-#MSG_SORT_TIME c=17 r=1
-"Sort       [time]"
-"Ordina    [cron.]"
+#MSG_SORT_TIME
+"Time"
+"Cron."
 
 
 #
 #
 "Severe skew:"
 "Severe skew:"
 "Devia.grave:"
 "Devia.grave:"
 
 
-#MSG_SORT_ALPHA c=17 r=1
-"Sort   [alphabet]"
-"Ordine [alfabeti]"
+#MSG_SORT_ALPHA
+"Alphabet"
+"Alfabeti"
 
 
 #MSG_SORTING c=20 r=1
 #MSG_SORTING c=20 r=1
 "Sorting files"
 "Sorting files"
 "Ordinando i file"
 "Ordinando i file"
 
 
-#MSG_SOUND_LOUD c=17 r=1
-"Sound      [loud]"
-"Suono     [forte]"
+#MSG_SOUND_LOUD
+"Loud"
+"Forte"
 
 
 #
 #
 "Slight skew:"
 "Slight skew:"
 "Devia.lieve:"
 "Devia.lieve:"
 
 
-#MSG_SOUND_MUTE c=17 r=1
-"Sound      [mute]"
-"Suono      [mute]"
+#MSG_SOUND
+"Sound"
+"Suono"
 
 
 #
 #
 "Some problem encountered, Z-leveling enforced ..."
 "Some problem encountered, Z-leveling enforced ..."
 "Sono stati rilevati problemi, avviato livellamento Z ..."
 "Sono stati rilevati problemi, avviato livellamento Z ..."
 
 
-#MSG_SOUND_ONCE c=17 r=1
-"Sound      [once]"
-"Suono   [singolo]"
-
-#MSG_SOUND_SILENT c=17 r=1
-"Sound    [silent]"
-"Suono[silenzioso]"
+#MSG_SOUND_ONCE
+"Once"
+"Singolo"
 
 
 #MSG_SPEED
 #MSG_SPEED
 "Speed"
 "Speed"
@@ -1038,22 +1001,14 @@
 "Select filament:"
 "Select filament:"
 "Seleziona il filamento:"
 "Seleziona il filamento:"
 
 
-#MSG_TEMP_CALIBRATION c=20 r=1
-"Temp. cal.          "
-"Calib. temp. "
-
-#MSG_TEMP_CALIBRATION_ON c=20 r=1
-"Temp. cal.   [on]"
-"Calib. temp. [on]"
+#MSG_TEMP_CALIBRATION c=12 r=1
+"Temp. cal."
+"Calib. temp."
 
 
 #
 #
 "Select temperature which matches your material."
 "Select temperature which matches your material."
 "Seleziona la temperatura appropriata per il tuo materiale."
 "Seleziona la temperatura appropriata per il tuo materiale."
 
 
-#MSG_TEMP_CALIBRATION_OFF c=20 r=1
-"Temp. cal.  [off]"
-"Calib. temp.[off]"
-
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 "Temp. calibration"
 "Temp. calibration"
 "Calib. Temp."
 "Calib. Temp."
@@ -1239,7 +1194,11 @@
 "Correzione-Y:"
 "Correzione-Y:"
 
 
 #MSG_OFF
 #MSG_OFF
-" [off]"
+"Off"
+"\x00"
+
+#MSG_ON
+"On"
 "\x00"
 "\x00"
 
 
 #
 #
@@ -1258,17 +1217,17 @@
 "FINDA:"
 "FINDA:"
 "\x00"
 "\x00"
 
 
-#
-"Firmware   [none]"
-"Firmware[nessuno]"
+#MSG_FIRMWARE
+"Firmware"
+"\x00"
 
 
-#
-"Firmware [strict]"
-"Firmware [esatto]"
+#MSG_STRICT
+"Strict"
+"Esatto"
 
 
-#
-"Firmware   [warn]"
-"Firmware [avviso]"
+#MSG_WARN
+"Warn"
+"Avviso"
 
 
 #
 #
 "HW Setup"
 "HW Setup"
@@ -1278,25 +1237,13 @@
 "IR:"
 "IR:"
 "\x00"
 "\x00"
 
 
-#
-"Magnets comp.[N/A]"
-"Comp. Magneti[N/A]"
+#MSG_MAGNETS_COMP
+"Magnets comp."
+"Comp. Magneti"
 
 
-#
-"Magnets comp.[Off]"
-"Comp. Magneti[off]"
-
-#
-"Magnets comp. [On]"
-"Comp. Magneti [on]"
-
-#
-"Mesh         [3x3]"
-"Griglia      [3x3]"
-
-#
-"Mesh         [7x7]"
-"Griglia      [7x7]"
+#MSG_MESH
+"Mesh"
+"Griglia"
 
 
 #
 #
 "Mesh bed leveling"
 "Mesh bed leveling"
@@ -1306,53 +1253,21 @@
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detected on MK3 printer"
 "Firmware MK3S rilevato su stampante MK3"
 "Firmware MK3S rilevato su stampante MK3"
 
 
-#
-"MMU Mode [Normal]"
-"Modalita MMU [Normale]"
-
-#
-"MMU Mode[Stealth]"
-"Modalita MMU [Silenziosa]"
+#MSG_MMU_MODE
+"MMU Mode"
+"Mod. MMU"
 
 
 #
 #
 "Mode change in progress ..."
 "Mode change in progress ..."
 "Cambio modalita in corso ..."
 "Cambio modalita in corso ..."
 
 
-#
-"Model      [none]"
-"Modello [nessuno]"
-
-#
-"Model    [strict]"
-"Modello  [esatto]"
-
-#
-"Model      [warn]"
-"Modello  [avviso]"
-
-#
-"Nozzle d.  [0.25]"
-"Diam.Ugello[0.25]"
-
-#
-"Nozzle d.  [0.40]"
-"Diam.Ugello[0.40]"
-
-#
-"Nozzle d.  [0.60]"
-"Diam.Ugello[0.60]"
-
-#
-"Nozzle     [none]"
-"Ugello  [nessuno]"
-
-#
-"Nozzle   [strict]"
-"Ugello   [esatto]"
+#MSG_MODEL
+"Model"
+"Modello"
 
 
-#
-"Nozzle     [warn]"
-"Ugello   [avviso]"
+#MSG_NOZZLE_DIAMETER
+"Nozzle d."
+"Diam.Ugello"
 
 
 #
 #
 "G-code sliced for a different level. Continue?"
 "G-code sliced for a different level. Continue?"
@@ -1414,9 +1329,9 @@
 "Sheet"
 "Sheet"
 "Piano"
 "Piano"
 
 
-#
-"Sound    [assist]"
-"Suono   [assist.]"
+#MSG_SOUND_BLIND
+"Assist"
+"Assist."
 
 
 #
 #
 "Steel sheets"
 "Steel sheets"
@@ -1426,14 +1341,6 @@
 "Z-correct:"
 "Z-correct:"
 "Correzione-Z:"
 "Correzione-Z:"
 
 
-#
-"Z-probe nr.    [1]"
-"Z-probe nr.    [1]"
-
-#
-"Z-probe nr.    [3]"
-"Z-probe nr.    [3]"
-
-#
-"Z-probe nr.    [5]"
-"Z-probe nr.    [5]"
+#MSG_Z_PROBE_NR
+"Z-probe nr."
+"\x00"

+ 103 - 196
lang/lang_en_pl.txt

@@ -50,17 +50,9 @@
 "Are left and right Z~carriages all up?"
 "Are left and right Z~carriages all up?"
 "Obydwa konce osi sa na szczycie?"
 "Obydwa konce osi sa na szczycie?"
 
 
-#MSG_AUTO_DEPLETE_ON c=17 r=1
-"SpoolJoin    [on]"
-"SpoolJoin    [wl]"
-
-#
-"SpoolJoin   [N/A]"
-"SpoolJoin   [N/D]"
-
-#MSG_AUTO_DEPLETE_OFF c=17 r=1
-"SpoolJoin   [off]"
-"SpoolJoin   [wyl]"
+#MSG_AUTO_DEPLETE c=17 r=1
+"SpoolJoin"
+"\x00"
 
 
 #MSG_AUTO_HOME
 #MSG_AUTO_HOME
 "Auto home"
 "Auto home"
@@ -175,21 +167,13 @@
 "Skopiowac wybrany jezyk?"
 "Skopiowac wybrany jezyk?"
 
 
 #MSG_CRASHDETECT_ON
 #MSG_CRASHDETECT_ON
-"Crash det.   [on]"
-"Wykr.zderzen [wl]"
+"Crash det."
+"Wykr.zderzen"
 
 
 #
 #
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
 "Wybierz filament do Kalibracji Pierwszej Warstwy i potwierdz w menu ekranowym."
 "Wybierz filament do Kalibracji Pierwszej Warstwy i potwierdz w menu ekranowym."
 
 
-#MSG_CRASHDETECT_NA
-"Crash det.  [N/A]"
-"Wykr.zderzen[N/D]"
-
-#MSG_CRASHDETECT_OFF
-"Crash det.  [off]"
-"Wykr.zderzen[wyl]"
-
 #MSG_CRASH_DETECTED c=20 r=1
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
 "Crash detected."
 "Zderzenie wykryte"
 "Zderzenie wykryte"
@@ -274,17 +258,9 @@
 "Fail stats MMU"
 "Fail stats MMU"
 "Bledy MMU"
 "Bledy MMU"
 
 
-#MSG_FSENS_AUTOLOAD_ON c=17 r=1
-"F. autoload  [on]"
-"Autolad.fil. [wl]"
-
-#MSG_FSENS_AUTOLOAD_NA c=17 r=1
-"F. autoload [N/A]"
-"Autolad.fil.[N/D]"
-
-#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
-"F. autoload [off]"
-"Autolad.fil.[wyl]"
+#MSG_FSENSOR_AUTOLOAD
+"F. autoload"
+"Autolad. fil."
 
 
 #
 #
 "Fail stats"
 "Fail stats"
@@ -298,25 +274,13 @@
 "Fan test"
 "Fan test"
 "Test wentylatora"
 "Test wentylatora"
 
 
-#MSG_FANS_CHECK_ON c=17 r=1
-"Fans check   [on]"
-"Sprawd.went. [wl]"
+#MSG_FANS_CHECK
+"Fans check"
+"Sprawd.went."
 
 
-#MSG_FANS_CHECK_OFF c=17 r=1
-"Fans check  [off]"
-"Sprawd.went.[wyl]"
-
-#MSG_FSENSOR_ON
-"Fil. sensor  [on]"
-"Czuj. filam. [wl]"
-
-#MSG_FSENSOR_NA
-"Fil. sensor [N/A]"
-"Czuj. filam.[N/D]"
-
-#MSG_FSENSOR_OFF
-"Fil. sensor [off]"
-"Czuj. filam.[wyl]"
+#MSG_FSENSOR
+"Fil. sensor"
+"Czuj. filam."
 
 
 #
 #
 "Filam. runouts"
 "Filam. runouts"
@@ -578,13 +542,17 @@
 "MMU OK. Resuming..."
 "MMU OK. Resuming..."
 "MMU OK. Wznawianie..."
 "MMU OK. Wznawianie..."
 
 
-#MSG_STEALTH_MODE_OFF
-"Mode     [Normal]"
-"Tryb   [normalny]"
+#MSG_MODE
+"Mode"
+"Tryb"
+
+#MSG_NORMAL
+"Normal"
+"Normalny"
 
 
-#MSG_SILENT_MODE_ON
-"Mode     [silent]"
-"Tryb      [cichy]"
+#MSG_SILENT
+"Silent"
+"Cichy"
 
 
 #
 #
 "MMU needs user attention."
 "MMU needs user attention."
@@ -594,17 +562,17 @@
 "MMU power fails"
 "MMU power fails"
 "Zaniki zasil. MMU"
 "Zaniki zasil. MMU"
 
 
-#MSG_STEALTH_MODE_ON
-"Mode    [Stealth]"
-"Tryb      [cichy]"
+#MSG_STEALTH
+"Stealth"
+"Cichy"
 
 
-#MSG_AUTO_MODE_ON
-"Mode [auto power]"
-"Tryb [automatycz]"
+#MSG_AUTO_POWER
+"Auto power"
+"Automatycz"
 
 
-#MSG_SILENT_MODE_OFF
-"Mode [high power]"
-"Tryb[wysoka wyd.]"
+#MSG_HIGH_POWER
+"High power"
+"Wysoka wyd."
 
 
 #
 #
 "MMU2 connected"
 "MMU2 connected"
@@ -638,7 +606,7 @@
 "No SD card"
 "No SD card"
 "Brak karty SD"
 "Brak karty SD"
 
 
-#
+#MSG_NA
 "N/A"
 "N/A"
 "N/D"
 "N/D"
 
 
@@ -878,25 +846,21 @@
 "Right side[um]"
 "Right side[um]"
 "Prawo [um]"
 "Prawo [um]"
 
 
-#MSG_SECOND_SERIAL_ON c=17 r=1
-"RPi port     [on]"
-"Port RPi     [wl]"
-
-#MSG_SECOND_SERIAL_OFF c=17 r=1
-"RPi port    [off]"
-"Port RPi    [wyl]"
+#MSG_RPI_PORT
+"RPi port"
+"Port RPi"
 
 
 #MSG_WIZARD_RERUN c=20 r=7
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
 "Wlaczenie Asystenta usunie obecne dane kalibracyjne i zacznie od poczatku. Kontynuowac?"
 "Wlaczenie Asystenta usunie obecne dane kalibracyjne i zacznie od poczatku. Kontynuowac?"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
-"SD card  [normal]"
-"Karta SD [normal]"
+#MSG_SD_CARD
+"SD card"
+"Karta SD"
 
 
-#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
-"SD card [flshAir]"
-"Karta SD[FlshAir]"
+#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
+"FlashAir"
+"\x00"
 
 
 #
 #
 "Right"
 "Right"
@@ -958,50 +922,49 @@
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
 "Niektore pliki nie zostana posortowane. Max. liczba plikow w 1 folderze = 100."
 "Niektore pliki nie zostana posortowane. Max. liczba plikow w 1 folderze = 100."
 
 
-#MSG_SORT_NONE c=17 r=1
-"Sort       [none]"
-"Sortowanie [brak]"
+#MSG_SORT
+"Sort"
+"Sortowanie"
 
 
-#MSG_SORT_TIME c=17 r=1
-"Sort       [time]"
-"Sortowanie [czas]"
+#MSG_NONE
+"None"
+"Brak"
+
+#MSG_SORT_TIME
+"Time"
+"Czas"
 
 
 #
 #
 "Severe skew:"
 "Severe skew:"
 "Znaczny skos:"
 "Znaczny skos:"
 
 
-#MSG_SORT_ALPHA c=17 r=1
-"Sort   [alphabet]"
-"Sortowanie[alfab]"
+#MSG_SORT_ALPHA
+"Alphabet"
+"Alfab"
 
 
 #MSG_SORTING c=20 r=1
 #MSG_SORTING c=20 r=1
 "Sorting files"
 "Sorting files"
 "Sortowanie plikow"
 "Sortowanie plikow"
 
 
-#MSG_SOUND_LOUD c=17 r=1
-"Sound      [loud]"
-"Dzwiek   [glosny]"
+#MSG_SOUND_LOUD
+"Loud"
+"Glosny"
 
 
 #
 #
 "Slight skew:"
 "Slight skew:"
 "Lekki skos:"
 "Lekki skos:"
 
 
-#MSG_SOUND_MUTE c=17 r=1
-"Sound      [mute]"
-"Dzwiek[wylaczony]"
+#MSG_SOUND
+"Sound"
+"Dzwiek"
 
 
 #
 #
 "Some problem encountered, Z-leveling enforced ..."
 "Some problem encountered, Z-leveling enforced ..."
 "Wykryto problem, wymuszono poziomowanie osi Z."
 "Wykryto problem, wymuszono poziomowanie osi Z."
 
 
-#MSG_SOUND_ONCE c=17 r=1
-"Sound      [once]"
-"Dzwiek    [1-raz]"
-
-#MSG_SOUND_SILENT c=17 r=1
-"Sound    [silent]"
-"Dzwiek    [cichy]"
-
+#MSG_SOUND_ONCE
+"Once"
+"1-raz"
 #MSG_SPEED
 #MSG_SPEED
 "Speed"
 "Speed"
 "Predkosc"
 "Predkosc"
@@ -1038,22 +1001,14 @@
 "Select filament:"
 "Select filament:"
 "Wybierz filament:"
 "Wybierz filament:"
 
 
-#MSG_TEMP_CALIBRATION c=20 r=1
-"Temp. cal.          "
+#MSG_TEMP_CALIBRATION c=12 r=1
+"Temp. cal."
 "Kalibracja temp."
 "Kalibracja temp."
 
 
-#MSG_TEMP_CALIBRATION_ON c=20 r=1
-"Temp. cal.   [on]"
-"Kalibr.temp. [wl]"
-
 #
 #
 "Select temperature which matches your material."
 "Select temperature which matches your material."
 "Wybierz temperature, ktora odpowiada Twojemu filamentowi."
 "Wybierz temperature, ktora odpowiada Twojemu filamentowi."
 
 
-#MSG_TEMP_CALIBRATION_OFF c=20 r=1
-"Temp. cal.  [off]"
-"Kalibr.temp.[wyl]"
-
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 #MSG_CALIBRATION_PINDA_MENU c=17 r=1
 "Temp. calibration"
 "Temp. calibration"
 "Kalibracja temp."
 "Kalibracja temp."
@@ -1239,8 +1194,12 @@
 "Korekcja-Y:"
 "Korekcja-Y:"
 
 
 #MSG_OFF
 #MSG_OFF
-" [off]"
-" [wyl]"
+"Off"
+"Wyl"
+
+#MSG_ON
+"On"
+"Wl"
 
 
 #
 #
 "Back"
 "Back"
@@ -1258,17 +1217,17 @@
 "FINDA:"
 "FINDA:"
 "\x00"
 "\x00"
 
 
-#
-"Firmware   [none]"
-"Firmware   [brak]"
+#MSG_FIRMWARE
+"Firmware"
+"\x00"
 
 
-#
-"Firmware [strict]"
-"Firmware [restr.]"
+#MSG_STRICT
+"Strict"
+"Restr."
 
 
-#
-"Firmware   [warn]"
-"Firmware[ostrzez]"
+#MSG_WARN
+"Warn"
+"Ostrzez"
 
 
 #
 #
 "HW Setup"
 "HW Setup"
@@ -1278,25 +1237,13 @@
 "IR:"
 "IR:"
 "\x00"
 "\x00"
 
 
-#
-"Magnets comp.[N/A]"
-"Kor. magnesow[N/D]"
+#MSG_MAGNETS_COMP
+"Magnets comp."
+"Kor. magnesow"
 
 
-#
-"Magnets comp.[Off]"
-"Kor. magnesow[wyl]"
-
-#
-"Magnets comp. [On]"
-"Kor. magnesow [wl]"
-
-#
-"Mesh         [3x3]"
-"Siatka       [3x3]"
-
-#
-"Mesh         [7x7]"
-"Siatka       [7x7]"
+#MSG_MESH
+"Mesh"
+"Siatka"
 
 
 #
 #
 "Mesh bed leveling"
 "Mesh bed leveling"
@@ -1306,53 +1253,21 @@
 "MK3S firmware detected on MK3 printer"
 "MK3S firmware detected on MK3 printer"
 "Wykryto firmware MK3S w drukarce MK3"
 "Wykryto firmware MK3S w drukarce MK3"
 
 
-#
-"MMU Mode [Normal]"
-"Tryb MMU[Normaln]"
-
-#
-"MMU Mode[Stealth]"
-"Tryb MMU[Stealth]"
+#MSG_MMU_MODE
+"MMU Mode"
+"Tryb MMU"
 
 
 #
 #
 "Mode change in progress ..."
 "Mode change in progress ..."
 "Trwa zmiana trybu..."
 "Trwa zmiana trybu..."
 
 
-#
-"Model      [none]"
-"Model      [brak]"
-
-#
-"Model    [strict]"
-"Model [restrykc.]"
-
-#
-"Model      [warn]"
-"Model  [ostrzez.]"
-
-#
-"Nozzle d.  [0.25]"
-"Sr. dyszy  [0,25]"
-
-#
-"Nozzle d.  [0.40]"
-"Sr. dyszy  [0,40]"
-
-#
-"Nozzle d.  [0.60]"
-"Sr. dyszy  [0,60]"
-
-#
-"Nozzle     [none]"
-"Dysza      [brak]"
-
-#
-"Nozzle   [strict]"
-"Dysza [restrykc.]"
+#MSG_MODEL
+"Model"
+"\x00"
 
 
-#
-"Nozzle     [warn]"
-"Dysza  [ostrzez.]"
+#MSG_NOZZLE_DIAMETER
+"Nozzle d."
+"Sr. dyszy"
 
 
 #
 #
 "G-code sliced for a different level. Continue?"
 "G-code sliced for a different level. Continue?"
@@ -1414,9 +1329,9 @@
 "Sheet"
 "Sheet"
 "Plyta"
 "Plyta"
 
 
-#
-"Sound    [assist]"
-"Dzwiek   [asyst.]"
+#MSG_SOUND_BLIND
+"Assist"
+"Asyst."
 
 
 #
 #
 "Steel sheets"
 "Steel sheets"
@@ -1426,14 +1341,6 @@
 "Z-correct:"
 "Z-correct:"
 "Korekcja-Z:"
 "Korekcja-Z:"
 
 
-#
-"Z-probe nr.    [1]"
-"Ilosc Pomiarow [1]"
-
-#
-"Z-probe nr.    [3]"
-"Ilosc Pomiarow [3]"
-
-#
-"Z-probe nr.    [5]"
-"Ilosc Pomiarow [5]"
+#MSG_Z_PROBE_NR
+"Z-probe nr."
+"Ilosc Pomiarow"