diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index 1204f944f1..6aaaa73c06 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -95,6 +95,10 @@ #include "HAL/HAL_endstop_interrupts.h" #endif +#if ENABLED(HAVE_TMC2130) + #include "feature/tmc2130.h" +#endif + #if ENABLED(SDSUPPORT) CardReader card; #endif @@ -114,10 +118,6 @@ #include "feature/bedlevel/bedlevel.h" #endif -#if ENABLED(SENSORLESS_HOMING) - #include "feature/tmc2130.h" -#endif - #if ENABLED(ADVANCED_PAUSE_FEATURE) && ENABLED(PAUSE_PARK_NO_STEPPER_TIMEOUT) #include "feature/pause.h" #endif @@ -359,19 +359,6 @@ void quickstop_stepper() { SYNC_PLAN_POSITION_KINEMATIC(); } -#if ENABLED(HAVE_TMC2130) - #include "feature/tmc2130.h" - #include "gcode/feature/trinamic/M906.h" - #include "gcode/feature/trinamic/M911.h" - #include "gcode/feature/trinamic/M912.h" - #if ENABLED(HYBRID_THRESHOLD) - #include "gcode/feature/trinamic/M913.h" - #endif - #if ENABLED(SENSORLESS_HOMING) - #include "gcode/feature/trinamic/M914.h" - #endif -#endif - #include "gcode/feature/digipot/M907.h" #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT) diff --git a/Marlin/src/gcode/feature/trinamic/M906.h b/Marlin/src/gcode/feature/trinamic/M906.cpp similarity index 85% rename from Marlin/src/gcode/feature/trinamic/M906.h rename to Marlin/src/gcode/feature/trinamic/M906.cpp index cb5c7883d6..ec3fcfe556 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.h +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -20,12 +20,20 @@ * */ -static void tmc2130_get_current(TMC2130Stepper &st, const char name) { +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(HAVE_TMC2130) + +#include "../../gcode.h" +#include "../../../feature/tmc2130.h" +#include "../../../module/stepper_indirection.h" + +inline void tmc2130_get_current(TMC2130Stepper &st, const char name) { SERIAL_CHAR(name); SERIAL_ECHOPGM(" axis driver current: "); SERIAL_ECHOLN(st.getCurrent()); } -static void tmc2130_set_current(TMC2130Stepper &st, const char name, const int mA) { +inline void tmc2130_set_current(TMC2130Stepper &st, const char name, const int mA) { st.setCurrent(mA, R_SENSE, HOLD_MULTIPLIER); tmc2130_get_current(st, name); } @@ -37,7 +45,7 @@ static void tmc2130_set_current(TMC2130Stepper &st, const char name, const int m * S1: Enable automatic current control * S0: Disable */ -void gcode_M906() { +void GcodeSuite::M906() { uint16_t values[XYZE]; LOOP_XYZE(i) values[i] = parser.intval(axis_codes[i]); @@ -63,3 +71,5 @@ void gcode_M906() { if (parser.seen('S')) auto_current_control = parser.value_bool(); #endif } + +#endif // HAVE_TMC2130 diff --git a/Marlin/src/gcode/feature/trinamic/M911.h b/Marlin/src/gcode/feature/trinamic/M911.cpp similarity index 86% rename from Marlin/src/gcode/feature/trinamic/M911.h rename to Marlin/src/gcode/feature/trinamic/M911.cpp index 26e85ee18e..9ffbbeae91 100644 --- a/Marlin/src/gcode/feature/trinamic/M911.h +++ b/Marlin/src/gcode/feature/trinamic/M911.cpp @@ -20,7 +20,15 @@ * */ -static void tmc2130_report_otpw(TMC2130Stepper &st, const char name) { +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(HAVE_TMC2130) + +#include "../../gcode.h" +#include "../../../feature/tmc2130.h" +#include "../../../module/stepper_indirection.h" + +inline void tmc2130_report_otpw(TMC2130Stepper &st, const char name) { SERIAL_CHAR(name); SERIAL_ECHOPGM(" axis temperature prewarn triggered: "); serialprintPGM(st.getOTPW() ? PSTR("true") : PSTR("false")); @@ -31,7 +39,7 @@ static void tmc2130_report_otpw(TMC2130Stepper &st, const char name) { * M911: Report TMC2130 stepper driver overtemperature pre-warn flag * The flag is held by the library and persist until manually cleared by M912 */ -void gcode_M911() { +void GcodeSuite::M911() { const bool reportX = parser.seen('X'), reportY = parser.seen('Y'), reportZ = parser.seen('Z'), reportE = parser.seen('E'), reportAll = (!reportX && !reportY && !reportZ && !reportE) || (reportX && reportY && reportZ && reportE); #if ENABLED(X_IS_TMC2130) @@ -47,3 +55,5 @@ void gcode_M911() { if (reportE || reportAll) tmc2130_report_otpw(stepperE0, 'E'); #endif } + +#endif // HAVE_TMC2130 diff --git a/Marlin/src/gcode/feature/trinamic/M912.h b/Marlin/src/gcode/feature/trinamic/M912.cpp similarity index 85% rename from Marlin/src/gcode/feature/trinamic/M912.h rename to Marlin/src/gcode/feature/trinamic/M912.cpp index 9a124d5cf5..2931623c7a 100644 --- a/Marlin/src/gcode/feature/trinamic/M912.h +++ b/Marlin/src/gcode/feature/trinamic/M912.cpp @@ -20,7 +20,15 @@ * */ -static void tmc2130_clear_otpw(TMC2130Stepper &st, const char name) { +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(HAVE_TMC2130) + +#include "../../gcode.h" +#include "../../../feature/tmc2130.h" +#include "../../../module/stepper_indirection.h" + +inline void tmc2130_clear_otpw(TMC2130Stepper &st, const char name) { st.clear_otpw(); SERIAL_CHAR(name); SERIAL_ECHOLNPGM(" prewarn flag cleared"); @@ -29,7 +37,7 @@ static void tmc2130_clear_otpw(TMC2130Stepper &st, const char name) { /** * M912: Clear TMC2130 stepper driver overtemperature pre-warn flag held by the library */ -void gcode_M912() { +void GcodeSuite::M912() { const bool clearX = parser.seen('X'), clearY = parser.seen('Y'), clearZ = parser.seen('Z'), clearE = parser.seen('E'), clearAll = (!clearX && !clearY && !clearZ && !clearE) || (clearX && clearY && clearZ && clearE); #if ENABLED(X_IS_TMC2130) @@ -45,3 +53,5 @@ void gcode_M912() { if (clearE || clearAll) tmc2130_clear_otpw(stepperE0, 'E'); #endif } + +#endif // HAVE_TMC2130 diff --git a/Marlin/src/gcode/feature/trinamic/M913.h b/Marlin/src/gcode/feature/trinamic/M913.cpp similarity index 83% rename from Marlin/src/gcode/feature/trinamic/M913.h rename to Marlin/src/gcode/feature/trinamic/M913.cpp index c7ec3e4748..523f94b359 100644 --- a/Marlin/src/gcode/feature/trinamic/M913.h +++ b/Marlin/src/gcode/feature/trinamic/M913.cpp @@ -20,12 +20,21 @@ * */ -static void tmc2130_get_pwmthrs(TMC2130Stepper &st, const char name, const uint16_t spmm) { +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(HAVE_TMC2130) && ENABLED(HYBRID_THRESHOLD) + +#include "../../gcode.h" +#include "../../../feature/tmc2130.h" +#include "../../../module/planner.h" +#include "../../../module/stepper_indirection.h" + +inline void tmc2130_get_pwmthrs(TMC2130Stepper &st, const char name, const uint16_t spmm) { SERIAL_CHAR(name); SERIAL_ECHOPGM(" stealthChop max speed set to "); SERIAL_ECHOLN(12650000UL * st.microsteps() / (256 * st.stealth_max_speed() * spmm)); } -static void tmc2130_set_pwmthrs(TMC2130Stepper &st, const char name, const int32_t thrs, const uint32_t spmm) { +inline void tmc2130_set_pwmthrs(TMC2130Stepper &st, const char name, const int32_t thrs, const uint32_t spmm) { st.stealth_max_speed(12650000UL * st.microsteps() / (256 * thrs * spmm)); tmc2130_get_pwmthrs(st, name, spmm); } @@ -33,7 +42,7 @@ static void tmc2130_set_pwmthrs(TMC2130Stepper &st, const char name, const int32 /** * M913: Set HYBRID_THRESHOLD speed. */ -void gcode_M913() { +void GcodeSuite::M913() { uint16_t values[XYZE]; LOOP_XYZE(i) values[i] = parser.intval(axis_codes[i]); @@ -55,3 +64,5 @@ void gcode_M913() { else tmc2130_get_pwmthrs(stepperE0, 'E', planner.axis_steps_per_mm[E_AXIS]); #endif } + +#endif // HAVE_TMC2130 && HYBRID_THRESHOLD diff --git a/Marlin/src/gcode/feature/trinamic/M914.h b/Marlin/src/gcode/feature/trinamic/M914.cpp similarity index 77% rename from Marlin/src/gcode/feature/trinamic/M914.h rename to Marlin/src/gcode/feature/trinamic/M914.cpp index 7c5ef3bf30..25aefc1364 100644 --- a/Marlin/src/gcode/feature/trinamic/M914.h +++ b/Marlin/src/gcode/feature/trinamic/M914.cpp @@ -20,12 +20,20 @@ * */ -static void tmc2130_get_sgt(TMC2130Stepper &st, const char name) { +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(HAVE_TMC2130) && ENABLED(SENSORLESS_HOMING) + +#include "../../gcode.h" +#include "../../../feature/tmc2130.h" +#include "../../../module/stepper_indirection.h" + +inline void tmc2130_get_sgt(TMC2130Stepper &st, const char name) { SERIAL_CHAR(name); SERIAL_ECHOPGM(" driver homing sensitivity set to "); SERIAL_ECHOLN(st.sgt()); } -static void tmc2130_set_sgt(TMC2130Stepper &st, const char name, const int8_t sgt_val) { +inline void tmc2130_set_sgt(TMC2130Stepper &st, const char name, const int8_t sgt_val) { st.sgt(sgt_val); tmc2130_get_sgt(st, name); } @@ -33,7 +41,7 @@ static void tmc2130_set_sgt(TMC2130Stepper &st, const char name, const int8_t sg /** * M914: Set SENSORLESS_HOMING sensitivity. */ -void gcode_M914() { +void GcodeSuite::M914() { #if ENABLED(X_IS_TMC2130) if (parser.seen(axis_codes[X_AXIS])) tmc2130_set_sgt(stepperX, 'X', parser.value_int()); else tmc2130_get_sgt(stepperX, 'X'); @@ -43,3 +51,5 @@ void gcode_M914() { else tmc2130_get_sgt(stepperY, 'Y'); #endif } + +#endif // HAVE_TMC2130 && SENSORLESS_HOMING diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 3df7179084..a2dc0cec0c 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -122,11 +122,6 @@ extern void gcode_M165(); extern void gcode_M350(); extern void gcode_M351(); extern void gcode_M355(); -extern void gcode_M906(); -extern void gcode_M911(); -extern void gcode_M912(); -extern void gcode_M913(); -extern void gcode_M914(); extern void gcode_M907(); extern void gcode_M908(); extern void gcode_M909(); @@ -660,12 +655,6 @@ void GcodeSuite::process_next_command() { case 900: M900(); break; // M900: Set advance K factor. #endif - #if ENABLED(HAVE_TMC2130) - case 906: // M906: Set motor current in milliamps using axis codes X, Y, Z, E - gcode_M906(); - break; - #endif - case 907: // M907: Set digital trimpot motor current using axis codes. gcode_M907(); break; @@ -691,24 +680,14 @@ void GcodeSuite::process_next_command() { #endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT #if ENABLED(HAVE_TMC2130) - case 911: // M911: Report TMC2130 prewarn triggered flags - gcode_M911(); - break; - - case 912: // M911: Clear TMC2130 prewarn triggered flags - gcode_M912(); - break; - + case 906: M906(); break; // M906: Set motor current in milliamps using axis codes X, Y, Z, E + case 911: M911(); break; // M911: Report TMC2130 prewarn triggered flags + case 912: M912(); break; // M912: Clear TMC2130 prewarn triggered flags #if ENABLED(HYBRID_THRESHOLD) - case 913: // M913: Set HYBRID_THRESHOLD speed. - gcode_M913(); - break; + case 913: M913(); break; // M913: Set HYBRID_THRESHOLD speed. #endif - #if ENABLED(SENSORLESS_HOMING) - case 914: // M914: Set SENSORLESS_HOMING sensitivity. - gcode_M914(); - break; + case 914: M914(); break; // M914: Set SENSORLESS_HOMING sensitivity. #endif #endif