From 315bfc43ddd465db8c2c1cb0b097e3b7666ff374 Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Tue, 21 Aug 2018 16:41:01 +0200 Subject: [PATCH 1/6] MMU communication fix --- Firmware/Marlin_main.cpp | 2 +- Firmware/mmu.cpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 1e606bf04..6aea1214b 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7428,7 +7428,7 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE)) handle_status_leds(); #endif check_axes_activity(); -// mmu_loop(); + mmu_loop(); } void kill(const char *full_screen_message, unsigned char id) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 4361d5b1f..843f415c0 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -177,7 +177,8 @@ void mmu_loop(void) fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer printf_P(PSTR("MMU => '%dok'\n"), mmu_finda); mmu_state = 1; - mmu_ready = true; + if (mmu_cmd == 0) + mmu_ready = true; } else if ((mmu_last_request + 30000) < millis()) { //resend request after timeout (30s) @@ -228,19 +229,26 @@ void mmu_command(uint8_t cmd) bool mmu_get_response(void) { +// printf_P(PSTR("mmu_get_response - begin\n")); KEEPALIVE_STATE(IN_PROCESS); + while (mmu_cmd != 0) + { +// mmu_loop(); + delay_keep_alive(100); + } while (!mmu_ready) { - mmu_loop(); +// mmu_loop(); if (mmu_state != 3) break; + delay_keep_alive(100); } bool ret = mmu_ready; mmu_ready = false; +// printf_P(PSTR("mmu_get_response - end %d\n"), ret?1:0); return ret; -/* printf_P(PSTR("mmu_get_response - begin\n")); - //waits for "ok" from mmu +/* //waits for "ok" from mmu //function returns true if "ok" was received //if timeout is set to true function return false if there is no "ok" received before timeout bool response = true; From f99196a7a019853cd1b3271f7468aadd8cd4d789 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 22 Aug 2018 11:09:12 +0200 Subject: [PATCH 2/6] fix reseting during filament change --- Firmware/mmu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 843f415c0..ab479fe56 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -239,6 +239,7 @@ bool mmu_get_response(void) while (!mmu_ready) { // mmu_loop(); + manage_heater(); if (mmu_state != 3) break; delay_keep_alive(100); From d2aeb40bee95035254acb1f8d5dd4c153df58187 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 22 Aug 2018 15:46:36 +0200 Subject: [PATCH 3/6] manage response function update --- Firmware/mmu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index ab479fe56..8990bee59 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -322,6 +322,7 @@ void manage_response(bool move_axes, bool turn_off_nozzle) } } lcd_display_message_fullscreen_P(_i("Check MMU. Fix the issue and then press button on MMU unit.")); + delay_keep_alive(1000); } else if (mmu_print_saved) { printf_P(PSTR("MMU start responding\n")); From a81b8dbd6187277c76ba149369368bc1b829d75a Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 22 Aug 2018 16:09:38 +0200 Subject: [PATCH 4/6] remove manage_heater --- Firmware/mmu.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 8990bee59..57da1e80f 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -239,7 +239,6 @@ bool mmu_get_response(void) while (!mmu_ready) { // mmu_loop(); - manage_heater(); if (mmu_state != 3) break; delay_keep_alive(100); From 78367426212c2a5d90f0faf30bd2fecb0fbb2743 Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Wed, 22 Aug 2018 16:19:57 +0200 Subject: [PATCH 5/6] MMU communication fix - WD reset inside manage_response --- Firmware/mmu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 843f415c0..57da1e80f 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -321,6 +321,7 @@ void manage_response(bool move_axes, bool turn_off_nozzle) } } lcd_display_message_fullscreen_P(_i("Check MMU. Fix the issue and then press button on MMU unit.")); + delay_keep_alive(1000); } else if (mmu_print_saved) { printf_P(PSTR("MMU start responding\n")); From dfb4bfac5b7b491f2d213b5eaea19c9ce4d6ff89 Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Wed, 22 Aug 2018 16:38:34 +0200 Subject: [PATCH 6/6] MMU - display status while switching active extruder [PFW-465] --- Firmware/ultralcd.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 9988815e5..ee81f5a6b 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -528,7 +528,11 @@ void lcdui_print_percent_done(void) // Print extruder status (5 chars total) void lcdui_print_extruder(void) { - int chars = lcd_printf_P(_N(" T%u"), mmu_extruder); + int chars = 0; + if (mmu_extruder == tmp_extruder) + chars = lcd_printf_P(_N(" T%u"), mmu_extruder); + else + chars = lcd_printf_P(_N(" %u>%u"), mmu_extruder, tmp_extruder); lcd_space(5 - chars); }