diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index f38ba35dd5..07caa57f06 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -765,7 +765,7 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) { // Auto-report Temperatures / SD Status #if HAS_AUTO_REPORTING - if (!gcode.autoreport_paused) { + if (!gcode.autoreport.paused) { TERN_(AUTO_REPORT_TEMPERATURES, thermalManager.auto_report_temperatures()); TERN_(AUTO_REPORT_SD_STATUS, card.auto_report_sd_status()); } diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index ee8aa0bba4..7c3ef26103 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -78,7 +78,7 @@ uint8_t GcodeSuite::axis_relative = ( ); #if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE) - bool GcodeSuite::autoreport_paused; // = false + GcodeSuite::autoreport_t GcodeSuite::autoreport{0}; #endif #if ENABLED(HOST_KEEPALIVE_FEATURE) @@ -1022,7 +1022,7 @@ void GcodeSuite::process_subcommands_now(char * gcode) { void GcodeSuite::host_keepalive() { const millis_t ms = millis(); static millis_t next_busy_signal_ms = 0; - if (!autoreport_paused && host_keepalive_interval && busy_state != NOT_BUSY) { + if (!autoreport.paused && host_keepalive_interval && busy_state != NOT_BUSY) { if (PENDING(ms, next_busy_signal_ms)) return; switch (busy_state) { case IN_HANDLER: diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index ddd48a389d..39a082286d 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -373,15 +373,21 @@ public: process_subcommands_now_P(G28_STR); } + typedef struct { + bool paused:1; + bool position:1; + } autoreport_t; + #if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE) - static bool autoreport_paused; + static autoreport_t autoreport; + static inline bool set_autoreport_paused(const bool p) { - const bool was = autoreport_paused; - autoreport_paused = p; + const bool was = autoreport.paused; + autoreport.paused = p; return was; } #else - static constexpr bool autoreport_paused = false; + static constexpr autoreport_t{false}; static inline bool set_autoreport_paused(const bool) { return false; } #endif diff --git a/Marlin/src/gcode/temp/M155.cpp b/Marlin/src/gcode/temp/M155.cpp index 30129a0e6f..44318b7336 100644 --- a/Marlin/src/gcode/temp/M155.cpp +++ b/Marlin/src/gcode/temp/M155.cpp @@ -32,6 +32,9 @@ */ void GcodeSuite::M155() { + if (parser.seen('P')) + autoreport.position = parser.value_bool(); + if (parser.seenval('S')) thermalManager.set_auto_report_interval(parser.value_byte()); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 167b35cc2b..6f2ab45714 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -3092,6 +3092,7 @@ void Temperature::tick() { PORT_REDIRECT(SERIAL_BOTH); print_heater_states(active_extruder); SERIAL_EOL(); + if (gcode.autoreport.position) report_current_position_projected(); } }