Bladeren bron

Merge pull request #5 from DRracer/3d-gussner-patch-4

Added `lcd_menu` format description
DRracer 4 jaren geleden
bovenliggende
commit
a5b5c99704
1 gewijzigde bestanden met toevoegingen van 327 en 117 verwijderingen
  1. 327 117
      Firmware/ultralcd.cpp

+ 327 - 117
Firmware/ultralcd.cpp

@@ -1,4 +1,7 @@
 //! @file
+//! @date Aug 28, 2019
+//! @author mkbel
+//! @brief LCD
 
 #include "temperature.h"
 #include "ultralcd.h"
@@ -869,18 +872,23 @@ void lcdui_print_status_line(void)
 			lcd_print(' ');
 }
 
+//! @brief Show Status Screen
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |N 000/000D  Z000.0  |
+//! |B 000/000D  F100%   |
+//! |USB100% T0  t--:--  |
+//! |Status line.........|
+//! ----------------------
+//! N - nozzle temp symbol	LCD_STR_THERMOMETER
+//! D - Degree sysmbol		LCD_STR_DEGREE
+//! B - bed temp symbol 	LCD_STR_BEDTEMP
+//! F - feedrate symbol 	LCD_STR_FEEDRATE
+//! t - clock symbol 		LCD_STR_THERMOMETER
+//! @endcode
 void lcdui_print_status_screen(void)
 {
-//|01234567890123456789|
-//|N 000/000D  Z000.0  |
-//|B 000/000D  F100%   |
-//|USB100% T0  t--:--  |
-//|Status line.........|
-//----------------------
-//N - nozzle temp symbol LCD_STR_THERMOMETER
-//B - bed temp symbol LCD_STR_BEDTEMP
-//F - feedrate symbol LCD_STR_FEEDRATE
-//t - clock symbol LCD_STR_THERMOMETER
 
     lcd_set_cursor(0, 0); //line 0
 
@@ -1767,14 +1775,19 @@ static void lcd_cooldown()
 }
 
 
+//! @brief Show Extruder Info
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Nozzle FAN: 0000 RPM|	FAN c=10 r=1  SPEED c=3 r=1
+//! |Print FAN:  0000 RPM|	FAN c=10 r=1  SPEED c=3 r=1
+//! |Fil. Xd:000 Yd:000  |	Fil. c=4 r=1
+//! |Int:  000 Shut: 000 |	Int: c=4 r=1  Shut: c=4 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 void lcd_menu_extruder_info()                     // NOT static due to using inside "Marlin_main" module ("manage_inactivity()")
 {
-//|01234567890123456789|
-//|Nozzle FAN:      RPM|
-//|Print FAN:       RPM|
-//|Fil. Xd:    Yd:     |
-//|Int:      Shut:     |
-//----------------------
 	int fan_speed_RPM[2];
 	// Display Nozzle fan RPM
 	fan_speed_RPM[0] = 60*fan_speed[0];
@@ -1787,9 +1800,9 @@ void lcd_menu_extruder_info()                     // NOT static due to using ins
 	  "%S: %4d RPM\n"
 	  "%S:  %4d RPM\n"
 	 ),
-	 _i("Nozzle FAN"),
+	 _i("Nozzle FAN"), ////c=10 r=1
 	 fan_speed_RPM[0],
-	 _i("Print FAN"),
+	 _i("Print FAN"), ////c=10 r=1
 	 fan_speed_RPM[1]
 	);
 
@@ -1811,8 +1824,8 @@ void lcd_menu_extruder_info()                     // NOT static due to using ins
 			if (!moves_planned() && !IS_SD_PRINTING && !is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal))
 				pat9125_update();
 			lcd_printf_P(_N(
-				"Fil. Xd:%3d Yd:%3d\n"
-				"Int: %3d  Shut: %3d"
+				"Fil. Xd:%3d Yd:%3d\n" ////c=4 r=1
+				"Int: %3d  Shut: %3d" ////c=4 r=1  ////c=4 r=1
 			),
 				pat9125_x, pat9125_y,
 				pat9125_b, pat9125_s
@@ -1824,124 +1837,163 @@ void lcd_menu_extruder_info()                     // NOT static due to using ins
     menu_back_if_clicked();
 }
 
+//! @brief Show Fails Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Main               |	c=18 r=1
+//! | Last print         |	c=18 r=1
+//! | Total              |	c=18 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
 static void lcd_menu_fails_stats_mmu()
 {
 	MENU_BEGIN();
 	MENU_ITEM_BACK_P(_T(MSG_MAIN));
-	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_mmu_print);
-	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_mmu_total);
+	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_mmu_print); ////c=18 r=1
+	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_mmu_total); ////c=18 r=1
 	MENU_END();
 }
 
+//! @brief Show Last Print Failures Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Last print failures |	c=20 r=1
+//! | MMU fails:      000|	c=14 r=1
+//! | MMU load fails: 000|	c=14 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_mmu_print()
 {
-//01234567890123456789
-//Last print failures
-// MMU fails  000
-// MMU load fails  000
-//
-//////////////////////
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL);
     uint16_t load_fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL);
 	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d"), _i("Last print failures"), _i("MMU fails"), fails, _i("MMU load fails"), load_fails);
+	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d"), _i("Last print failures"), _i("MMU fails"), fails, _i("MMU load fails"), load_fails);  ////c=20 r=1  ////c=14 r=1 ////c=14 r=1
 	menu_back_if_clicked_fb();
 }
 
+//! @brief Show Total Failures Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Total failures      |	c=20 r=1
+//! | MMU fails:      000|	c=14 r=1
+//! | MMU load fails: 000|	c=14 r=1
+//! | MMU power fails:000|	c=14 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_mmu_total()
 {
-//01234567890123456789
-//Last print failures
-// MMU fails  000
-// MMU load fails  000
-//
-//////////////////////
 	mmu_command(MmuCmd::S3);
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL_TOT);
     uint16_t load_fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL_TOT);
 	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S %-3d"), _i("Total failures"), _i("MMU fails"), fails, _i("MMU load fails"), load_fails, _i("MMU power fails"), mmu_power_failures);
+	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S %-3d"), _i("Total failures"), _i("MMU fails"), fails, _i("MMU load fails"), load_fails, _i("MMU power fails"), mmu_power_failures);  ////c=20 r=1  ////c=14 r=1  ////c=14 r=1  ////c=14 r=1
 	menu_back_if_clicked_fb();
 }
 
 #if defined(TMC2130) && defined(FILAMENT_SENSOR)
+//! @brief Show Total Failures Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Total failures      |	c=20 r=1
+//! | Power failures: 000|	c=14 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! | Crash   X:000 Y:000|	c=7 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_total()
 {
-//01234567890123456789
-//Total failures
-// Power failures  000
-// Filam. runouts  000
-// Crash  X 000  Y 000
-//////////////////////
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint16_t power = eeprom_read_word((uint16_t*)EEPROM_POWER_COUNT_TOT);
     uint16_t filam = eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT);
     uint16_t crashX = eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT);
     uint16_t crashY = eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT);
 	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S  X %-3d  Y %-3d"), _i("Total failures"), _i("Power failures"), power, _i("Filam. runouts"), filam, _i("Crash"), crashX, crashY);
+	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S  X %-3d  Y %-3d"), _i("Total failures"), _i("Power failures"), power, _i("Filam. runouts"), filam, _i("Crash"), crashX, crashY);  ////c=20 r=1  ////c=14 r=1  ////c=14 r=1  ////c=7 r=1
 	menu_back_if_clicked_fb();
 }
 
+//! @brief Show Last Print Failures Statistics
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Last print failures |	c=20 r=1
+//! | Power failures: 000|	c=14 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! | Crash   X:000 Y:000|	c=7 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_print()
 {
-//01234567890123456789
-//Last print failures
-// Power failures  000
-// Filam. runouts  000
-// Crash  X 000  Y 000
-//////////////////////
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t power = eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT);
     uint8_t filam = eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT);
     uint8_t crashX = eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X);
     uint8_t crashY = eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_Y);
 	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S  X %-3d  Y %-3d"), _i("Last print failures"), _i("Power failures"), power, _i("Filam. runouts"), filam, _i("Crash"), crashX, crashY);
+	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S  X %-3d  Y %-3d"), _i("Last print failures"), _i("Power failures"), power, _i("Filam. runouts"), filam, _i("Crash"), crashX, crashY);  ////c=20 r=1  ////c=14 r=1  ////c=14 r=1  ////c=7 r=1
 	menu_back_if_clicked_fb();
 }
 
-/**
- * @brief Open fail statistics menu
- *
- * This version of function is used, when there is filament sensor,
- * power failure and crash detection.
- * There are Last print and Total menu items.
- */
+//! @brief Open fail statistics menu
+//! 
+//! This version of function is used, when there is filament sensor,
+//! power failure and crash detection.
+//! There are Last print and Total menu items.
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Main               |	c=18 r=1
+//! | Last print         |	c=18 r=1
+//! | Total              |	c=18 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
+
 static void lcd_menu_fails_stats()
 {
 	MENU_BEGIN();
 	MENU_ITEM_BACK_P(_T(MSG_MAIN));
-	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_print);
-	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_total);
+	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_print);  ////c=18 r=1
+	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_total);  ////c=18 r=1
 	MENU_END();
 }
 
 #elif defined(FILAMENT_SENSOR)
-/**
- * @brief Print last print and total filament run outs
- *
- * This version of function is used, when there is filament sensor,
- * but no other sensors (e.g. power failure, crash detection).
- *
- * Example screen:
- * @code
- * 01234567890123456789
- * Last print failures
- *  Filam. runouts  0
- * Total failures
- *  Filam. runouts  5
- * @endcode
- */
+//! 
+//! @brief Print last print and total filament run outs
+//! 
+//! This version of function is used, when there is filament sensor,
+//! but no other sensors (e.g. power failure, crash detection).
+//! 
+//! Example screen:
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Last print failures |	c=20 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! |Total failures      |	c=20 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats()
 {
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t filamentLast = eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT);
     uint16_t filamentTotal = eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT);
 	lcd_home();
-    lcd_printf_P(PSTR("Last print failures\n" " Filam. runouts  %-3d\n" "Total failures\n" " Filam. runouts  %-3d"), filamentLast, filamentTotal);
+    lcd_printf_P(PSTR("Last print failures\n" " Filam. runouts  %-3d\n" "Total failures\n" " Filam. runouts  %-3d"), filamentLast, filamentTotal);  ////c=20 r=1  ////c=14 r=1  ////c=20 r=1  ////c=14 r=1
     menu_back_if_clicked();
 }
 #else
@@ -1962,26 +2014,49 @@ extern char* __malloc_heap_start;
 extern char* __malloc_heap_end;
 #endif //DEBUG_STACK_MONITOR
 
+//! @brief Show Debug Information
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |RAM statistics      |	c=20 r=1
+//! | SP_min:        0000|	c=14 r=1
+//! | heap_start:    0000|	c=14 r=1
+//! | heap_end:      0000|	c=14 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_debug()
 {
 #ifdef DEBUG_STACK_MONITOR
 	lcd_home();
-	lcd_printf_P(PSTR("RAM statistics\n" " SP_min: 0x%04x\n" " heap_start: 0x%04x\n" " heap_end: 0x%04x"), SP_min, __malloc_heap_start, __malloc_heap_end);
+	lcd_printf_P(PSTR("RAM statistics\n" " SP_min: 0x%04x\n" " heap_start: 0x%04x\n" " heap_end: 0x%04x"), SP_min, __malloc_heap_start, __malloc_heap_end);  ////c=20 r=1  ////c=14 r=1  ////c=14 r=1  ////c=14 r=1
 #endif //DEBUG_STACK_MONITOR
 
 	menu_back_if_clicked_fb();
 }
 #endif /* DEBUG_BUILD */
 
+//! @brief Show Temperatures
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Nozzle:        000D|	c=14 r=1
+//! | Bed:           000D|	c=14 r=1
+//! | Ambient:       000D|	c=14 r=1
+//! | PINDA:         000D|	c=14 r=1
+//! ----------------------
+//! D - Degree sysmbol		LCD_STR_DEGREE
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_temperatures()
 {
 	lcd_timeoutToStatus.stop(); //infinite timeout
 	lcd_home();
-	lcd_printf_P(PSTR(" %S:   %d%c \n" " %S:      %d%c \n"), _i("Nozzle"), (int)current_temperature[0], '\x01', _i("Bed"), (int)current_temperature_bed, '\x01');
+	lcd_printf_P(PSTR(" %S:   %d%c \n" " %S:      %d%c \n"), _i("Nozzle"), (int)current_temperature[0], '\x01', _i("Bed"), (int)current_temperature_bed, '\x01');  ////c=14 r=1  ////c=14 r=1
 #ifdef AMBIENT_THERMISTOR
-	lcd_printf_P(PSTR(" %S:  %d%c\n" " PINDA:    %d%c"), _i("Ambient"), (int)current_temperature_ambient, '\x01', (int)current_temperature_pinda, '\x01');
+	lcd_printf_P(PSTR(" %S:  %d%c\n" " %S:    %d%c"), _i("Ambient"), (int)current_temperature_ambient, '\x01', _i("PINDA"), (int)current_temperature_pinda, '\x01');  ////c=14 r=1
 #else //AMBIENT_THERMISTOR
-	lcd_printf_P(PSTR(" PINDA:    %d%c"), (int)current_temperature_pinda, '\x01');
+	lcd_printf_P(PSTR(" %S:    %d%c"), _i("PINDA"), (int)current_temperature_pinda, '\x01');  ////c=14 r=1
 #endif //AMBIENT_THERMISTOR
 
     menu_back_if_clicked();
@@ -1992,22 +2067,44 @@ static void lcd_menu_temperatures()
 #define VOLT_DIV_R2 2370
 #define VOLT_DIV_FAC ((float)VOLT_DIV_R2 / (VOLT_DIV_R2 + VOLT_DIV_R1))
 #define VOLT_DIV_REF 5
+//! @brief Show Voltages
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |                    |
+//! | PWR:         00.0V |	c=12 r=1
+//! | Bed:         00.0V |	c=12 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_voltages()
 {
 	lcd_timeoutToStatus.stop(); //infinite timeout
 	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;
 	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)));
+	lcd_printf_P(PSTR(" $S:      %d.%01dV\n" " $S:      %d.%01dV"), _i("PWR"), (int)volt_pwr, (int)(10*fabs(volt_pwr - (int)volt_pwr)), _i("Bed"), (int)volt_bed, (int)(10*fabs(volt_bed - (int)volt_bed)));  ////c=12 r=1  ////c=12 r=1
     menu_back_if_clicked();
 }
 #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN
 
 #ifdef TMC2130
+//! @brief Show Belt Status
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Belt status        |	c=18 r=1
+//! |  X:            000 |
+//! |  Y:            000 |
+//! |                    |
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_belt_status()
 {
 	lcd_home();
-    lcd_printf_P(PSTR("%S\n" " X %d\n" " Y %d"), _i("Belt status"), eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_X)), eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_Y)));
+    lcd_printf_P(PSTR("%S\n" " X %d\n" " Y %d"), _i("Belt status"), eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_X)), eeprom_read_word((uint16_t*)(EEPROM_BELTSTATUS_Y)));  ////c=18 r=1
     menu_back_if_clicked();
 }
 #endif //TMC2130
@@ -2027,6 +2124,7 @@ static void lcd_menu_test_restore()
 }
 #endif //RESUME_DEBUG 
 
+//! @brief Show Preheat Menu
 static void lcd_preheat_menu()
 {
   MENU_BEGIN();
@@ -2052,6 +2150,78 @@ static void lcd_preheat_menu()
   MENU_END();
 }
 
+//! @brief Show Support Menu
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Main               |
+//! | Firmware:          |	c=18 r=1
+//! |  3.7.2.-2363       |	c=16 r=1
+//! | prusa3d.com        |	MSG_PRUSA3D
+//! | forum.prusa3d.com  |	MSG_PRUSA3D_FORUM
+//! | howto.prusa3d.com  |	MSG_PRUSA3D_HOWTO
+//! | --------------     |	STR_SEPARATOR
+//! | 1_75mm_MK3         |	FILAMENT_SIZE
+//! | howto.prusa3d.com  |	ELECTRONICS
+//! | howto.prusa3d.com  |	NOZZLE_TYPE
+//! | --------------     |	STR_SEPARATOR
+//! | Date:              |	c=17 r=1
+//! | MMM DD YYYY        |	__DATE__
+//! | --------------     |	STR_SEPARATOR
+//! @endcode
+//! 
+//! If MMU is connected
+//! 
+//! 	@code{.unparsed}
+//! 	| MMU2 connected     |	c=18 r=1
+//! 	|  FW: 1.0.6-7064523 |
+//! 	@endcode
+//! 
+//! If MMU is not connected
+//! 
+//! 	@code{.unparsed}
+//! 	| MMU2       N/A     |	c=18 r=1
+//! 	@endcode
+//! 
+//! If Flash Air is connected
+//! 
+//! 	@code{.unparsed}
+//! 	| --------------     |	STR_SEPARATOR
+//! 	| FlashAir IP Addr:  |	c=18 r=1
+//! 	|  192.168.1.100     |
+//! 	@endcode
+//! 
+//! @code{.unparsed}
+//! | --------------     |	STR_SEPARATOR
+//! | XYZ cal. details   |	MSG_XYZ_DETAILS
+//! | Extruder info      |	MSG_INFO_EXTRUDER
+//! | XYZ cal. details   |	MSG_INFO_SENSORS
+//! @endcode
+//! 
+//! If TMC2130 defined
+//! 
+//! 	@code{.unparsed}
+//! 	| Belt status        |	MSG_MENU_BELT_STATUS
+//! @endcode
+//! 
+//! @code{.unparsed}
+//! | Temperatures       |	MSG_MENU_TEMPERATURES
+//! @endcode
+//! 
+//! If Voltage Bed and PWR Pin are defined
+//! 
+//! 	@code{.unparsed}
+//! 	| Voltages           |	MSG_MENU_VOLTAGES
+//! 	@endcode
+//! 
+//! 
+//! If DEBUG_BUILD is defined
+//! 
+//! 	@code{.unparsed}
+//! 	| Debug              |	c=18 r=1
+//! 	@endcode
+//! ----------------------
+//! @endcode
 static void lcd_support_menu()
 {
 	typedef struct
@@ -2113,8 +2283,8 @@ static void lcd_support_menu()
 	MENU_ITEM_BACK_P(STR_SEPARATOR);
 	if (mmu_enabled)
 	{
-		MENU_ITEM_BACK_P(_i("MMU2 connected"));
-		MENU_ITEM_BACK_P(PSTR(" FW:"));
+		MENU_ITEM_BACK_P(_i("MMU2 connected"));  ////c=18 r=1
+		MENU_ITEM_BACK_P(PSTR(" FW:"));  ////c=17 r=1
 		if (((menu_item - 1) == menu_line) && lcd_draw_update)
 		{
 		    lcd_set_cursor(6, menu_row);
@@ -2131,7 +2301,7 @@ static void lcd_support_menu()
   // Show the FlashAir IP address, if the card is available.
   if (_md->is_flash_air) {
       MENU_ITEM_BACK_P(STR_SEPARATOR);
-      MENU_ITEM_BACK_P(PSTR("FlashAir IP Addr:"));
+      MENU_ITEM_BACK_P(PSTR("FlashAir IP Addr:"));  //c=18 r=1
 ///!      MENU_ITEM(back_RAM, _md->ip_str, 0);
   }
 
@@ -2152,7 +2322,7 @@ static void lcd_support_menu()
 #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN
 
 #ifdef DEBUG_BUILD
-  MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);
+  MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);////c=18 r=1
 #endif /* DEBUG_BUILD */
 
   #endif //MK1BP
@@ -2806,9 +2976,9 @@ if(0)
 //!
 //! @code{.unparsed}
 //! |01234567890123456789|
-//! |Filament used:      |
+//! |Filament used:      | c=18 r=1
 //! |         00.00m     |
-//! |Print time:         |
+//! |Print time:         | c=18 r=1
 //! |        00h 00m 00s |
 //! ----------------------
 //! @endcode
@@ -2817,12 +2987,13 @@ if(0)
 //!
 //! @code{.unparsed}
 //! |01234567890123456789|
-//! |Total filament :    |
+//! |Total filament :    | c=18 r=1
 //! |           000.00 m |
-//! |Total print time :  |
+//! |Total print time :  | c=18 r=1
 //! |     00d :00h :00 m |
 //! ----------------------
 //! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations. Translations missing for "d"days, "h"ours, "m"inutes", "s"seconds".
 void lcd_menu_statistics()
 {
 	if (IS_SD_PRINTING)
@@ -2839,7 +3010,7 @@ void lcd_menu_statistics()
 			"%8.2fm\n"
 			"%S:\n"
 			"%2dh %02dm %02ds"
-		),_i("Filament used"), _met, _i("Print time"), _h, _m, _s);
+		),_i("Filament used"), _met, _i("Print time"), _h, _m, _s);  ////c=18 r=1  ////c=18 r=1
 		menu_back_if_clicked_fb();
 	}
 	else
@@ -2946,17 +3117,20 @@ static void lcd_move_e()
 }
 
 
-//@brief Show measured Y distance of front calibration points from Y_MIN_POS
-//If those points are detected too close to edge of reachable area, their confidence is lowered.
-//This functionality is applied more often for MK2 printers.
+//! @brief Show measured Y distance of front calibration points from Y_MIN_POS
+//! If those points are detected too close to edge of reachable area, their confidence is lowered.
+//! This functionality is applied more often for MK2 printers.
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Y distance from min |	c=19 r=1
+//! | --------------     |	STR_SEPARATOR
+//! |Left:       00.00mm |	c=11 r=1
+//! |Right:      00.00mm |	c=11 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_xyz_y_min()
 {
-//|01234567890123456789|
-//|Y distance from min:|
-//|--------------------|
-//|Left:      N/A      |
-//|Right:     N/A      |
-//----------------------
 	float distanceMin[2];
     count_xyz_details(distanceMin);
 	lcd_home();
@@ -2966,15 +3140,15 @@ static void lcd_menu_xyz_y_min()
 	  "%S:\n"
 	  "%S:"
 	 ),
-	 _i("Y distance from min"),
+	 _i("Y distance from min"),  ////c=19 r=1
 	 separator,
-	 _i("Left"),
-	 _i("Right")
+	 _i("Left"),  ////c=11 r=1
+	 _i("Right")  ////c=11 r=1
 	);
 	for (uint8_t i = 0; i < 2; i++)
 	{
 		lcd_set_cursor(11,2+i);
-		if (distanceMin[i] >= 200) lcd_puts_P(_N("N/A"));
+		if (distanceMin[i] >= 200) lcd_puts_P(_N("N/A"));  ////c=3 r=1
 		else lcd_printf_P(_N("%6.2fmm"), distanceMin[i]);
 	}
     if (lcd_clicked())
@@ -2987,14 +3161,20 @@ float _deg(float rad)
 	return rad * 180 / M_PI;
 }
 
+//! @brief Show Measured XYZ Skew
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Measured skew: 0.00D|	c=13 r=1
+//! | --------------     |	STR_SEPARATOR
+//! |Slight skew:   0.12D|	c=13 r=1  c=4 r=1
+//! |Severe skew:   0.25D|	c=13 r=1  c=4 r=1
+//! ----------------------
+//! D - Degree sysmbol		LCD_STR_DEGREE
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_xyz_skew()
 {
-//|01234567890123456789|
-//|Measured skew:  N/A |
-//|--------------------|
-//|Slight skew:   0.12d|
-//|Severe skew:   0.25d|
-//----------------------
     float angleDiff = eeprom_read_float((float*)(EEPROM_XYZ_CAL_SKEW));
 	lcd_home();
 	lcd_printf_P(_N(
@@ -3003,10 +3183,10 @@ static void lcd_menu_xyz_skew()
 	  "%S:  %5.2f\x01\n"
 	  "%S:  %5.2f\x01"
 	 ),
-	 _i("Measured skew"),
+	 _i("Measured skew"),  ////c=13 r=1
 	 separator,
-	 _i("Slight skew"), _deg(bed_skew_angle_mild),
-	 _i("Severe skew"), _deg(bed_skew_angle_extreme)
+	 _i("Slight skew"), _deg(bed_skew_angle_mild),  ////c=13 r=1  c=4 r=1
+	 _i("Severe skew"), _deg(bed_skew_angle_extreme)  ////c=13 r=1  c=4 r=1
 	);
 	if (angleDiff < 100){
 		lcd_set_cursor(15,0);
@@ -3019,16 +3199,24 @@ static void lcd_menu_xyz_skew()
     if (lcd_clicked())
         menu_goto(lcd_menu_xyz_offset, 0, true, true);
 }
-/**
- * @brief Show measured bed offset from expected position
- */
+//! @brief Show measured bed offset from expected position
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |[0;0] point offset  |	c=20 r=1
+//! | --------------     |	STR_SEPARATOR
+//! |X:          000.00mm|	c=10 r=1
+//! |Y:          000.00mm|	c=10 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_xyz_offset()
 {
     lcd_set_cursor(0,0);
     lcd_puts_P(_i("[0;0] point offset"));////MSG_MEASURED_OFFSET
     lcd_puts_at_P(0, 1, separator);
-    lcd_puts_at_P(0, 2, PSTR("X"));
-    lcd_puts_at_P(0, 3, PSTR("Y"));
+    lcd_puts_at_P(0, 2, PSTR("X"));  ////c=10 r=1
+    lcd_puts_at_P(0, 3, PSTR("Y"));  ////c=10 r=1
 
     float vec_x[2];
     float vec_y[2];
@@ -3187,6 +3375,18 @@ void lcd_adjust_bed_reset(void)
 	_md->status = 0;
 }
 
+//! @brief Show Bed level correct
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Settings:           |	MSG_SETTINGS
+//! |Left side [um]:     |	MSG_BED_CORRECTION_LEFT
+//! |Right side[um]:     |	MSG_BED_CORRECTION_RIGHT
+//! |Front side[um]:     |	MSG_BED_CORRECTION_FRONT
+//! |Rear side [um]:     |	MSG_BED_CORRECTION_REAR
+//! |Reset               |	MSG_BED_CORRECTION_RESET
+//! ----------------------
+//! @endcode
 void lcd_adjust_bed(void)
 {
 	_menu_data_adjust_bed_t* _md = (_menu_data_adjust_bed_t*)&(menu_data[0]);
@@ -3224,6 +3424,16 @@ void lcd_adjust_bed(void)
     MENU_END();
 }
 
+//! @brief Show PID Extruder
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Set temperature:   |	MSG_SET_TEMPERATURE
+//! |                    |
+//! | 210                |
+//! |                    |
+//! ----------------------
+//! @endcode
 void pid_extruder()
 {
 	lcd_clear();