From 77426b563a06a821e5d0189a6ffbea42e71027f8 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 17 Jul 2018 11:28:44 +0200 Subject: [PATCH] Revert "Save 80B of flash and 8B of RAM and fix compiler warning:" --- Firmware/ConfigurationStore.h | 2 +- Firmware/LiquidCrystal_Prusa.cpp | 1 + Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 14 +- Firmware/adc.c | 5 +- Firmware/language.c | 6 +- Firmware/language.h | 69 ++--- Firmware/sm4.c | 5 +- Firmware/temperature.cpp | 12 +- Firmware/temperature.h | 10 + Firmware/tmc2130.cpp | 2 +- Firmware/uart2.c | 2 +- Firmware/uart2.h | 4 +- Firmware/ultralcd.cpp | 251 +++++++----------- Firmware/ultralcd.h | 48 +++- .../ultralcd_implementation_hitachi_HD44780.h | 5 +- Firmware/uni_avr_rpi.h | 2 +- .../variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 4 +- .../1_75mm_MK3-MMU-EINSy10a-E3Dv6full.h | 4 +- 19 files changed, 203 insertions(+), 244 deletions(-) diff --git a/Firmware/ConfigurationStore.h b/Firmware/ConfigurationStore.h index 79055fdc..facdcca2 100644 --- a/Firmware/ConfigurationStore.h +++ b/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 diff --git a/Firmware/LiquidCrystal_Prusa.cpp b/Firmware/LiquidCrystal_Prusa.cpp index 38dae5e4..e06f8fa2 100644 --- a/Firmware/LiquidCrystal_Prusa.cpp +++ b/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 } diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 0faaf3cd..f59af1bf 100644 --- a/Firmware/Marlin.h +++ b/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 diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 57fa1658..4856750a 100644 --- a/Firmware/Marlin_main.cpp +++ b/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() diff --git a/Firmware/adc.c b/Firmware/adc.c index 1798b083..5cb88b79 100644 --- a/Firmware/adc.c +++ b/Firmware/adc.c @@ -1,9 +1,8 @@ //adc.c #include "adc.h" -#include #include -#include + 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); diff --git a/Firmware/language.c b/Firmware/language.c index 79b6cb0a..ca3b9e88 100644 --- a/Firmware/language.c +++ b/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; diff --git a/Firmware/language.h b/Firmware/language.h index f0cff9a1..569d9f9e 100644 --- a/Firmware/language.h +++ b/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 diff --git a/Firmware/sm4.c b/Firmware/sm4.c index 509ac23f..f50591c3 100644 --- a/Firmware/sm4.c +++ b/Firmware/sm4.c @@ -3,10 +3,9 @@ #include "sm4.h" #include #include -#include -#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 \ No newline at end of file diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index cf9cccfd..83ead13b 100644 --- a/Firmware/temperature.cpp +++ b/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 diff --git a/Firmware/temperature.h b/Firmware/temperature.h index 462412d3..b20a67cd 100644 --- a/Firmware/temperature.h +++ b/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(); diff --git a/Firmware/tmc2130.cpp b/Firmware/tmc2130.cpp index 558ea5aa..bfc720c6 100644 --- a/Firmware/tmc2130.cpp +++ b/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); diff --git a/Firmware/uart2.c b/Firmware/uart2.c index e6d5c3f8..e12b254a 100644 --- a/Firmware/uart2.c +++ b/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; diff --git a/Firmware/uart2.h b/Firmware/uart2.h index 95a1bff9..e5455148 100644 --- a/Firmware/uart2.h +++ b/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 \ No newline at end of file diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index bd29909f..e58e2370 100644 --- a/Firmware/ultralcd.cpp +++ b/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() { diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 9fb2a7e3..254a94ae 100644 --- a/Firmware/ultralcd.h +++ b/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 diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index e3a36313..1aa0f303 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/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; diff --git a/Firmware/uni_avr_rpi.h b/Firmware/uni_avr_rpi.h index 616a5662..6a7200c3 100644 --- a/Firmware/uni_avr_rpi.h +++ b/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 - diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index b89b668c..2889c4e7 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/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) diff --git a/Firmware/variants/1_75mm_MK3-MMU-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-MMU-EINSy10a-E3Dv6full.h index 88f0075c..f57c6da1 100644 --- a/Firmware/variants/1_75mm_MK3-MMU-EINSy10a-E3Dv6full.h +++ b/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)