diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 66d3c78ca4..3a3879990d 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -728,7 +728,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 a51e5b9187..54e4ff4d97 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -71,8 +71,7 @@ uint8_t GcodeSuite::axis_relative = ( ); #if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE) - bool GcodeSuite::autoreport_paused; // = false - bool GcodeSuite::autoreport_position; // = false + GcodeSuite::autoreport_t GcodeSuite::autoreport{0}; #endif #if ENABLED(HOST_KEEPALIVE_FEATURE) @@ -975,7 +974,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 2707833dd1..8aea4d02cc 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -353,16 +353,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_position; - 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 74ba66e1cf..c6ca45fd08 100644 --- a/Marlin/src/gcode/temp/M155.cpp +++ b/Marlin/src/gcode/temp/M155.cpp @@ -31,12 +31,9 @@ * M155: Set temperature auto-report interval. M155 S */ void GcodeSuite::M155() { - if (parser.seen('P')) //automatically report_current_position_projected(); - { - gcode.autoreport_position = true; - } - else - gcode.autoreport_position = false; + + 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 0337dcd12c..ceba730363 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -2988,9 +2988,10 @@ void Temperature::tick() { next_temp_report_ms = millis() + 1000UL * auto_report_temp_interval; PORT_REDIRECT(SERIAL_BOTH); print_heater_states(active_extruder); - if(gcode.autoreport_position){ + if (gcode.autoreport.position) { SERIAL_CHAR(' '); - report_current_position_projected();} + report_current_position_projected(); + } else SERIAL_EOL(); }