Przeglądaj źródła

Revert "Save 80B of flash and 8B of RAM and fix compiler warning:"

PavelSindler 5 lat temu
rodzic
commit
77426b563a

+ 1 - 1
Firmware/ConfigurationStore.h

@@ -21,7 +21,7 @@ FORCE_INLINE void Config_RetrieveSettings() { Config_ResetDefault(); Config_Prin
 #endif
 
 inline uint8_t calibration_status() { return eeprom_read_byte((uint8_t*)EEPROM_CALIBRATION_STATUS); }
-inline void calibration_status_store(uint8_t status) { eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS, status); }
+inline uint8_t calibration_status_store(uint8_t status) { eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS, status); }
 inline bool calibration_status_pinda() { return eeprom_read_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA); }
 
 #endif//CONFIG_STORE_H

+ 1 - 0
Firmware/LiquidCrystal_Prusa.cpp

@@ -499,6 +499,7 @@ inline size_t LiquidCrystal_Prusa::escape_write(uint8_t chr)
 		break;
 	}
 	escape_cnt = 0; // reset escape
+end:
 	return 1; // assume sucess
 }
 

+ 1 - 0
Firmware/Marlin.h

@@ -419,6 +419,7 @@ extern void fsensor_init();
 //estimated time to end of the print
 extern uint16_t print_time_remaining();
 extern uint8_t print_percent_done();
+static void print_time_remaining_init();
 
 #ifdef HOST_KEEPALIVE_FEATURE
 

+ 7 - 7
Firmware/Marlin_main.cpp

@@ -535,9 +535,8 @@ static bool saved_extruder_relative_mode = false;
 //=============================Routines======================================
 //===========================================================================
 
-static void get_arc_coordinates();
-static bool setTargetedHotend(int code);
-static void print_time_remaining_init();
+void get_arc_coordinates();
+bool setTargetedHotend(int code);
 
 void serial_echopair_P(const char *s_P, float v)
     { serialprintPGM(s_P); SERIAL_ECHO(v); }
@@ -803,6 +802,7 @@ int  er_progress = 0;
 void factory_reset(char level, bool quiet)
 {	
 	lcd_implementation_clear();
+	int cursor_pos = 0;
     switch (level) {
                    
         // Level 0: Language reset
@@ -1920,6 +1920,7 @@ void host_keepalive() {
 void loop()
 {
 	KEEPALIVE_STATE(NOT_BUSY);
+	bool stack_integrity = true;
 
 	if ((usb_printing_counter > 0) && ((millis()-_usb_timer) > 1000))
 	{
@@ -4277,11 +4278,10 @@ void process_commands()
 		// The move to the first calibration point.
 		current_position[X_AXIS] = pgm_read_float(bed_ref_points);
 		current_position[Y_AXIS] = pgm_read_float(bed_ref_points + 1);
+		bool clamped = world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]);
 
 		#ifdef SUPPORT_VERBOSITY
-		if (verbosity_level >= 1)
-		{
-		    bool clamped = world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]);
+		if (verbosity_level >= 1) {
 			clamped ? SERIAL_PROTOCOLPGM("First calibration point clamped.\n") : SERIAL_PROTOCOLPGM("No clamping for first calibration point.\n");
 		}
 		#endif //SUPPORT_VERBOSITY
@@ -9087,7 +9087,7 @@ void print_world_coordinates()
 
 void print_physical_coordinates()
 {
-	printf_P(_N("physical coordinates: (%.3f, %.3f, %.3f)\n"), st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS), st_get_position_mm(Z_AXIS));
+	printf_P(_N("physical coordinates: (%.3f, %.3f, %.3f)\n"), st_get_position_mm[X_AXIS], st_get_position_mm[Y_AXIS], st_get_position_mm[Z_AXIS]);
 }
 
 void print_mesh_bed_leveling_table()

+ 2 - 3
Firmware/adc.c

@@ -1,9 +1,8 @@
 //adc.c
 
 #include "adc.h"
-#include <stdio.h>
 #include <avr/io.h>
-#include <avr/pgmspace.h>
+
 
 uint8_t adc_state;
 uint8_t adc_count;
@@ -18,7 +17,7 @@ uint16_t adc_sim_mask;
 
 void adc_init(void)
 {
-	printf_P(PSTR("adc_init\n"));
+	printf(("adc_init\n"));
 	adc_sim_mask = 0x00;
 	ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
 	ADMUX |= (1 << REFS0);

+ 3 - 3
Firmware/language.c

@@ -63,7 +63,7 @@ uint8_t lang_select(uint8_t lang)
 			if (lang_check(_SEC_LANG_TABLE))
 				if (pgm_read_dword(((uint32_t*)(_SEC_LANG_TABLE + 12))) == pgm_read_dword(((uint32_t*)(_PRI_LANG_SIGNATURE)))) //signature valid
 				{
-					lang_table = (lang_table_t*)(_SEC_LANG_TABLE); // set table pointer
+					lang_table = _SEC_LANG_TABLE; // set table pointer
 					lang_selected = lang; // set language id
 				}
 		}
@@ -138,7 +138,7 @@ uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* off
 	if (lang == LANG_ID_SEC)
 	{
 		uint16_t ui = _SEC_LANG_TABLE; //table pointer
-		memcpy_P(header, (lang_table_t*)(_SEC_LANG_TABLE), sizeof(lang_table_header_t)); //read table header from progmem
+		memcpy_P(header, ui, sizeof(lang_table_header_t)); //read table header from progmem
 		if (offset) *offset = ui;
 		return (header->magic == LANG_MAGIC)?1:0; //return 1 if magic valid
 	}
@@ -147,7 +147,7 @@ uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* off
 	lang--;
 	while (1)
 	{
-		w25x20cl_rd_data(addr, (uint8_t*)(header), sizeof(lang_table_header_t)); //read table header from xflash
+		w25x20cl_rd_data(addr, header, sizeof(lang_table_header_t)); //read table header from xflash
 		if (header->magic != LANG_MAGIC) break; //break if not valid
 		if (offset) *offset = addr;
 		if (--lang == 0) return 1;

+ 28 - 41
Firmware/language.h

@@ -1,4 +1,3 @@
-/** @file */
 //language.h
 #ifndef LANGUAGE_H
 #define LANGUAGE_H
@@ -23,14 +22,11 @@
 #define STRINGIFY_(n) #n
 #define STRINGIFY(n) STRINGIFY_(n)
 
-/** @def PROGMEM_I2
- *  @brief section progmem0 will be used for localized translated strings */
+//section progmem0 will be used for localized translated strings
 #define PROGMEM_I2 __attribute__((section(".progmem0")))
-/** @def PROGMEM_I1
- *  @brief section progmem1 will be used for localized strings in english */
+//section progmem1 will be used for localized strings in english
 #define PROGMEM_I1 __attribute__((section(".progmem1")))
-/** @def PROGMEM_N1
- *  @brief section progmem2 will be used for not localized strings in english */
+//section progmem2 will be used for not localized strings in english
 #define PROGMEM_N1 __attribute__((section(".progmem2")))
 
 #if (LANG_MODE == 0) //primary language only
@@ -47,7 +43,7 @@
 #define _N(s) (__extension__({static const char __c[] PROGMEM_N1 = s; &__c[0];}))
 #define _n(s) _N(s)
 
-/** @brief lang_table_header_t structure - (size= 16byte) */
+//lang_table_header_t structure - (size= 16byte)
 typedef struct
 {
 	uint32_t magic;      //+0 
@@ -58,76 +54,67 @@ typedef struct
 	uint32_t signature;  //+12
 } lang_table_header_t;
 
-/** @brief lang_table_t structure - (size= 16byte + 2*count) */
+//lang_table_t structure - (size= 16byte + 2*count)
 typedef struct
 {
 	lang_table_header_t header;
 	uint16_t table[];
 } lang_table_t;
 
-/** @name Language indices into their particular symbol tables.*/
-///@{
+// Language indices into their particular symbol tables.
 #define LANG_ID_PRI 0
 #define LANG_ID_SEC 1
-///@}
 
-/** @def LANG_ID_FORCE_SELECTION
- *  @brief Language is not defined and it shall be selected from the menu.*/
+// Language is not defined and it shall be selected from the menu.
 #define LANG_ID_FORCE_SELECTION 254
 
-/** @def LANG_ID_UNDEFINED
- *  @brief Language is not defined on a virgin RAMBo board. */
+// Language is not defined on a virgin RAMBo board.
 #define LANG_ID_UNDEFINED 255
 
-/** @def LANG_ID_DEFAULT
- *  @brief Default language ID, if no language is selected. */
+// Default language ID, if no language is selected.
 #define LANG_ID_DEFAULT LANG_ID_PRI
 
-/** @def LANG_MAGIC
- *  @brief Magic number at begin of lang table. */
+// Magic number at begin of lang table.
 #define LANG_MAGIC 0x4bb45aa5
 
-/** @name Language codes (ISO639-1)*/
-///@{
-#define LANG_CODE_XX 0x3f3f //!<'??'
-#define LANG_CODE_EN 0x656e //!<'en'
-#define LANG_CODE_CZ 0x6373 //!<'cs'
-#define LANG_CODE_DE 0x6465 //!<'de'
-#define LANG_CODE_ES 0x6573 //!<'es'
-#define LANG_CODE_IT 0x6974 //!<'it'
-#define LANG_CODE_PL 0x706c //!<'pl'
-///@}
+// Language codes (ISO639-1)
+#define LANG_CODE_XX 0x3f3f //'??'
+#define LANG_CODE_EN 0x656e //'en'
+#define LANG_CODE_CZ 0x6373 //'cs'
+#define LANG_CODE_DE 0x6465 //'de'
+#define LANG_CODE_ES 0x6573 //'es'
+#define LANG_CODE_IT 0x6974 //'it'
+#define LANG_CODE_PL 0x706c //'pl'
 
 #if defined(__cplusplus)
 extern "C" {
 #endif //defined(__cplusplus)
 
-/** @brief Currectly active language selection.*/
+// Currectly active language selection.
 extern uint8_t lang_selected;
 
 #if (LANG_MODE != 0)
 extern const char _SEC_LANG[LANG_SIZE_RESERVED];
 extern const char* lang_get_translation(const char* s);
-/** @def _SEC_LANG_TABLE
- *  @brief Align table to start of 256 byte page */
 #define _SEC_LANG_TABLE ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00)
+//extern const uint32_t _PRI_LANG_SIGNATURE;
 #endif //(LANG_MODE != 0)
 
-/** @brief selects language, eeprom is updated in case of success */
+//selects language, eeprom is updated in case of success
 extern uint8_t lang_select(uint8_t lang);
-/** @brief performs checksum test of secondary language data */
+//performs checksum test of secondary language data
 extern uint8_t lang_check(uint16_t addr);
-/** @return total number of languages (primary + all in xflash) */
+//returns total number of languages (primary + all in xflash)
 extern uint8_t lang_get_count(void);
-/** @brief reads lang table header and offset in xflash or progmem */
+//reads lang table header and offset in xflash or progmem
 extern uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* offset);
-/** @brief reads lang code from xflash or progmem */
+//reads lang code from xflash or progmem
 extern uint16_t lang_get_code(uint8_t lang);
-/** @return localized language name (text for menu item) */
+//returns localized language name (text for menu item)
 extern const char* lang_get_name_by_code(uint16_t code);
-/** @brief reset language to "LANG_ID_FORCE_SELECTION", epprom is updated */
+//reset language to "LANG_ID_FORCE_SELECTION", epprom is updated
 extern void lang_reset(void);
-/** @retval 1 language is selected */
+//returns 1 if language is selected
 extern uint8_t lang_is_selected(void);
 
 #ifdef DEBUG_SEC_LANG

+ 2 - 3
Firmware/sm4.c

@@ -3,10 +3,9 @@
 #include "sm4.h"
 #include <avr/io.h>
 #include <avr/pgmspace.h>
-#include <math.h>
-#include "Arduino.h"
 
 #include "boards.h"
+#define bool int8_t
 #define false 0
 #define true 1
 #include "Configuration_prusa.h"
@@ -192,4 +191,4 @@ uint16_t sm4_line_xyze_ui(uint16_t dx, uint16_t dy, uint16_t dz, uint16_t de)
 }
 
 
-#endif //NEW_XYZCAL
+#endif //NEW_XYZCAL

+ 1 - 11
Firmware/temperature.cpp

@@ -205,16 +205,6 @@ unsigned long watchmillis[EXTRUDERS] = ARRAY_BY_EXTRUDERS(0,0,0);
 //=============================   functions      ============================
 //===========================================================================
 
-#if (defined (TEMP_RUNAWAY_BED_HYSTERESIS) && TEMP_RUNAWAY_BED_TIMEOUT > 0) || (defined (TEMP_RUNAWAY_EXTRUDER_HYSTERESIS) && TEMP_RUNAWAY_EXTRUDER_TIMEOUT > 0)
-static float temp_runaway_status[4];
-static float temp_runaway_target[4];
-static float temp_runaway_timer[4];
-static int temp_runaway_error_counter[4];
-
-static void temp_runaway_check(int _heater_id, float _target_temperature, float _current_temperature, float _output, bool _isbed);
-static void temp_runaway_stop(bool isPreheat, bool isBed);
-#endif
-
   void PID_autotune(float temp, int extruder, int ncycles)
   {
   pid_number_of_cycles = ncycles;
@@ -1483,7 +1473,7 @@ void bed_min_temp_error(void) {
     }
 #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
     Stop();
-#endif
+#endif*/
 }
 
 #ifdef HEATER_0_USES_MAX6675

+ 10 - 0
Firmware/temperature.h

@@ -189,6 +189,16 @@ FORCE_INLINE bool isCoolingBed() {
 #error Invalid number of extruders
 #endif
 
+#if (defined (TEMP_RUNAWAY_BED_HYSTERESIS) && TEMP_RUNAWAY_BED_TIMEOUT > 0) || (defined (TEMP_RUNAWAY_EXTRUDER_HYSTERESIS) && TEMP_RUNAWAY_EXTRUDER_TIMEOUT > 0)
+static float temp_runaway_status[4];
+static float temp_runaway_target[4];
+static float temp_runaway_timer[4];
+static int temp_runaway_error_counter[4];
+
+void temp_runaway_check(int _heater_id, float _target_temperature, float _current_temperature, float _output, bool _isbed);
+void temp_runaway_stop(bool isPreheat, bool isBed);
+#endif
+
 int getHeaterPower(int heater);
 void disable_heater();
 void setWatch();

+ 1 - 1
Firmware/tmc2130.cpp

@@ -878,7 +878,7 @@ void tmc2130_set_wave(uint8_t axis, uint8_t amp, uint8_t fac1000)
 	uint8_t x[3] = {255,255,255};  //X segment bounds (MSLUTSEL)
 	uint8_t s = 0;                 //current segment
 	int8_t b;                      //encoded bit value
-    int8_t dA;                     //delta value
+	uint8_t dA;                    //delta value
 	int i;                         //microstep index
 	uint32_t reg;                  //tmc2130 register
 	tmc2130_wr_MSLUTSTART(axis, 0, amp);

+ 1 - 1
Firmware/uart2.c

@@ -41,7 +41,7 @@ void uart2_init(void)
 	fdev_setup_stream(uart2io, uart2_putchar, uart2_getchar, _FDEV_SETUP_WRITE | _FDEV_SETUP_READ); //setup uart2 i/o stream
 }
 
-void uart2_rx_clr(void)
+uint8_t uart2_rx_clr(void)
 {
 	rbuf_w(uart2_ibuf) = 0;
 	rbuf_r(uart2_ibuf) = 0;

+ 2 - 2
Firmware/uart2.h

@@ -18,7 +18,7 @@ extern FILE _uart2io;
 
 extern void uart2_init(void);
 
-extern void uart2_rx_clr(void);
+extern uint8_t uart2_rx_clr(void);
 
 extern uint8_t uart2_rx_ok(void);
 
@@ -26,4 +26,4 @@ extern uint8_t uart2_rx_ok(void);
 #if defined(__cplusplus)
 }
 #endif //defined(__cplusplus)
-#endif //_UART2_H
+#endif //_UART2_H

+ 90 - 161
Firmware/ultralcd.cpp

@@ -143,8 +143,6 @@ int8_t FSensorStateMenu = 1;
 
 int8_t CrashDetectMenu = 1;
 
-static unsigned char blink = 0;   //!< Variable for visualization of fan rotation in GLCD
-
 extern void fsensor_block();
 extern void fsensor_unblock();
 
@@ -211,7 +209,6 @@ static const char* lcd_display_message_fullscreen_nonBlocking_P(const char *msg,
 
 /* Different menus */
 static void lcd_status_screen();
-static void lcd_language_menu();
 #ifdef ULTIPANEL
 extern bool powersupply;
 static void lcd_main_menu();
@@ -240,49 +237,6 @@ static void lcd_menu_xyz_offset();
 static void lcd_menu_fails_stats();
 #endif //TMC2130 or PAT9125
 
-static void lcd_selftest_v();
-static bool lcd_selfcheck_endstops();
-
-#ifdef TMC2130
-static void reset_crash_det(char axis);
-static bool lcd_selfcheck_axis_sg(char axis);
-static bool lcd_selfcheck_axis(int _axis, int _travel);
-#else
-static bool lcd_selfcheck_endstops();
-static bool lcd_selfcheck_axis(int _axis, int _travel);
-static bool lcd_selfcheck_pulleys(int axis);
-#endif //TMC2130
-
-static bool lcd_selfcheck_check_heater(bool _isbed);
-static int  lcd_selftest_screen(int _step, int _progress, int _progress_scale, bool _clear, int _delay);
-static void lcd_selftest_screen_step(int _row, int _col, int _state, const char *_name, const char *_indicator);
-static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite);
-static bool lcd_selftest_fan_dialog(int _fan);
-static bool lcd_selftest_fsensor();
-static void lcd_selftest_error(int _error_no, const char *_error_1, const char *_error_2);
-static void lcd_colorprint_change();
-static int get_ext_nr();
-static void extr_adj_0();
-static void extr_adj_1();
-static void extr_adj_2();
-static void extr_adj_3();
-static void fil_load_menu();
-static void fil_unload_menu();
-static void extr_unload_0();
-static void extr_unload_1();
-static void extr_unload_2();
-static void extr_unload_3();
-static void lcd_disable_farm_mode();
-static void lcd_set_fan_check();
-static char snmm_stop_print_menu();
-#ifdef SDCARD_SORT_ALPHA
- static void lcd_sort_type_set();
-#endif
-static float count_e(float layer_heigth, float extrusion_width, float extrusion_length);
-static void lcd_babystep_z();
-static void lcd_send_status();
-static void lcd_connect_printer();
-
 void lcd_finishstatus();
 
 #ifdef DOGLCD
@@ -390,7 +344,7 @@ bool lcd_oldcardstatus;
 #endif //ULTIPANEL
 
 menuFunc_t currentMenu = lcd_status_screen; /* function pointer to the currently active menu */
-ShortTimer lcd_next_update_millis;
+uint32_t lcd_next_update_millis;
 uint8_t lcd_status_update_delay;
 bool ignore_click = false;
 bool wait_for_unclick;
@@ -2528,8 +2482,8 @@ static void lcd_menu_xyz_skew()
 //|01234567890123456789|
 //|Measured skew:  N/A |
 //|--------------------|
-//|Slight skew:   0.12d|
-//|Severe skew:   0.25d|
+//|Slight skew:   0.12|
+//|Severe skew:   0.25|
 //----------------------
     float angleDiff = eeprom_read_float((float*)(EEPROM_XYZ_CAL_SKEW));
 	lcd_printf_P(_N(
@@ -6545,7 +6499,8 @@ bool lcd_selftest()
 	}
 	lcd_reset_alert_level();
 	enquecommand_P(PSTR("M84"));
-	lcd_update_enable(true);
+	lcd_implementation_clear();
+	lcd_next_update_millis = millis() + LCD_UPDATE_INTERVAL;
 	
 	if (_result)
 	{
@@ -7254,7 +7209,7 @@ static bool lcd_selftest_fan_dialog(int _fan)
 static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bool _clear, int _delay)
 {
 
-    lcd_update_enable(false);
+	lcd_next_update_millis = millis() + (LCD_UPDATE_INTERVAL * 10000);
 
 	int _step_block = 0;
 	const char *_indicator = (_progress > _progress_scale) ? "-" : "|";
@@ -7455,7 +7410,6 @@ static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr,
 void lcd_init()
 {
   lcd_implementation_init();
-  lcd_next_update_millis.start();
 
 #ifdef NEWPANEL
   SET_INPUT(BTN_EN1);
@@ -7537,8 +7491,7 @@ void lcd_update_enable(bool enabled)
             else
                 lcd_set_custom_characters_arrows();
       #endif
-            // Force the keypad update now.
-            lcd_update(2,true);
+            lcd_update(2);
         } else {
             // Clear the LCD always, or let it to the caller?
         }
@@ -7563,121 +7516,96 @@ static inline bool forced_menu_expire()
     return retval;
 }
 
-static inline void debugBlink()
+void lcd_update(uint8_t lcdDrawUpdateOverride)
 {
-#ifdef DEBUG_BLINK_ACTIVE
-        static bool active_led = false;
-        active_led = !active_led;
-        pinMode(LED_PIN, OUTPUT);
-        digitalWrite(LED_PIN, active_led?HIGH:LOW);
-#endif //DEBUG_BLINK_ACTIVE
-}
 
-static inline void handleReprapKeyboard()
-{
-#ifdef REPRAPWORLD_KEYPAD
-        if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)
-        {
-            reprapworld_keypad_move_z_up();
-        }
-        if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN)
-        {
-            reprapworld_keypad_move_z_down();
-        }
-        if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT)
-        {
-            reprapworld_keypad_move_x_left();
-        }
-        if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT)
-        {
-            reprapworld_keypad_move_x_right();
-        }
-        if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)
-        {
-            reprapworld_keypad_move_y_down();
-        }
-        if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)
-        {
-            reprapworld_keypad_move_y_up();
-        }
-        if (REPRAPWORLD_KEYPAD_MOVE_HOME)
-        {
-            reprapworld_keypad_move_home();
-        }
-#endif
-}
+	if (lcdDrawUpdate < lcdDrawUpdateOverride)
+		lcdDrawUpdate = lcdDrawUpdateOverride;
+
+	if (!lcd_update_enabled)
+		return;
 
-static inline void readSlowButtons()
-{
 #ifdef LCD_HAS_SLOW_BUTTONS
-    slow_buttons = lcd_implementation_read_slow_buttons(); // buttons which take too long to read in interrupt context
+  slow_buttons = lcd_implementation_read_slow_buttons(); // buttons which take too long to read in interrupt context
 #endif
-}
-
-/**
- * @brief Handle keyboard input and update display
- *
- * @param lcdDrawUpdateOverride
- * @param forceRedraw if true, force redraw of display regardless of timer
- */
-void lcd_update(uint8_t lcdDrawUpdateOverride, bool forceRedraw)
-{
-
-    if (lcdDrawUpdate < lcdDrawUpdateOverride)
-    {
-        lcdDrawUpdate = lcdDrawUpdateOverride;
-    }
-
-    if (!lcd_update_enabled) return;
-
-    readSlowButtons();
-    lcd_buttons_update();
+  
+  lcd_buttons_update();
 
 #if (SDCARDDETECT > 0)
-    if ((IS_SD_INSERTED != lcd_oldcardstatus && lcd_detected()))
-    {
-        lcdDrawUpdate = 2;
-        lcd_oldcardstatus = IS_SD_INSERTED;
-        lcd_implementation_init( // to maybe revive the LCD if static electricity killed it.
+  if ((IS_SD_INSERTED != lcd_oldcardstatus && lcd_detected()))
+  {
+	  lcdDrawUpdate = 2;
+	  lcd_oldcardstatus = IS_SD_INSERTED;
+	  lcd_implementation_init( // to maybe revive the LCD if static electricity killed it.
 #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT)
-            currentMenu == lcd_status_screen
+		  currentMenu == lcd_status_screen
 #endif
-            );
+	  );
 
-        if (lcd_oldcardstatus)
-        {
-            card.initsd();
-            LCD_MESSAGERPGM(_i("Card inserted"));////MSG_SD_INSERTED c=0 r=0
-        }
-        else
-        {
-            card.release();
-            LCD_MESSAGERPGM(_i("Card removed"));////MSG_SD_REMOVED c=0 r=0
-        }
-    }
-#endif //(SDCARDDETECT > 0)
+	  if (lcd_oldcardstatus)
+	  {
+		  card.initsd();
+		  LCD_MESSAGERPGM(_i("Card inserted"));////MSG_SD_INSERTED c=0 r=0
+		  //get_description();
+	  }
+	  else
+	  {
+		  card.release();
+		  LCD_MESSAGERPGM(_i("Card removed"));////MSG_SD_REMOVED c=0 r=0
+	  }
+  }
+#endif//CARDINSERTED
 
-    if (lcd_next_update_millis.expired(LCD_UPDATE_INTERVAL) || forceRedraw)
-    {
-        lcd_next_update_millis.start();
-        debugBlink();
+  if (lcd_next_update_millis < millis())
+  {
+#ifdef DEBUG_BLINK_ACTIVE
+	static bool active_led = false;
+	active_led = !active_led;
+	pinMode(LED_PIN, OUTPUT);
+	digitalWrite(LED_PIN, active_led?HIGH:LOW);
+#endif //DEBUG_BLINK_ACTIVE
 
 #ifdef ULTIPANEL
-        handleReprapKeyboard();
+#ifdef REPRAPWORLD_KEYPAD
+	  if (REPRAPWORLD_KEYPAD_MOVE_Z_UP) {
+		  reprapworld_keypad_move_z_up();
+	  }
+	  if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN) {
+		  reprapworld_keypad_move_z_down();
+	  }
+	  if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT) {
+		  reprapworld_keypad_move_x_left();
+	  }
+	  if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT) {
+		  reprapworld_keypad_move_x_right();
+	  }
+	  if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN) {
+		  reprapworld_keypad_move_y_down();
+	  }
+	  if (REPRAPWORLD_KEYPAD_MOVE_Y_UP) {
+		  reprapworld_keypad_move_y_up();
+	  }
+	  if (REPRAPWORLD_KEYPAD_MOVE_HOME) {
+		  reprapworld_keypad_move_home();
+	  }
+#endif
+	  if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP)
+	  {
+      if (lcdDrawUpdate == 0)
+		    lcdDrawUpdate = 1;
+		  encoderPosition += encoderDiff / ENCODER_PULSES_PER_STEP;
+		  encoderDiff = 0;
+		  lcd_timeoutToStatus.start();
+	  }
 
-        if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP)
-        {
-            if (lcdDrawUpdate == 0) lcdDrawUpdate = 1;
-            encoderPosition += encoderDiff / ENCODER_PULSES_PER_STEP;
-            encoderDiff = 0;
-            lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS;
-            lcd_timeoutToStatus.start();
-        }
-    	  if (LCD_CLICKED) lcd_timeoutToStatus.start();
+	  if (LCD_CLICKED) lcd_timeoutToStatus.start();
 #endif//ULTIPANEL
 
-        (*currentMenu)();
-        lcd_implementation_update_indicators();
+	  (*currentMenu)();
+
+#ifdef LCD_HAS_STATUS_INDICATORS
+	  lcd_implementation_update_indicators();
+#endif
 
 #ifdef ULTIPANEL
 	  if (z_menu_expired() || other_menu_expired() || forced_menu_expire())
@@ -7695,16 +7623,17 @@ void lcd_update(uint8_t lcdDrawUpdateOverride, bool forceRedraw)
 		  lcdDrawUpdate = 2;
 	  }
 #endif//ULTIPANEL
-        if (lcdDrawUpdate == 2) lcd_implementation_clear();
-        if (lcdDrawUpdate) lcdDrawUpdate--;
-    }
-    if (!SdFatUtil::test_stack_integrity()) stack_error();
+	  if (lcdDrawUpdate == 2) lcd_implementation_clear();
+	  if (lcdDrawUpdate) lcdDrawUpdate--;
+	  lcd_next_update_millis = millis() + LCD_UPDATE_INTERVAL;
+	  }
+	if (!SdFatUtil::test_stack_integrity()) stack_error();
 #ifdef DEBUG_STEPPER_TIMER_MISSED
-    if (stepper_timer_overflow_state) stepper_timer_overflow();
+  if (stepper_timer_overflow_state) stepper_timer_overflow();
 #endif /* DEBUG_STEPPER_TIMER_MISSED */
-    lcd_ping(); //check that we have received ping command if we are in farm mode
-    lcd_send_status();
-    if (lcd_commands_type == LCD_COMMAND_V2_CAL) lcd_commands();
+	lcd_ping(); //check that we have received ping command if we are in farm mode
+	lcd_send_status();
+	if (lcd_commands_type == LCD_COMMAND_V2_CAL) lcd_commands();
 }
 
 void lcd_printer_connected() {

+ 47 - 3
Firmware/ultralcd.h

@@ -10,7 +10,9 @@ extern int lcd_printf_P(const char* format, ...);
 
 #ifdef ULTRA_LCD
 
-  void lcd_update(uint8_t lcdDrawUpdateOverride = 0, bool forceRedraw = false);
+	static void lcd_language_menu();
+
+  void lcd_update(uint8_t lcdDrawUpdateOverride = 0);
   // Call with a false parameter to suppress the LCD update from various places like the planner or the temp control.
   void lcd_update_enable(bool enable);
   void lcd_init();
@@ -38,8 +40,27 @@ extern int lcd_printf_P(const char* format, ...);
 //void lcd_mylang();
   bool lcd_detected(void);
 
+  static void lcd_selftest_v();
   extern bool lcd_selftest();
-
+  static bool lcd_selfcheck_endstops();
+
+#ifdef TMC2130
+  static void reset_crash_det(char axis);
+  static bool lcd_selfcheck_axis_sg(char axis);
+  static bool lcd_selfcheck_axis(int _axis, int _travel);
+#else
+  static bool lcd_selfcheck_endstops();
+  static bool lcd_selfcheck_axis(int _axis, int _travel);
+  static bool lcd_selfcheck_pulleys(int axis);
+#endif //TMC2130
+
+  static bool lcd_selfcheck_check_heater(bool _isbed);
+  static int  lcd_selftest_screen(int _step, int _progress, int _progress_scale, bool _clear, int _delay);
+  static void lcd_selftest_screen_step(int _row, int _col, int _state, const char *_name, const char *_indicator);
+  static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite);
+  static bool lcd_selftest_fan_dialog(int _fan);
+  static bool lcd_selftest_fsensor();
+  static void lcd_selftest_error(int _error_no, const char *_error_1, const char *_error_2);
   void lcd_menu_statistics(); 
 
   extern const char* lcd_display_message_fullscreen_P(const char *msg, uint8_t &nlines);
@@ -66,6 +87,7 @@ extern int lcd_printf_P(const char* format, ...);
   void lcd_setcontrast(uint8_t value);
 #endif
 
+  static unsigned char blink = 0;	// Variable for visualization of fan rotation in GLCD
 
   #define LCD_MESSAGEPGM(x) lcd_setstatuspgm(PSTR(x))
   #define LCD_ALERTMESSAGEPGM(x) lcd_setalertstatuspgm(PSTR(x))
@@ -221,11 +243,30 @@ extern void lcd_implementation_print_at(uint8_t x, uint8_t y, const char *str);
 
 
 void change_extr(int extr);
+static void lcd_colorprint_change();
+static int get_ext_nr();
 void extr_adj(int extruder);
-
+static void extr_adj_0();
+static void extr_adj_1();
+static void extr_adj_2();
+static void extr_adj_3();
+static void fil_load_menu();
+static void fil_unload_menu();
+static void extr_unload_0();
+static void extr_unload_1();
+static void extr_unload_2();
+static void extr_unload_3();
+static void lcd_disable_farm_mode();
+static void lcd_set_fan_check();
 void extr_unload_all(); 
 void extr_unload_used();
 void extr_unload();
+static char snmm_stop_print_menu();
+#ifdef SDCARD_SORT_ALPHA
+ static void lcd_sort_type_set();
+#endif
+static float count_e(float layer_heigth, float extrusion_width, float extrusion_length);
+static void lcd_babystep_z();
 
 void stack_error();
 void lcd_printer_connected();
@@ -270,4 +311,7 @@ void lcd_language();
 void lcd_wizard();
 void lcd_wizard(int state);
 
+static void lcd_send_status();
+static void lcd_connect_printer();
+
 #endif //ULTRALCD_H

+ 2 - 3
Firmware/ultralcd_implementation_hitachi_HD44780.h

@@ -1390,10 +1390,9 @@ static void lcd_implementation_quick_feedback()
 #endif
 }
 
-
+#ifdef LCD_HAS_STATUS_INDICATORS
 static void lcd_implementation_update_indicators()
 {
-#ifdef LCD_HAS_STATUS_INDICATORS
   #if defined(LCD_I2C_PANELOLU2) || defined(LCD_I2C_VIKI)
     //set the LEDS - referred to as backlights by the LiquidTWI2 library 
     static uint8_t ledsprev = 0;
@@ -1409,8 +1408,8 @@ static void lcd_implementation_update_indicators()
       ledsprev = leds;
     }
   #endif
-#endif
 }
+#endif
 
 #ifdef LCD_HAS_SLOW_BUTTONS
 extern uint32_t blocking_enc;

+ 1 - 1
Firmware/uni_avr_rpi.h

@@ -1,4 +1,5 @@
 // unification for AVR and RPI
+#define __AVR
 
 #ifdef __AVR
 	//#include "Arduino.h"
@@ -28,4 +29,3 @@
 	void print(int v) { printf("%d", v); }
 	void print(float v) { printf("%f", v); }
 #endif //RC522_RPI
-

+ 2 - 2
Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h

@@ -96,12 +96,12 @@
 #define MANUAL_FEEDRATE {2700, 2700, 1000, 100}   // set the speeds for manual moves (mm/min)
 
 //Silent mode limits
-#define SILENT_MAX_ACCEL  960ul // max axxeleration in silent mode in mm/s^2
+#define SILENT_MAX_ACCEL  960 // max axxeleration in silent mode in mm/s^2
 #define SILENT_MAX_ACCEL_ST (100*SILENT_MAX_ACCEL) // max accel in steps/s^2
 #define SILENT_MAX_FEEDRATE 172  //max feedrate in mm/s, because mode switched to normal for homming , this value limits also homing, it should be greater (172mm/s=9600mm/min>2700mm/min)
 
 //Normal mode limits
-#define NORMAL_MAX_ACCEL 2500ul // Y-axis max axxeleration in normal mode in mm/s^2
+#define NORMAL_MAX_ACCEL 2500 // Y-axis max axxeleration in normal mode in mm/s^2
 #define NORMAL_MAX_ACCEL_ST (100*NORMAL_MAX_ACCEL) // max accel in steps/s^2
 #define NORMAL_MAX_FEEDRATE 200  //max feedrate in mm/s, because mode switched to normal for homming , this value limits also homing, it should be greater (172mm/s=9600mm/min>2700mm/min)
 

+ 2 - 2
Firmware/variants/1_75mm_MK3-MMU-EINSy10a-E3Dv6full.h

@@ -97,12 +97,12 @@
 #define MANUAL_FEEDRATE {2700, 2700, 1000, 100}   // set the speeds for manual moves (mm/min)
 
 //Silent mode limits
-#define SILENT_MAX_ACCEL  960ul // max axxeleration in silent mode in mm/s^2
+#define SILENT_MAX_ACCEL  960 // max axxeleration in silent mode in mm/s^2
 #define SILENT_MAX_ACCEL_ST (100*SILENT_MAX_ACCEL) // max accel in steps/s^2
 #define SILENT_MAX_FEEDRATE 172  //max feedrate in mm/s, because mode switched to normal for homming , this value limits also homing, it should be greater (172mm/s=9600mm/min>2700mm/min)
 
 //Normal mode limits
-#define NORMAL_MAX_ACCEL 2500ul // Y-axis max axxeleration in normal mode in mm/s^2
+#define NORMAL_MAX_ACCEL 2500 // Y-axis max axxeleration in normal mode in mm/s^2
 #define NORMAL_MAX_ACCEL_ST (100*NORMAL_MAX_ACCEL) // max accel in steps/s^2
 #define NORMAL_MAX_FEEDRATE 200  //max feedrate in mm/s, because mode switched to normal for homming , this value limits also homing, it should be greater (172mm/s=9600mm/min>2700mm/min)