diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index f93f3115df..36c5b880d3 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -169,7 +169,6 @@ static float saved_feedrate_mm_s; int16_t feedrate_percentage = 100, saved_feedrate_percentage; // Initialized by settings.load() -bool volumetric_enabled; float filament_size[EXTRUDERS], volumetric_multiplier[EXTRUDERS]; #if HAS_WORKSPACE_OFFSET @@ -3295,7 +3294,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { #endif // FILAMENT_RUNOUT_SENSOR float calculate_volumetric_multiplier(const float diameter) { - if (!volumetric_enabled || diameter == 0) return 1.0; + if (!parser.volumetric_enabled || diameter == 0) return 1.0; return 1.0 / (M_PI * sq(diameter * 0.5)); } diff --git a/Marlin/src/Marlin.h b/Marlin/src/Marlin.h index 0d84af3d6c..33ff9ab0be 100644 --- a/Marlin/src/Marlin.h +++ b/Marlin/src/Marlin.h @@ -186,7 +186,6 @@ extern int16_t feedrate_percentage; #define MMS_SCALED(MM_S) ((MM_S)*feedrate_percentage*0.01) -extern bool volumetric_enabled; extern float filament_size[EXTRUDERS]; // cross-sectional area of filament (in millimeters), typically around 1.75 or 2.85, 0 disables the volumetric calculations for the extruder. extern float volumetric_multiplier[EXTRUDERS]; // reciprocal of cross-sectional area of filament (in square millimeters), stored this way to reduce computational burden in planner diff --git a/Marlin/src/gcode/config/M200.cpp b/Marlin/src/gcode/config/M200.cpp index eae17689c5..b70879fc48 100644 --- a/Marlin/src/gcode/config/M200.cpp +++ b/Marlin/src/gcode/config/M200.cpp @@ -37,8 +37,8 @@ void GcodeSuite::M200() { // setting any extruder filament size disables volumetric on the assumption that // slicers either generate in extruder values as cubic mm or as as filament feeds // for all extruders - volumetric_enabled = (parser.value_linear_units() != 0.0); - if (volumetric_enabled) { + parser.volumetric_enabled = (parser.value_linear_units() != 0.0); + if (parser.volumetric_enabled) { filament_size[target_extruder] = parser.value_linear_units(); // make sure all extruders have some sane value for the filament size for (uint8_t i = 0; i < COUNT(filament_size); i++) diff --git a/Marlin/src/gcode/parser.cpp b/Marlin/src/gcode/parser.cpp index 6cf8b8ee07..373a1caceb 100644 --- a/Marlin/src/gcode/parser.cpp +++ b/Marlin/src/gcode/parser.cpp @@ -35,6 +35,8 @@ // Must be declared for allocation and to satisfy the linker // Zero values need no initialization. +bool GCodeParser::volumetric_enabled; + #if ENABLED(INCH_MODE_SUPPORT) float GCodeParser::linear_unit_factor, GCodeParser::volumetric_unit_factor; #endif diff --git a/Marlin/src/gcode/parser.h b/Marlin/src/gcode/parser.h index 9743a7bb99..c829e66c98 100644 --- a/Marlin/src/gcode/parser.h +++ b/Marlin/src/gcode/parser.h @@ -33,10 +33,6 @@ //#define DEBUG_GCODE_PARSER -#if ENABLED(INCH_MODE_SUPPORT) - extern bool volumetric_enabled; -#endif - /** * GCode parser * @@ -65,6 +61,8 @@ public: // Global states for GCode-level units features + static bool volumetric_enabled; + #if ENABLED(INCH_MODE_SUPPORT) static float linear_unit_factor, volumetric_unit_factor; #endif diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index d796f45faa..ae747f2132 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -3445,9 +3445,9 @@ void kill_screen(const char* lcd_msg) { MENU_ITEM_EDIT(float3, MSG_ADVANCE_K, &planner.extruder_advance_k, 0, 999); #endif - MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &volumetric_enabled, calculate_volumetric_multipliers); + MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &parser.volumetric_enabled, calculate_volumetric_multipliers); - if (volumetric_enabled) { + if (parser.volumetric_enabled) { #if EXTRUDERS == 1 MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &filament_size[0], 1.5, 3.25, calculate_volumetric_multipliers); #else // EXTRUDERS > 1 diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 898c496cd1..3eb692f430 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -137,7 +137,7 @@ * 533 M208 R swap_retract_recover_feedrate_mm_s (float) * * Volumetric Extrusion: 21 bytes - * 537 M200 D volumetric_enabled (bool) + * 537 M200 D parser.volumetric_enabled (bool) * 538 M200 T D filament_size (float x5) (T0..3) * * HAVE_TMC2130: 20 bytes @@ -185,9 +185,7 @@ MarlinSettings settings; #include "../core/language.h" #include "../Marlin.h" -#if ENABLED(INCH_MODE_SUPPORT) || (ENABLED(ULTIPANEL) && ENABLED(TEMPERATURE_UNITS_SUPPORT)) - #include "../gcode/parser.h" -#endif +#include "../gcode/parser.h" #if HAS_BED_PROBE #include "../module/probe.h" @@ -511,7 +509,7 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(fwretract.swap_retract_recover_feedrate_mm_s); #endif - EEPROM_WRITE(volumetric_enabled); + EEPROM_WRITE(parser.volumetric_enabled); // Save filament sizes for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { @@ -897,7 +895,7 @@ void MarlinSettings::postprocess() { for (uint8_t q=8; q--;) EEPROM_READ(dummy); #endif - EEPROM_READ(volumetric_enabled); + EEPROM_READ(parser.volumetric_enabled); for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { EEPROM_READ(dummy); @@ -1259,7 +1257,7 @@ void MarlinSettings::reset() { fwretract.reset(); #endif - volumetric_enabled = + parser.volumetric_enabled = #if ENABLED(VOLUMETRIC_DEFAULT_ON) true #else @@ -1350,7 +1348,7 @@ void MarlinSettings::reset() { CONFIG_ECHO_START; #if ENABLED(INCH_MODE_SUPPORT) #define LINEAR_UNIT(N) ((N) / parser.linear_unit_factor) - #define VOLUMETRIC_UNIT(N) ((N) / (volumetric_enabled ? parser.volumetric_unit_factor : parser.linear_unit_factor)) + #define VOLUMETRIC_UNIT(N) ((N) / (parser.volumetric_enabled ? parser.volumetric_unit_factor : parser.linear_unit_factor)) SERIAL_ECHOPGM(" G2"); SERIAL_CHAR(parser.linear_unit_factor == 1.0 ? '1' : '0'); SERIAL_ECHOPGM(" ; Units in "); @@ -1387,7 +1385,7 @@ void MarlinSettings::reset() { if (!forReplay) { CONFIG_ECHO_START; SERIAL_ECHOPGM("Filament settings:"); - if (volumetric_enabled) + if (parser.volumetric_enabled) SERIAL_EOL(); else SERIAL_ECHOLNPGM(" Disabled"); @@ -1417,7 +1415,7 @@ void MarlinSettings::reset() { #endif // EXTRUDERS > 2 #endif // EXTRUDERS > 1 - if (!volumetric_enabled) { + if (!parser.volumetric_enabled) { CONFIG_ECHO_START; SERIAL_ECHOLNPGM(" M200 D0"); }