From ddeb7b8c846f4c7804c04594c59dfd0c6355ecf0 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 29 Aug 2017 15:52:53 +0200 Subject: [PATCH] statistics improved, initial version of function which forces user to connect printer to monitoring --- Firmware/Marlin.h | 4 + Firmware/Marlin_main.cpp | 10 +++ Firmware/ultralcd.cpp | 74 ++++++++++++++++--- Firmware/ultralcd.h | 3 + .../ultralcd_implementation_hitachi_HD44780.h | 53 ++++++------- 5 files changed, 107 insertions(+), 37 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index a238579e5..5107d3a20 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -315,6 +315,10 @@ extern unsigned int custom_message_type; extern unsigned int custom_message_state; extern char snmm_filaments_used; extern unsigned long PingTime; +extern unsigned long NcTime; +extern bool no_response; +extern uint8_t important_status; +extern uint8_t saved_filament_type; extern bool fan_state[2]; extern int fan_edge_counter[2]; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index e2018ee1b..6b66d82ce 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -251,6 +251,8 @@ CardReader card; #endif unsigned long PingTime = millis(); +unsigned long NcTime; + union Data { byte b[2]; @@ -414,6 +416,10 @@ bool cancel_heatup = false ; const char errormagic[] PROGMEM = "Error:"; const char echomagic[] PROGMEM = "echo:"; +bool no_response = false; +uint8_t important_status; +uint8_t saved_filament_type; + //=========================================================================== //=============================Private Variables============================= //=========================================================================== @@ -2382,6 +2388,7 @@ void gcode_M701() void process_commands() { + if (!buflen) return; //empty command #ifdef FILAMENT_RUNOUT_SUPPORT SET_INPUT(FR_SENS); #endif @@ -2455,6 +2462,9 @@ void process_commands() MYSERIAL.println("Not in farm mode."); } + } + else if (code_seen("thx")) { + no_response = false; }else if (code_seen("fv")) { // get file version #ifdef SDSUPPORT diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index c0452c36e..7995fc568 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3077,14 +3077,14 @@ void prusa_statistics(int _message) { farm_timer = 2; break; case 6: // print done - SERIAL_ECHOLN("{[PRN:8]"); + SERIAL_ECHO("{[PRN:8]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); status_number = 8; farm_timer = 2; break; case 7: // print done - stopped - SERIAL_ECHOLN("{[PRN:9]"); + SERIAL_ECHO("{[PRN:9]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); status_number = 9; @@ -3098,7 +3098,7 @@ void prusa_statistics(int _message) { farm_timer = 2; break; case 20: // echo farm no - SERIAL_ECHOLN("{"); + SERIAL_ECHO("{"); prusa_stat_printerstatus(status_number); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); @@ -3112,19 +3112,19 @@ void prusa_statistics(int _message) { SERIAL_ECHOLN("}"); break; case 22: // waiting for filament change - SERIAL_ECHOLN("{[PRN:5]"); + SERIAL_ECHO("{[PRN:5]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); status_number = 5; break; case 90: // Error - Thermal Runaway - SERIAL_ECHOLN("{[ERR:1]"); + SERIAL_ECHO("{[ERR:1]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); break; case 91: // Error - Thermal Runaway Preheat - SERIAL_ECHOLN("{[ERR:2]"); + SERIAL_ECHO("{[ERR:2]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); break; @@ -3134,7 +3134,7 @@ void prusa_statistics(int _message) { SERIAL_ECHOLN("}"); break; case 93: // Error - Max temp - SERIAL_ECHOLN("{[ERR:4]"); + SERIAL_ECHO("{[ERR:4]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); break; @@ -5220,14 +5220,22 @@ void lcd_confirm_print() if (cursor_pos == 1) { _ret = 1; - prusa_statistics(20); - prusa_statistics(4); + filament_type = lcd_choose_color(); + prusa_statistics(4, filament_type); + no_response = true; //we need confirmation by recieving PRUSA thx + important_status = 4; + saved_filament_type = filament_type; + NcTime = millis(); } if (cursor_pos == 2) { _ret = 2; - prusa_statistics(20); - prusa_statistics(5); + filament_type = lcd_choose_color(); + prusa_statistics(5, filament_type); + no_response = true; //we need confirmation by recieving PRUSA thx + important_status = 5; + saved_filament_type = filament_type; + NcTime = millis(); } } @@ -7162,6 +7170,7 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) 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(); } @@ -7169,6 +7178,49 @@ void lcd_printer_connected() { printer_connected = true; } +static void lcd_send_status() { + if (farm_mode && no_response && ((millis() - NcTime) > (NC_TIME * 1000))) { + //send important status messages periodicaly + prusa_statistics(important_status, saved_filament_type); + NcTime = millis(); + lcd_connect_printer(); + } +}; + +static void lcd_connect_printer() { + lcd_update_enable(false); + lcd_implementation_clear(); + + bool pressed = false; + int i = 0; + int t = 0; + lcd_set_custom_characters_progress(); + lcd_implementation_print_at(0, 0, "Connect printer to"); + lcd_implementation_print_at(0, 1, "monitoring or hold"); + lcd_implementation_print_at(0, 2, "the knob to continue"); + while (no_response) { + i++; + t++; + delay_keep_alive(100); + process_commands(); + if (t == 10) { + prusa_statistics(important_status, saved_filament_type); + t = 0; + } + if (READ(BTN_ENC)) { //if button is not pressed + i = 0; + lcd_implementation_print_at(0, 3, " "); + } + if (i!=0) lcd_implementation_print_at((i * 20) / (NC_BUTTON_LONG_PRESS * 10), 3, "\x01"); + if (i == NC_BUTTON_LONG_PRESS * 10) { + no_response = false; + } + } + lcd_set_custom_characters_degree(); + lcd_update_enable(true); + lcd_update(2); +} + void lcd_ping() { //chceck if printer is connected to monitoring when in farm mode if (farm_mode) { bool empty = is_buffer_empty(); diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 53ced8a1b..389d6e641 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -285,4 +285,7 @@ void lcd_service_mode_show_result(); void lcd_wizard(); void lcd_wizard(int state); +static void lcd_send_status(); +static void lcd_connect_printer(); + #endif //ULTRALCD_H \ No newline at end of file diff --git a/Firmware/ultralcd_implementation_hitachi_HD44780.h b/Firmware/ultralcd_implementation_hitachi_HD44780.h index 0d9db3e7b..c784d31fa 100644 --- a/Firmware/ultralcd_implementation_hitachi_HD44780.h +++ b/Firmware/ultralcd_implementation_hitachi_HD44780.h @@ -877,34 +877,35 @@ if (print_sd_status) if(strlen(card.longFilename) > LCD_WIDTH) { - int inters = 0; - int gh = scrollstuff; - while( ((gh-scrollstuff)