My Marlin configs for Fabrikator Mini and CTC i3 Pro B
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

gcode.h 42KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240
  1. /**
  2. * Marlin 3D Printer Firmware
  3. * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
  4. *
  5. * Based on Sprinter and grbl.
  6. * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation, either version 3 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  20. *
  21. */
  22. #pragma once
  23. /**
  24. * -----------------
  25. * G-Codes in Marlin
  26. * -----------------
  27. *
  28. * Helpful G-code references:
  29. * - https://marlinfw.org/meta/gcode
  30. * - https://reprap.org/wiki/G-code
  31. * - https://linuxcnc.org/docs/html/gcode.html
  32. *
  33. * Help to document Marlin's G-codes online:
  34. * - https://github.com/MarlinFirmware/MarlinDocumentation
  35. *
  36. * -----------------
  37. *
  38. * "G" Codes
  39. *
  40. * G0 -> G1
  41. * G1 - Coordinated Movement X Y Z E
  42. * G2 - CW ARC
  43. * G3 - CCW ARC
  44. * G4 - Dwell S<seconds> or P<milliseconds>
  45. * G5 - Cubic B-spline with XYZE destination and IJPQ offsets
  46. * G10 - Retract filament according to settings of M207 (Requires FWRETRACT)
  47. * G11 - Retract recover filament according to settings of M208 (Requires FWRETRACT)
  48. * G12 - Clean tool (Requires NOZZLE_CLEAN_FEATURE)
  49. * G17 - Select Plane XY (Requires CNC_WORKSPACE_PLANES)
  50. * G18 - Select Plane ZX (Requires CNC_WORKSPACE_PLANES)
  51. * G19 - Select Plane YZ (Requires CNC_WORKSPACE_PLANES)
  52. * G20 - Set input units to inches (Requires INCH_MODE_SUPPORT)
  53. * G21 - Set input units to millimeters (Requires INCH_MODE_SUPPORT)
  54. * G26 - Mesh Validation Pattern (Requires G26_MESH_VALIDATION)
  55. * G27 - Park Nozzle (Requires NOZZLE_PARK_FEATURE)
  56. * G28 - Home one or more axes
  57. * G29 - Start or continue the bed leveling probe procedure (Requires bed leveling)
  58. * G30 - Single Z probe, probes bed at X Y location (defaults to current XY location)
  59. * G31 - Dock sled (Z_PROBE_SLED only)
  60. * G32 - Undock sled (Z_PROBE_SLED only)
  61. * G33 - Delta Auto-Calibration (Requires DELTA_AUTO_CALIBRATION)
  62. * G34 - Z Stepper automatic alignment using probe: I<iterations> T<accuracy> A<amplification> (Requires Z_STEPPER_AUTO_ALIGN)
  63. * G35 - Read bed corners to help adjust bed screws: T<screw_thread> (Requires ASSISTED_TRAMMING)
  64. * G38 - Probe in any direction using the Z_MIN_PROBE (Requires G38_PROBE_TARGET)
  65. * G42 - Coordinated move to a mesh point (Requires MESH_BED_LEVELING, AUTO_BED_LEVELING_BLINEAR, or AUTO_BED_LEVELING_UBL)
  66. * G60 - Save current position. (Requires SAVED_POSITIONS)
  67. * G61 - Apply/restore saved coordinates. (Requires SAVED_POSITIONS)
  68. * G76 - Calibrate first layer temperature offsets. (Requires PTC_PROBE and PTC_BED)
  69. * G80 - Cancel current motion mode (Requires GCODE_MOTION_MODES)
  70. * G90 - Use Absolute Coordinates
  71. * G91 - Use Relative Coordinates
  72. * G92 - Set current position to coordinates given
  73. *
  74. * "M" Codes
  75. *
  76. * M0 - Unconditional stop - Wait for user to press a button on the LCD (Only if ULTRA_LCD is enabled)
  77. * M1 -> M0
  78. * M3 - Turn ON Laser | Spindle (clockwise), set Power | Speed. (Requires SPINDLE_FEATURE or LASER_FEATURE)
  79. * M4 - Turn ON Laser | Spindle (counter-clockwise), set Power | Speed. (Requires SPINDLE_FEATURE or LASER_FEATURE)
  80. * M5 - Turn OFF Laser | Spindle. (Requires SPINDLE_FEATURE or LASER_FEATURE)
  81. * M7 - Turn mist coolant ON. (Requires COOLANT_CONTROL)
  82. * M8 - Turn flood coolant ON. (Requires COOLANT_CONTROL)
  83. * M9 - Turn coolant OFF. (Requires COOLANT_CONTROL)
  84. * M10 - Turn Vacuum or Blower motor ON (Requires AIR_EVACUATION)
  85. * M11 - Turn Vacuum or Blower motor OFF (Requires AIR_EVACUATION)
  86. * M12 - Set up closed loop control system. (Requires EXTERNAL_CLOSED_LOOP_CONTROLLER)
  87. * M16 - Expected printer check. (Requires EXPECTED_PRINTER_CHECK)
  88. * M17 - Enable/Power all stepper motors
  89. * M18 - Disable all stepper motors; same as M84
  90. *
  91. *** Print from Media (SDSUPPORT) ***
  92. * M20 - List SD card. (Requires SDSUPPORT)
  93. * M21 - Init SD card. (Requires SDSUPPORT) With MULTI_VOLUME select a drive with `M21 Pn` / 'M21 S' / 'M21 U'.
  94. * M22 - Release SD card. (Requires SDSUPPORT)
  95. * M23 - Select SD file: "M23 /path/file.gco". (Requires SDSUPPORT)
  96. * M24 - Start/resume SD print. (Requires SDSUPPORT)
  97. * M25 - Pause SD print. (Requires SDSUPPORT)
  98. * M26 - Set SD position in bytes: "M26 S12345". (Requires SDSUPPORT)
  99. * M27 - Report SD print status. (Requires SDSUPPORT)
  100. * OR, with 'S<seconds>' set the SD status auto-report interval. (Requires AUTO_REPORT_SD_STATUS)
  101. * OR, with 'C' get the current filename.
  102. * M28 - Start SD write: "M28 /path/file.gco". (Requires SDSUPPORT)
  103. * M29 - Stop SD write. (Requires SDSUPPORT)
  104. * M30 - Delete file from SD: "M30 /path/file.gco" (Requires SDSUPPORT)
  105. * M31 - Report time since last M109 or SD card start to serial.
  106. * M32 - Select file and start SD print: "M32 [S<bytepos>] !/path/file.gco#". (Requires SDSUPPORT)
  107. * Use P to run other files as sub-programs: "M32 P !filename#"
  108. * The '#' is necessary when calling from within sd files, as it stops buffer prereading
  109. * M33 - Get the longname version of a path. (Requires LONG_FILENAME_HOST_SUPPORT)
  110. * M34 - Set SD Card sorting options. (Requires SDCARD_SORT_ALPHA)
  111. *
  112. * M42 - Change pin status via G-code: M42 P<pin> S<value>. LED pin assumed if P is omitted. (Requires DIRECT_PIN_CONTROL)
  113. * M43 - Display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins (Requires PINS_DEBUGGING)
  114. * M48 - Measure Z Probe repeatability: M48 P<points> X<pos> Y<pos> V<level> E<engage> L<legs> S<chizoid>. (Requires Z_MIN_PROBE_REPEATABILITY_TEST)
  115. *
  116. * M73 - Set the progress percentage. (Requires LCD_SET_PROGRESS_MANUALLY)
  117. * M75 - Start the print job timer.
  118. * M76 - Pause the print job timer.
  119. * M77 - Stop the print job timer.
  120. * M78 - Show statistical information about the print jobs. (Requires PRINTCOUNTER)
  121. *
  122. * M80 - Turn on Power Supply. (Requires PSU_CONTROL)
  123. * M81 - Turn off Power Supply. (Requires PSU_CONTROL)
  124. *
  125. * M82 - Set E codes absolute (default).
  126. * M83 - Set E codes relative while in Absolute (G90) mode.
  127. * M84 - Disable steppers until next move, or use S<seconds> to specify an idle
  128. * duration after which steppers should turn off. S0 disables the timeout.
  129. * M85 - Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default)
  130. * M92 - Set planner.settings.axis_steps_per_mm for one or more axes.
  131. *
  132. * M100 - Watch Free Memory (for debugging) (Requires M100_FREE_MEMORY_WATCHER)
  133. *
  134. * M104 - Set extruder target temp.
  135. * M105 - Report current temperatures.
  136. * M106 - Set print fan speed.
  137. * M107 - Print fan off.
  138. * M108 - Break out of heating loops (M109, M190, M303). With no controller, breaks out of M0/M1. (Requires EMERGENCY_PARSER)
  139. * M109 - S<temp> Wait for extruder current temp to reach target temp. ** Wait only when heating! **
  140. * R<temp> Wait for extruder current temp to reach target temp. ** Wait for heating or cooling. **
  141. * If AUTOTEMP is enabled, S<mintemp> B<maxtemp> F<factor>. Exit autotemp by any M109 without F
  142. *
  143. * M110 - Set the current line number. (Used by host printing)
  144. * M111 - Set debug flags: "M111 S<flagbits>". See flag bits defined in enum.h.
  145. * M112 - Full Shutdown.
  146. *
  147. * M113 - Get or set the timeout interval for Host Keepalive "busy" messages. (Requires HOST_KEEPALIVE_FEATURE)
  148. * M114 - Report current position.
  149. * M115 - Report capabilities. (Extended capabilities requires EXTENDED_CAPABILITIES_REPORT)
  150. * M117 - Display a message on the controller screen. (Requires an LCD)
  151. * M118 - Display a message in the host console.
  152. *
  153. * M119 - Report endstops status.
  154. * M120 - Enable endstops detection.
  155. * M121 - Disable endstops detection.
  156. *
  157. * M122 - Debug stepper (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660)
  158. * M123 - Report fan tachometers. (Requires En_FAN_TACHO_PIN) Optionally set auto-report interval. (Requires AUTO_REPORT_FANS)
  159. * M125 - Save current position and move to filament change position. (Requires PARK_HEAD_ON_PAUSE)
  160. *
  161. * M126 - Solenoid Air Valve Open. (Requires BARICUDA)
  162. * M127 - Solenoid Air Valve Closed. (Requires BARICUDA)
  163. * M128 - EtoP Open. (Requires BARICUDA)
  164. * M129 - EtoP Closed. (Requires BARICUDA)
  165. *
  166. * M140 - Set bed target temp. S<temp>
  167. * M141 - Set heated chamber target temp. S<temp> (Requires a chamber heater)
  168. * M143 - Set cooler target temp. S<temp> (Requires a laser cooling device)
  169. * M145 - Set heatup values for materials on the LCD. H<hotend> B<bed> F<fan speed> for S<material> (0=PLA, 1=ABS)
  170. * M149 - Set temperature units. (Requires TEMPERATURE_UNITS_SUPPORT)
  171. * M150 - Set Status LED Color as R<red> U<green> B<blue> W<white> P<bright>. Values 0-255. (Requires BLINKM, RGB_LED, RGBW_LED, NEOPIXEL_LED, PCA9533, or PCA9632).
  172. * M154 - Auto-report position with interval of S<seconds>. (Requires AUTO_REPORT_POSITION)
  173. * M155 - Auto-report temperatures with interval of S<seconds>. (Requires AUTO_REPORT_TEMPERATURES)
  174. * M163 - Set a single proportion for a mixing extruder. (Requires MIXING_EXTRUDER)
  175. * M164 - Commit the mix and save to a virtual tool (current, or as specified by 'S'). (Requires MIXING_EXTRUDER)
  176. * M165 - Set the mix for the mixing extruder (and current virtual tool) with parameters ABCDHI. (Requires MIXING_EXTRUDER and DIRECT_MIXING_IN_G1)
  177. * M166 - Set the Gradient Mix for the mixing extruder. (Requires GRADIENT_MIX)
  178. * M190 - Set bed target temperature and wait. R<temp> Set target temperature and wait. S<temp> Set, but only wait when heating. (Requires TEMP_SENSOR_BED)
  179. * M192 - Wait for probe to reach target temperature. (Requires TEMP_SENSOR_PROBE)
  180. * M193 - R<temp> Wait for cooler to reach target temp. ** Wait for cooling. **
  181. * M200 - Set filament diameter, D<diameter>, setting E axis units to cubic. (Use S0 to revert to linear units.)
  182. * M201 - Set max acceleration in units/s^2 for print moves: "M201 X<accel> Y<accel> Z<accel> E<accel>"
  183. * M202 - Set max acceleration in units/s^2 for travel moves: "M202 X<accel> Y<accel> Z<accel> E<accel>" ** UNUSED IN MARLIN! **
  184. * M203 - Set maximum feedrate: "M203 X<fr> Y<fr> Z<fr> E<fr>" in units/sec.
  185. * M204 - Set default acceleration in units/sec^2: P<printing> R<extruder_only> T<travel>
  186. * M205 - Set advanced settings. Current units apply:
  187. S<print> T<travel> minimum speeds
  188. B<minimum segment time>
  189. X<max X jerk>, Y<max Y jerk>, Z<max Z jerk>, E<max E jerk>
  190. * M206 - Set additional homing offset. (Disabled by NO_WORKSPACE_OFFSETS or DELTA)
  191. * M207 - Set Retract Length: S<length>, Feedrate: F<units/min>, and Z lift: Z<distance>. (Requires FWRETRACT)
  192. * M208 - Set Recover (unretract) Additional (!) Length: S<length> and Feedrate: F<units/min>. (Requires FWRETRACT)
  193. * M209 - Turn Automatic Retract Detection on/off: S<0|1> (For slicers that don't support G10/11). (Requires FWRETRACT_AUTORETRACT)
  194. Every normal extrude-only move will be classified as retract depending on the direction.
  195. * M211 - Enable, Disable, and/or Report software endstops: S<0|1> (Requires MIN_SOFTWARE_ENDSTOPS or MAX_SOFTWARE_ENDSTOPS)
  196. * M217 - Set filament swap parameters: "M217 S<length> P<feedrate> R<feedrate>". (Requires SINGLENOZZLE)
  197. * M218 - Set/get a tool offset: "M218 T<index> X<offset> Y<offset>". (Requires 2 or more extruders)
  198. * M220 - Set Feedrate Percentage: "M220 S<percent>" (i.e., "FR" on the LCD)
  199. * Use "M220 B" to back up the Feedrate Percentage and "M220 R" to restore it. (Requires an MMU_MODEL version 2 or 2S)
  200. * M221 - Set Flow Percentage: "M221 S<percent>" (Requires an extruder)
  201. * M226 - Wait until a pin is in a given state: "M226 P<pin> S<state>" (Requires DIRECT_PIN_CONTROL)
  202. * M240 - Trigger a camera to take a photograph. (Requires PHOTO_GCODE)
  203. * M250 - Set LCD contrast: "M250 C<contrast>" (0-63). (Requires LCD support)
  204. * M255 - Set LCD sleep time: "M255 S<minutes>" (0-99). (Requires an LCD with brightness or sleep/wake)
  205. * M256 - Set LCD brightness: "M256 B<brightness>" (0-255). (Requires an LCD with brightness control)
  206. * M260 - i2c Send Data (Requires EXPERIMENTAL_I2CBUS)
  207. * M261 - i2c Request Data (Requires EXPERIMENTAL_I2CBUS)
  208. * M280 - Set servo position absolute: "M280 P<index> S<angle|µs>". (Requires servos)
  209. * M281 - Set servo min|max position: "M281 P<index> L<min> U<max>". (Requires EDITABLE_SERVO_ANGLES)
  210. * M282 - Detach servo: "M282 P<index>". (Requires SERVO_DETACH_GCODE)
  211. * M290 - Babystepping (Requires BABYSTEPPING)
  212. * M300 - Play beep sound S<frequency Hz> P<duration ms>
  213. * M301 - Set PID parameters P I and D. (Requires PIDTEMP)
  214. * M302 - Allow cold extrudes, or set the minimum extrude S<temperature>. (Requires PREVENT_COLD_EXTRUSION)
  215. * M303 - PID relay autotune S<temperature> sets the target temperature. Default 150C. (Requires PIDTEMP)
  216. * M304 - Set bed PID parameters P I and D. (Requires PIDTEMPBED)
  217. * M305 - Set user thermistor parameters R T and P. (Requires TEMP_SENSOR_x 1000)
  218. * M306 - MPC autotune. (Requires MPCTEMP)
  219. * M309 - Set chamber PID parameters P I and D. (Requires PIDTEMPCHAMBER)
  220. * M350 - Set microstepping mode. (Requires digital microstepping pins.)
  221. * M351 - Toggle MS1 MS2 pins directly. (Requires digital microstepping pins.)
  222. * M355 - Set Case Light on/off and set brightness. (Requires CASE_LIGHT_PIN)
  223. * M380 - Activate solenoid on active tool (Requires EXT_SOLENOID) or the tool specified by 'S' (Requires MANUAL_SOLENOID_CONTROL).
  224. * M381 - Disable solenoids on all tools (Requires EXT_SOLENOID) or the tool specified by 'S' (Requires MANUAL_SOLENOID_CONTROL).
  225. * M400 - Finish all moves.
  226. * M401 - Deploy and activate Z probe. (Requires a probe)
  227. * M402 - Deactivate and stow Z probe. (Requires a probe)
  228. * M403 - Set filament type for PRUSA MMU2
  229. * M404 - Display or set the Nominal Filament Width: "W<diameter>". (Requires FILAMENT_WIDTH_SENSOR)
  230. * M405 - Enable Filament Sensor flow control. "M405 D<delay_cm>". (Requires FILAMENT_WIDTH_SENSOR)
  231. * M406 - Disable Filament Sensor flow control. (Requires FILAMENT_WIDTH_SENSOR)
  232. * M407 - Display measured filament diameter in millimeters. (Requires FILAMENT_WIDTH_SENSOR)
  233. * M410 - Quickstop. Abort all planned moves.
  234. * M412 - Enable / Disable Filament Runout Detection. (Requires FILAMENT_RUNOUT_SENSOR)
  235. * M413 - Enable / Disable Power-Loss Recovery. (Requires POWER_LOSS_RECOVERY)
  236. * M414 - Set language by index. (Requires LCD_LANGUAGE_2...)
  237. * M420 - Enable/Disable Leveling (with current values) S1=enable S0=disable (Requires MESH_BED_LEVELING or ABL)
  238. * M421 - Set a single Z coordinate in the Mesh Leveling grid. X<units> Y<units> Z<units> (Requires MESH_BED_LEVELING, AUTO_BED_LEVELING_BILINEAR, or AUTO_BED_LEVELING_UBL)
  239. * M422 - Set Z Stepper automatic alignment position using probe. X<units> Y<units> A<axis> (Requires Z_STEPPER_AUTO_ALIGN)
  240. * M425 - Enable/Disable and tune backlash correction. (Requires BACKLASH_COMPENSATION and BACKLASH_GCODE)
  241. * M428 - Set the home_offset based on the current_position. Nearest edge applies. (Disabled by NO_WORKSPACE_OFFSETS or DELTA)
  242. * M430 - Read the system current, voltage, and power (Requires POWER_MONITOR_CURRENT, POWER_MONITOR_VOLTAGE, or POWER_MONITOR_FIXED_VOLTAGE)
  243. * M486 - Identify and cancel objects. (Requires CANCEL_OBJECTS)
  244. * M500 - Store parameters in EEPROM. (Requires EEPROM_SETTINGS)
  245. * M501 - Restore parameters from EEPROM. (Requires EEPROM_SETTINGS)
  246. * M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! **
  247. * M503 - Print the current settings (in memory): "M503 S<verbose>". S0 specifies compact output.
  248. * M504 - Validate EEPROM contents. (Requires EEPROM_SETTINGS)
  249. * M510 - Lock Printer (Requires PASSWORD_FEATURE)
  250. * M511 - Unlock Printer (Requires PASSWORD_UNLOCK_GCODE)
  251. * M512 - Set/Change/Remove Password (Requires PASSWORD_CHANGE_GCODE)
  252. * M524 - Abort the current SD print job started with M24. (Requires SDSUPPORT)
  253. * M540 - Enable/disable SD card abort on endstop hit: "M540 S<state>". (Requires SD_ABORT_ON_ENDSTOP_HIT)
  254. * M552 - Get or set IP address. Enable/disable network interface. (Requires enabled Ethernet port)
  255. * M553 - Get or set IP netmask. (Requires enabled Ethernet port)
  256. * M554 - Get or set IP gateway. (Requires enabled Ethernet port)
  257. * M569 - Enable stealthChop on an axis. (Requires at least one _DRIVER_TYPE to be TMC2130/2160/2208/2209/5130/5160)
  258. * M575 - Change the serial baud rate. (Requires BAUD_RATE_GCODE)
  259. * M600 - Pause for filament change: "M600 X<pos> Y<pos> Z<raise> E<first_retract> L<later_retract>". (Requires ADVANCED_PAUSE_FEATURE)
  260. * M603 - Configure filament change: "M603 T<tool> U<unload_length> L<load_length>". (Requires ADVANCED_PAUSE_FEATURE)
  261. * M605 - Set Dual X-Carriage movement mode: "M605 S<mode> [X<x_offset>] [R<temp_offset>]". (Requires DUAL_X_CARRIAGE)
  262. * M665 - Set delta configurations: "M665 H<delta height> L<diagonal rod> R<delta radius> S<segments/s> B<calibration radius> X<Alpha angle trim> Y<Beta angle trim> Z<Gamma angle trim> (Requires DELTA)
  263. * Set SCARA configurations: "M665 S<segments-per-second> P<theta-psi-offset> T<theta-offset> Z<z-offset> (Requires MORGAN_SCARA or MP_SCARA)
  264. * M666 - Set/get offsets for delta (Requires DELTA) or dual endstops. (Requires [XYZ]_DUAL_ENDSTOPS)
  265. * M672 - Set/Reset Duet Smart Effector's sensitivity. (Requires DUET_SMART_EFFECTOR and SMART_EFFECTOR_MOD_PIN)
  266. * M701 - Load filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
  267. * M702 - Unload filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
  268. * M808 - Set or Goto a Repeat Marker (Requires GCODE_REPEAT_MARKERS)
  269. * M810-M819 - Define/execute a G-code macro (Requires GCODE_MACROS)
  270. * M851 - Set Z probe's XYZ offsets in current units. (Negative values: X=left, Y=front, Z=below)
  271. * M852 - Set skew factors: "M852 [I<xy>] [J<xz>] [K<yz>]". (Requires SKEW_CORRECTION_GCODE, plus SKEW_CORRECTION_FOR_Z for IJ)
  272. *
  273. *** I2C_POSITION_ENCODERS ***
  274. * M860 - Report the position of position encoder modules.
  275. * M861 - Report the status of position encoder modules.
  276. * M862 - Perform an axis continuity test for position encoder modules.
  277. * M863 - Perform steps-per-mm calibration for position encoder modules.
  278. * M864 - Change position encoder module I2C address.
  279. * M865 - Check position encoder module firmware version.
  280. * M866 - Report or reset position encoder module error count.
  281. * M867 - Enable/disable or toggle error correction for position encoder modules.
  282. * M868 - Report or set position encoder module error correction threshold.
  283. * M869 - Report position encoder module error.
  284. *
  285. * M871 - Print/reset/clear first layer temperature offset values. (Requires PTC_PROBE, PTC_BED, or PTC_HOTEND)
  286. * M876 - Handle Prompt Response. (Requires HOST_PROMPT_SUPPORT and not EMERGENCY_PARSER)
  287. * M900 - Get or Set Linear Advance K-factor. (Requires LIN_ADVANCE)
  288. * M906 - Set or get motor current in milliamps using axis codes XYZE, etc. Report values if no axis codes given. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660)
  289. * M907 - Set digital trimpot motor current using axis codes. (Requires a board with digital trimpots)
  290. * M908 - Control digital trimpot directly. (Requires HAS_MOTOR_CURRENT_DAC or DIGIPOTSS_PIN)
  291. * M909 - Print digipot/DAC current value. (Requires HAS_MOTOR_CURRENT_DAC)
  292. * M910 - Commit digipot/DAC value to external EEPROM via I2C. (Requires HAS_MOTOR_CURRENT_DAC)
  293. * M911 - Report stepper driver overtemperature pre-warn condition. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660)
  294. * M912 - Clear stepper driver overtemperature pre-warn condition flag. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660)
  295. * M913 - Set HYBRID_THRESHOLD speed. (Requires HYBRID_THRESHOLD)
  296. * M914 - Set StallGuard sensitivity. (Requires SENSORLESS_HOMING or SENSORLESS_PROBING)
  297. * M919 - Get or Set motor Chopper Times (time_off, hysteresis_end, hysteresis_start) using axis codes XYZE, etc. If no parameters are given, report. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660)
  298. * M951 - Set Magnetic Parking Extruder parameters. (Requires MAGNETIC_PARKING_EXTRUDER)
  299. * M3426 - Read MCP3426 ADC over I2C. (Requires HAS_MCP3426_ADC)
  300. * M7219 - Control Max7219 Matrix LEDs. (Requires MAX7219_GCODE)
  301. *
  302. *** SCARA ***
  303. * M360 - SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
  304. * M361 - SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree)
  305. * M362 - SCARA calibration: Move to cal-position PsiA (0 deg calibration)
  306. * M363 - SCARA calibration: Move to cal-position PsiB (90 deg calibration - steps per degree)
  307. * M364 - SCARA calibration: Move to cal-position PSIC (90 deg to Theta calibration position)
  308. *
  309. *** Custom codes (can be changed to suit future G-code standards) ***
  310. * G425 - Calibrate using a conductive object. (Requires CALIBRATION_GCODE)
  311. * M928 - Start SD logging: "M928 filename.gco". Stop with M29. (Requires SDSUPPORT)
  312. * M993 - Backup SPI Flash to SD
  313. * M994 - Load a Backup from SD to SPI Flash
  314. * M995 - Touch screen calibration for TFT display
  315. * M997 - Perform in-application firmware update
  316. * M999 - Restart after being stopped by error
  317. *
  318. * D... - Custom Development G-code. Add hooks to 'gcode_D.cpp' for developers to test features. (Requires MARLIN_DEV_MODE)
  319. * D576 - Set buffer monitoring options. (Requires BUFFER_MONITORING)
  320. *
  321. *** "T" Codes ***
  322. *
  323. * T0-T3 - Select an extruder (tool) by index: "T<n> F<units/min>"
  324. */
  325. #include "../inc/MarlinConfig.h"
  326. #include "parser.h"
  327. #if ENABLED(I2C_POSITION_ENCODERS)
  328. #include "../feature/encoder_i2c.h"
  329. #endif
  330. #if IS_SCARA || defined(G0_FEEDRATE)
  331. #define HAS_FAST_MOVES 1
  332. #endif
  333. enum AxisRelative : uint8_t {
  334. LOGICAL_AXIS_LIST(REL_E, REL_X, REL_Y, REL_Z, REL_I, REL_J, REL_K, REL_U, REL_V, REL_W)
  335. #if HAS_EXTRUDERS
  336. , E_MODE_ABS, E_MODE_REL
  337. #endif
  338. };
  339. extern const char G28_STR[];
  340. class GcodeSuite {
  341. public:
  342. static axis_bits_t axis_relative;
  343. static bool axis_is_relative(const AxisEnum a) {
  344. #if HAS_EXTRUDERS
  345. if (a == E_AXIS) {
  346. if (TEST(axis_relative, E_MODE_REL)) return true;
  347. if (TEST(axis_relative, E_MODE_ABS)) return false;
  348. }
  349. #endif
  350. return TEST(axis_relative, a);
  351. }
  352. static void set_relative_mode(const bool rel) {
  353. axis_relative = rel ? (0 LOGICAL_AXIS_GANG(
  354. | _BV(REL_E),
  355. | _BV(REL_X), | _BV(REL_Y), | _BV(REL_Z),
  356. | _BV(REL_I), | _BV(REL_J), | _BV(REL_K),
  357. | _BV(REL_U), | _BV(REL_V), | _BV(REL_W)
  358. )) : 0;
  359. }
  360. #if HAS_EXTRUDERS
  361. static void set_e_relative() {
  362. CBI(axis_relative, E_MODE_ABS);
  363. SBI(axis_relative, E_MODE_REL);
  364. }
  365. static void set_e_absolute() {
  366. CBI(axis_relative, E_MODE_REL);
  367. SBI(axis_relative, E_MODE_ABS);
  368. }
  369. #endif
  370. #if ENABLED(CNC_WORKSPACE_PLANES)
  371. /**
  372. * Workspace planes only apply to G2/G3 moves
  373. * (and "canned cycles" - not a current feature)
  374. */
  375. enum WorkspacePlane : char { PLANE_XY, PLANE_ZX, PLANE_YZ };
  376. static WorkspacePlane workspace_plane;
  377. #endif
  378. #define MAX_COORDINATE_SYSTEMS 9
  379. #if ENABLED(CNC_COORDINATE_SYSTEMS)
  380. static int8_t active_coordinate_system;
  381. static xyz_pos_t coordinate_system[MAX_COORDINATE_SYSTEMS];
  382. static bool select_coordinate_system(const int8_t _new);
  383. #endif
  384. static millis_t previous_move_ms, max_inactive_time;
  385. FORCE_INLINE static bool stepper_max_timed_out(const millis_t ms=millis()) {
  386. return max_inactive_time && ELAPSED(ms, previous_move_ms + max_inactive_time);
  387. }
  388. FORCE_INLINE static void reset_stepper_timeout(const millis_t ms=millis()) { previous_move_ms = ms; }
  389. #if HAS_DISABLE_INACTIVE_AXIS
  390. static millis_t stepper_inactive_time;
  391. FORCE_INLINE static bool stepper_inactive_timeout(const millis_t ms=millis()) {
  392. return ELAPSED(ms, previous_move_ms + stepper_inactive_time);
  393. }
  394. #else
  395. static bool stepper_inactive_timeout(const millis_t) { return false; }
  396. #endif
  397. static void report_echo_start(const bool forReplay);
  398. static void report_heading(const bool forReplay, FSTR_P const fstr, const bool eol=true);
  399. static void report_heading_etc(const bool forReplay, FSTR_P const fstr, const bool eol=true) {
  400. report_heading(forReplay, fstr, eol);
  401. report_echo_start(forReplay);
  402. }
  403. static void say_units();
  404. static int8_t get_target_extruder_from_command();
  405. static int8_t get_target_e_stepper_from_command(const int8_t dval=-1);
  406. static void get_destination_from_command();
  407. static void process_parsed_command(const bool no_ok=false);
  408. static void process_next_command();
  409. // Execute G-code in-place, preserving current G-code parameters
  410. static void process_subcommands_now(FSTR_P fgcode);
  411. static void process_subcommands_now(char * gcode);
  412. static void home_all_axes(const bool keep_leveling=false) {
  413. process_subcommands_now(keep_leveling ? FPSTR(G28_STR) : TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR)));
  414. }
  415. #if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE)
  416. static bool autoreport_paused;
  417. static bool set_autoreport_paused(const bool p) {
  418. const bool was = autoreport_paused;
  419. autoreport_paused = p;
  420. return was;
  421. }
  422. #else
  423. static constexpr bool autoreport_paused = false;
  424. static bool set_autoreport_paused(const bool) { return false; }
  425. #endif
  426. #if ENABLED(HOST_KEEPALIVE_FEATURE)
  427. /**
  428. * States for managing Marlin and host communication
  429. * Marlin sends messages if blocked or busy
  430. */
  431. enum MarlinBusyState : char {
  432. NOT_BUSY, // Not in a handler
  433. IN_HANDLER, // Processing a GCode
  434. IN_PROCESS, // Known to be blocking command input (as in G29)
  435. PAUSED_FOR_USER, // Blocking pending any input
  436. PAUSED_FOR_INPUT // Blocking pending text input (concept)
  437. };
  438. static MarlinBusyState busy_state;
  439. static uint8_t host_keepalive_interval;
  440. static void host_keepalive();
  441. static bool host_keepalive_is_paused() { return busy_state >= PAUSED_FOR_USER; }
  442. #define KEEPALIVE_STATE(N) REMEMBER(_KA_, gcode.busy_state, gcode.N)
  443. #else
  444. #define KEEPALIVE_STATE(N) NOOP
  445. #endif
  446. static void dwell(millis_t time);
  447. private:
  448. friend class MarlinSettings;
  449. #if ENABLED(MARLIN_DEV_MODE)
  450. static void D(const int16_t dcode);
  451. #endif
  452. static void G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move=false));
  453. #if ENABLED(ARC_SUPPORT)
  454. static void G2_G3(const bool clockwise);
  455. #endif
  456. static void G4();
  457. #if ENABLED(BEZIER_CURVE_SUPPORT)
  458. static void G5();
  459. #endif
  460. #if ENABLED(DIRECT_STEPPING)
  461. static void G6();
  462. #endif
  463. #if ENABLED(FWRETRACT)
  464. static void G10();
  465. static void G11();
  466. #endif
  467. #if ENABLED(NOZZLE_CLEAN_FEATURE)
  468. static void G12();
  469. #endif
  470. #if ENABLED(CNC_WORKSPACE_PLANES)
  471. static void G17();
  472. static void G18();
  473. static void G19();
  474. #endif
  475. #if ENABLED(INCH_MODE_SUPPORT)
  476. static void G20();
  477. static void G21();
  478. #endif
  479. #if ENABLED(G26_MESH_VALIDATION)
  480. static void G26();
  481. #endif
  482. #if ENABLED(NOZZLE_PARK_FEATURE)
  483. static void G27();
  484. #endif
  485. static void G28();
  486. #if HAS_LEVELING
  487. #if ENABLED(G29_RETRY_AND_RECOVER)
  488. static void event_probe_failure();
  489. static void event_probe_recover();
  490. static void G29_with_retry();
  491. #define G29_TYPE bool
  492. #else
  493. #define G29_TYPE void
  494. #endif
  495. static G29_TYPE G29();
  496. #endif
  497. #if HAS_BED_PROBE
  498. static void G30();
  499. #if ENABLED(Z_PROBE_SLED)
  500. static void G31();
  501. static void G32();
  502. #endif
  503. #endif
  504. #if ENABLED(DELTA_AUTO_CALIBRATION)
  505. static void G33();
  506. #endif
  507. #if ANY(Z_MULTI_ENDSTOPS, Z_STEPPER_AUTO_ALIGN, MECHANICAL_GANTRY_CALIBRATION)
  508. static void G34();
  509. #endif
  510. #if ENABLED(Z_STEPPER_AUTO_ALIGN)
  511. static void M422();
  512. static void M422_report(const bool forReplay=true);
  513. #endif
  514. #if ENABLED(ASSISTED_TRAMMING)
  515. static void G35();
  516. #endif
  517. #if ENABLED(G38_PROBE_TARGET)
  518. static void G38(const int8_t subcode);
  519. #endif
  520. #if HAS_MESH
  521. static void G42();
  522. #endif
  523. #if ENABLED(CNC_COORDINATE_SYSTEMS)
  524. static void G53();
  525. static void G54();
  526. static void G55();
  527. static void G56();
  528. static void G57();
  529. static void G58();
  530. static void G59();
  531. #endif
  532. #if BOTH(PTC_PROBE, PTC_BED)
  533. static void G76();
  534. #endif
  535. #if SAVED_POSITIONS
  536. static void G60();
  537. static void G61();
  538. #endif
  539. #if ENABLED(GCODE_MOTION_MODES)
  540. static void G80();
  541. #endif
  542. static void G92();
  543. #if ENABLED(CALIBRATION_GCODE)
  544. static void G425();
  545. #endif
  546. #if HAS_RESUME_CONTINUE
  547. static void M0_M1();
  548. #endif
  549. #if HAS_CUTTER
  550. static void M3_M4(const bool is_M4);
  551. static void M5();
  552. #endif
  553. #if ENABLED(COOLANT_MIST)
  554. static void M7();
  555. #endif
  556. #if EITHER(AIR_ASSIST, COOLANT_FLOOD)
  557. static void M8();
  558. #endif
  559. #if EITHER(AIR_ASSIST, COOLANT_CONTROL)
  560. static void M9();
  561. #endif
  562. #if ENABLED(AIR_EVACUATION)
  563. static void M10();
  564. static void M11();
  565. #endif
  566. #if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
  567. static void M12();
  568. #endif
  569. #if ENABLED(EXPECTED_PRINTER_CHECK)
  570. static void M16();
  571. #endif
  572. static void M17();
  573. static void M18_M84();
  574. #if ENABLED(SDSUPPORT)
  575. static void M20();
  576. static void M21();
  577. static void M22();
  578. static void M23();
  579. static void M24();
  580. static void M25();
  581. static void M26();
  582. static void M27();
  583. static void M28();
  584. static void M29();
  585. static void M30();
  586. #endif
  587. static void M31();
  588. #if ENABLED(SDSUPPORT)
  589. #if HAS_MEDIA_SUBCALLS
  590. static void M32();
  591. #endif
  592. #if ENABLED(LONG_FILENAME_HOST_SUPPORT)
  593. static void M33();
  594. #endif
  595. #if BOTH(SDCARD_SORT_ALPHA, SDSORT_GCODE)
  596. static void M34();
  597. #endif
  598. #endif
  599. #if ENABLED(DIRECT_PIN_CONTROL)
  600. static void M42();
  601. #endif
  602. #if ENABLED(PINS_DEBUGGING)
  603. static void M43();
  604. #endif
  605. #if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
  606. static void M48();
  607. #endif
  608. #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
  609. static void M73();
  610. #endif
  611. static void M75();
  612. static void M76();
  613. static void M77();
  614. #if ENABLED(PRINTCOUNTER)
  615. static void M78();
  616. #endif
  617. #if ENABLED(PSU_CONTROL)
  618. static void M80();
  619. #endif
  620. static void M81();
  621. #if HAS_EXTRUDERS
  622. static void M82();
  623. static void M83();
  624. #endif
  625. static void M85();
  626. static void M92();
  627. static void M92_report(const bool forReplay=true, const int8_t e=-1);
  628. #if ENABLED(M100_FREE_MEMORY_WATCHER)
  629. static void M100();
  630. #endif
  631. #if HAS_EXTRUDERS
  632. static void M104_M109(const bool isM109);
  633. FORCE_INLINE static void M104() { M104_M109(false); }
  634. FORCE_INLINE static void M109() { M104_M109(true); }
  635. #endif
  636. static void M105();
  637. #if HAS_FAN
  638. static void M106();
  639. static void M107();
  640. #endif
  641. #if DISABLED(EMERGENCY_PARSER)
  642. static void M108();
  643. static void M112();
  644. static void M410();
  645. #if ENABLED(HOST_PROMPT_SUPPORT)
  646. static void M876();
  647. #endif
  648. #endif
  649. static void M110();
  650. static void M111();
  651. #if ENABLED(HOST_KEEPALIVE_FEATURE)
  652. static void M113();
  653. #endif
  654. static void M114();
  655. static void M115();
  656. #if HAS_STATUS_MESSAGE
  657. static void M117();
  658. #endif
  659. static void M118();
  660. static void M119();
  661. static void M120();
  662. static void M121();
  663. #if HAS_FANCHECK
  664. static void M123();
  665. #endif
  666. #if ENABLED(PARK_HEAD_ON_PAUSE)
  667. static void M125();
  668. #endif
  669. #if ENABLED(BARICUDA)
  670. #if HAS_HEATER_1
  671. static void M126();
  672. static void M127();
  673. #endif
  674. #if HAS_HEATER_2
  675. static void M128();
  676. static void M129();
  677. #endif
  678. #endif
  679. #if HAS_HEATED_BED
  680. static void M140_M190(const bool isM190);
  681. FORCE_INLINE static void M140() { M140_M190(false); }
  682. FORCE_INLINE static void M190() { M140_M190(true); }
  683. #endif
  684. #if HAS_HEATED_CHAMBER
  685. static void M141();
  686. static void M191();
  687. #endif
  688. #if HAS_TEMP_PROBE
  689. static void M192();
  690. #endif
  691. #if HAS_COOLER
  692. static void M143();
  693. static void M193();
  694. #endif
  695. #if HAS_PREHEAT
  696. static void M145();
  697. static void M145_report(const bool forReplay=true);
  698. #endif
  699. #if ENABLED(TEMPERATURE_UNITS_SUPPORT)
  700. static void M149();
  701. static void M149_report(const bool forReplay=true);
  702. #endif
  703. #if HAS_COLOR_LEDS
  704. static void M150();
  705. #endif
  706. #if ENABLED(AUTO_REPORT_POSITION)
  707. static void M154();
  708. #endif
  709. #if BOTH(AUTO_REPORT_TEMPERATURES, HAS_TEMP_SENSOR)
  710. static void M155();
  711. #endif
  712. #if ENABLED(MIXING_EXTRUDER)
  713. static void M163();
  714. static void M164();
  715. #if ENABLED(DIRECT_MIXING_IN_G1)
  716. static void M165();
  717. #endif
  718. #if ENABLED(GRADIENT_MIX)
  719. static void M166();
  720. #endif
  721. #endif
  722. #if DISABLED(NO_VOLUMETRICS)
  723. static void M200();
  724. static void M200_report(const bool forReplay=true);
  725. #endif
  726. static void M201();
  727. static void M201_report(const bool forReplay=true);
  728. #if 0
  729. static void M202(); // Not used for Sprinter/grbl gen6
  730. #endif
  731. static void M203();
  732. static void M203_report(const bool forReplay=true);
  733. static void M204();
  734. static void M204_report(const bool forReplay=true);
  735. static void M205();
  736. static void M205_report(const bool forReplay=true);
  737. #if HAS_M206_COMMAND
  738. static void M206();
  739. static void M206_report(const bool forReplay=true);
  740. #endif
  741. #if ENABLED(FWRETRACT)
  742. static void M207();
  743. static void M207_report(const bool forReplay=true);
  744. static void M208();
  745. static void M208_report(const bool forReplay=true);
  746. #if ENABLED(FWRETRACT_AUTORETRACT)
  747. static void M209();
  748. static void M209_report(const bool forReplay=true);
  749. #endif
  750. #endif
  751. static void M211();
  752. static void M211_report(const bool forReplay=true);
  753. #if HAS_MULTI_EXTRUDER
  754. static void M217();
  755. static void M217_report(const bool forReplay=true);
  756. #endif
  757. #if HAS_HOTEND_OFFSET
  758. static void M218();
  759. static void M218_report(const bool forReplay=true);
  760. #endif
  761. static void M220();
  762. #if HAS_EXTRUDERS
  763. static void M221();
  764. #endif
  765. #if ENABLED(DIRECT_PIN_CONTROL)
  766. static void M226();
  767. #endif
  768. #if ENABLED(PHOTO_GCODE)
  769. static void M240();
  770. #endif
  771. #if HAS_LCD_CONTRAST
  772. static void M250();
  773. static void M250_report(const bool forReplay=true);
  774. #endif
  775. #if HAS_GCODE_M255
  776. static void M255();
  777. static void M255_report(const bool forReplay=true);
  778. #endif
  779. #if HAS_LCD_BRIGHTNESS
  780. static void M256();
  781. static void M256_report(const bool forReplay=true);
  782. #endif
  783. #if ENABLED(EXPERIMENTAL_I2CBUS)
  784. static void M260();
  785. static void M261();
  786. #endif
  787. #if HAS_SERVOS
  788. static void M280();
  789. #if ENABLED(EDITABLE_SERVO_ANGLES)
  790. static void M281();
  791. static void M281_report(const bool forReplay=true);
  792. #endif
  793. #if ENABLED(SERVO_DETACH_GCODE)
  794. static void M282();
  795. #endif
  796. #endif
  797. #if ENABLED(BABYSTEPPING)
  798. static void M290();
  799. #endif
  800. #if HAS_BUZZER
  801. static void M300();
  802. #endif
  803. #if ENABLED(PIDTEMP)
  804. static void M301();
  805. static void M301_report(const bool forReplay=true E_OPTARG(const int8_t eindex=-1));
  806. #endif
  807. #if ENABLED(PREVENT_COLD_EXTRUSION)
  808. static void M302();
  809. #endif
  810. #if HAS_PID_HEATING
  811. static void M303();
  812. #endif
  813. #if ENABLED(PIDTEMPBED)
  814. static void M304();
  815. static void M304_report(const bool forReplay=true);
  816. #endif
  817. #if HAS_USER_THERMISTORS
  818. static void M305();
  819. #endif
  820. #if ENABLED(MPCTEMP)
  821. static void M306();
  822. static void M306_report(const bool forReplay=true);
  823. #endif
  824. #if ENABLED(PIDTEMPCHAMBER)
  825. static void M309();
  826. static void M309_report(const bool forReplay=true);
  827. #endif
  828. #if HAS_MICROSTEPS
  829. static void M350();
  830. static void M351();
  831. #endif
  832. #if ENABLED(CASE_LIGHT_ENABLE)
  833. static void M355();
  834. #endif
  835. #if ENABLED(REPETIER_GCODE_M360)
  836. static void M360();
  837. #endif
  838. #if ENABLED(MORGAN_SCARA)
  839. static bool M360();
  840. static bool M361();
  841. static bool M362();
  842. static bool M363();
  843. static bool M364();
  844. #endif
  845. #if EITHER(EXT_SOLENOID, MANUAL_SOLENOID_CONTROL)
  846. static void M380();
  847. static void M381();
  848. #endif
  849. static void M400();
  850. #if HAS_BED_PROBE
  851. static void M401();
  852. static void M402();
  853. #endif
  854. #if HAS_PRUSA_MMU2
  855. static void M403();
  856. #endif
  857. #if ENABLED(FILAMENT_WIDTH_SENSOR)
  858. static void M404();
  859. static void M405();
  860. static void M406();
  861. static void M407();
  862. #endif
  863. #if HAS_FILAMENT_SENSOR
  864. static void M412();
  865. static void M412_report(const bool forReplay=true);
  866. #endif
  867. #if HAS_MULTI_LANGUAGE
  868. static void M414();
  869. static void M414_report(const bool forReplay=true);
  870. #endif
  871. #if HAS_LEVELING
  872. static void M420();
  873. static void M420_report(const bool forReplay=true);
  874. static void M421();
  875. #endif
  876. #if ENABLED(BACKLASH_GCODE)
  877. static void M425();
  878. static void M425_report(const bool forReplay=true);
  879. #endif
  880. #if HAS_M206_COMMAND
  881. static void M428();
  882. #endif
  883. #if HAS_POWER_MONITOR
  884. static void M430();
  885. #endif
  886. #if ENABLED(CANCEL_OBJECTS)
  887. static void M486();
  888. #endif
  889. static void M500();
  890. static void M501();
  891. static void M502();
  892. #if DISABLED(DISABLE_M503)
  893. static void M503();
  894. #endif
  895. #if ENABLED(EEPROM_SETTINGS)
  896. static void M504();
  897. #endif
  898. #if ENABLED(PASSWORD_FEATURE)
  899. static void M510();
  900. #if ENABLED(PASSWORD_UNLOCK_GCODE)
  901. static void M511();
  902. #endif
  903. #if ENABLED(PASSWORD_CHANGE_GCODE)
  904. static void M512();
  905. #endif
  906. #endif
  907. #if ENABLED(SDSUPPORT)
  908. static void M524();
  909. #endif
  910. #if ENABLED(SD_ABORT_ON_ENDSTOP_HIT)
  911. static void M540();
  912. #endif
  913. #if HAS_ETHERNET
  914. static void M552();
  915. static void M552_report();
  916. static void M553();
  917. static void M553_report();
  918. static void M554();
  919. static void M554_report();
  920. #endif
  921. #if HAS_STEALTHCHOP
  922. static void M569();
  923. static void M569_report(const bool forReplay=true);
  924. #endif
  925. #if ENABLED(BAUD_RATE_GCODE)
  926. static void M575();
  927. #endif
  928. #if ENABLED(ADVANCED_PAUSE_FEATURE)
  929. static void M600();
  930. static void M603();
  931. static void M603_report(const bool forReplay=true);
  932. #endif
  933. #if HAS_DUPLICATION_MODE
  934. static void M605();
  935. #endif
  936. #if IS_KINEMATIC
  937. static void M665();
  938. static void M665_report(const bool forReplay=true);
  939. #endif
  940. #if EITHER(DELTA, HAS_EXTRA_ENDSTOPS)
  941. static void M666();
  942. static void M666_report(const bool forReplay=true);
  943. #endif
  944. #if ENABLED(DUET_SMART_EFFECTOR) && PIN_EXISTS(SMART_EFFECTOR_MOD)
  945. static void M672();
  946. #endif
  947. #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
  948. static void M701();
  949. static void M702();
  950. #endif
  951. #if ENABLED(GCODE_REPEAT_MARKERS)
  952. static void M808();
  953. #endif
  954. #if ENABLED(GCODE_MACROS)
  955. static void M810_819();
  956. #endif
  957. #if HAS_BED_PROBE
  958. static void M851();
  959. static void M851_report(const bool forReplay=true);
  960. #endif
  961. #if ENABLED(SKEW_CORRECTION_GCODE)
  962. static void M852();
  963. static void M852_report(const bool forReplay=true);
  964. #endif
  965. #if ENABLED(I2C_POSITION_ENCODERS)
  966. FORCE_INLINE static void M860() { I2CPEM.M860(); }
  967. FORCE_INLINE static void M861() { I2CPEM.M861(); }
  968. FORCE_INLINE static void M862() { I2CPEM.M862(); }
  969. FORCE_INLINE static void M863() { I2CPEM.M863(); }
  970. FORCE_INLINE static void M864() { I2CPEM.M864(); }
  971. FORCE_INLINE static void M865() { I2CPEM.M865(); }
  972. FORCE_INLINE static void M866() { I2CPEM.M866(); }
  973. FORCE_INLINE static void M867() { I2CPEM.M867(); }
  974. FORCE_INLINE static void M868() { I2CPEM.M868(); }
  975. FORCE_INLINE static void M869() { I2CPEM.M869(); }
  976. #endif
  977. #if HAS_PTC
  978. static void M871();
  979. #endif
  980. #if ENABLED(LIN_ADVANCE)
  981. static void M900();
  982. static void M900_report(const bool forReplay=true);
  983. #endif
  984. #if HAS_TRINAMIC_CONFIG
  985. static void M122();
  986. static void M906();
  987. static void M906_report(const bool forReplay=true);
  988. #if ENABLED(MONITOR_DRIVER_STATUS)
  989. static void M911();
  990. static void M912();
  991. #endif
  992. #if ENABLED(HYBRID_THRESHOLD)
  993. static void M913();
  994. static void M913_report(const bool forReplay=true);
  995. #endif
  996. #if USE_SENSORLESS
  997. static void M914();
  998. static void M914_report(const bool forReplay=true);
  999. #endif
  1000. static void M919();
  1001. #endif
  1002. #if HAS_MOTOR_CURRENT_SPI || HAS_MOTOR_CURRENT_PWM || HAS_MOTOR_CURRENT_I2C || HAS_MOTOR_CURRENT_DAC
  1003. static void M907();
  1004. #if HAS_MOTOR_CURRENT_SPI || HAS_MOTOR_CURRENT_PWM
  1005. static void M907_report(const bool forReplay=true);
  1006. #endif
  1007. #endif
  1008. #if HAS_MOTOR_CURRENT_SPI || HAS_MOTOR_CURRENT_DAC
  1009. static void M908();
  1010. #endif
  1011. #if HAS_MOTOR_CURRENT_DAC
  1012. static void M909();
  1013. static void M910();
  1014. #endif
  1015. #if ENABLED(SDSUPPORT)
  1016. static void M928();
  1017. #endif
  1018. #if ENABLED(MAGNETIC_PARKING_EXTRUDER)
  1019. static void M951();
  1020. #endif
  1021. #if ENABLED(TOUCH_SCREEN_CALIBRATION)
  1022. static void M995();
  1023. #endif
  1024. #if BOTH(HAS_SPI_FLASH, SDSUPPORT)
  1025. static void M993();
  1026. static void M994();
  1027. #endif
  1028. #if ENABLED(PLATFORM_M997_SUPPORT)
  1029. static void M997();
  1030. #endif
  1031. static void M999();
  1032. #if ENABLED(POWER_LOSS_RECOVERY)
  1033. static void M413();
  1034. static void M413_report(const bool forReplay=true);
  1035. static void M1000();
  1036. #endif
  1037. #if ENABLED(X_AXIS_TWIST_COMPENSATION)
  1038. static void M423();
  1039. static void M423_report(const bool forReplay=true);
  1040. #endif
  1041. #if ENABLED(SDSUPPORT)
  1042. static void M1001();
  1043. #endif
  1044. #if ENABLED(DGUS_LCD_UI_MKS)
  1045. static void M1002();
  1046. #endif
  1047. #if ENABLED(UBL_MESH_WIZARD)
  1048. static void M1004();
  1049. #endif
  1050. #if ENABLED(HAS_MCP3426_ADC)
  1051. static void M3426();
  1052. #endif
  1053. #if ENABLED(MAX7219_GCODE)
  1054. static void M7219();
  1055. #endif
  1056. #if ENABLED(CONTROLLER_FAN_EDITABLE)
  1057. static void M710();
  1058. static void M710_report(const bool forReplay=true);
  1059. #endif
  1060. static void T(const int8_t tool_index);
  1061. };
  1062. extern GcodeSuite gcode;