[gcode_macro G32]
gcode:
  BED_MESH_CLEAR
  M117 > home
  G28
  M117 > qgl
  QUAD_GANTRY_LEVEL
  M117 > home
  G28
  # M117 > bed mesh calibrate
  # BED_MESH_CALIBRATE
  BED_MESH_PROFILE load=default # load default bed_mesh profile
  G0 X150 Y150 Z30 F3600


[gcode_macro M600]
description: Change filament
gcode:
  SAVE_GCODE_STATE NAME=M600_state
  PAUSE Y=15
  M117 > change filament
  RESTORE_GCODE_STATE NAME=M600_state


[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
    TURN_OFF_HEATERS
    PARK
    CANCEL_PRINT_BASE


[gcode_macro CENTER]
gcode:
  {% set X=params.X|default(150) %}
  {% set Y=params.Y|default(150) %}
  {% set Z=params.Z|default(25) %}
  {% if "xyz" in printer.toolhead.homed_axes %}
    G0 X{X} Y{Y} Z{Z} F10000
  {% else %}
    {action_respond_info("Printer not homed")}
  {% endif %}


[gcode_macro PARK]
gcode:
  {% set Y=params.Y|default(295) %}
  {% if "xyz" in printer.toolhead.homed_axes %}
    # set park positon for x and y
    ## close to max
    {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %}
    {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
    {% if Y != y_park %}
      {% set y_park = Y %}
    {% endif %}
    # calculate save lift position
    {% set max_z = printer.toolhead.axis_maximum.z|float %}
    {% set act_z = printer.toolhead.position.z|float %}
    {% if act_z < (max_z - 20.0) %}
        {% set z_safe = 20.0 %}
    {% else %}
        {% set z_safe = max_z - act_z %}
    {% endif %}
    G91
    G0 Z{z_safe} F900
    G90
    G0 X{x_park} Y{y_park} F6000
  {% else %}
    {action_respond_info("Printer not homed")}
  {% endif %}


[gcode_macro PROBE]
description: Override PROBE and make sure we're over the bed
rename_existing: PROBE_BASE
gcode:
  {%- if printer.toolhead.position.y|float > 270 -%}
    G0 Y270
  {%- endif -%}
  PROBE_BASE


[gcode_macro PROBE_CALIBRATE]
description: Override PROBE_CALIBRATE and make sure we're over the bed
rename_existing: PROBE_CALIBRATE_BASE
gcode:
  {%- if printer.toolhead.position.y|float > 270 -%}
    G0 Y270
  {%- endif -%}
  PROBE_CALIBRATE_BASE


[gcode_macro PAUSE]
description: Pause the actual running print
rename_existing: PAUSE_BASE
# change this if you need more or less extrusion
variable_extrude: 1.0
gcode:
  {% set Y=params.Y|default(295) %}
  # read E from pause macro
  {% set E = printer["gcode_macro PAUSE"].extrude|float %}
  # end of definitions
  M117 > pause
  PAUSE_BASE
  {% if printer.extruder.can_extrude|lower == 'true' %}
    G91
    G1 E-{E} F2100
    G90
  {% else %}
    {action_respond_info("Extruder not hot enough")}
  {% endif %}
  PARK Y={Y}


[gcode_macro RESUME]
description: Resume the actual running print
rename_existing: RESUME_BASE
gcode:
    # read E from pause macro
    {% set E = printer["gcode_macro PAUSE"].extrude|float %}
    # get VELOCITY parameter if specified
    {% if 'VELOCITY' in params|upper %}
      {% set get_params = ('VELOCITY=' + params.VELOCITY)  %}
    {%else %}
      {% set get_params = "" %}
    {% endif %}
    # end of definitions
    M117 > resume
    {% if printer.extruder.can_extrude|lower == 'true' %}
      G91
      G1 E{E} F6000
    {% else %}
      {action_respond_info("Extruder not hot enough")}
    {% endif %}
    RESUME_BASE {get_params}


[gcode_macro PRINT_START]
gcode:
  M117 > configuring
  SET_LED LED=caselight RED=0.00 GREEN=0.00 BLUE=0.50
  G4 P2000
  M140 S{BED}            # start bed heating
  M104 S{EXTRUDER}       # start extruder heating
  G92 E0                 # reset extruder
  G21                    # set units to millimeters
  G90                    # use absolute coordinates
  M83                    # use relative distances for extrusion

  M117 > homing
  SET_LED LED=caselight RED=0.00 GREEN=0.50 BLUE=0.00
  G4 P2000
  G32                    # home and qgl

  M117 > heating
  SET_LED LED=caselight RED=0.50 GREEN=0.00 BLUE=0.00
  G4 P2000
  G92 E0                 # reset extruder
  M190 S{BED}            # set and wait for bed temperature
  M109 S{EXTRUDER}       # set and wait for nozzle temperature

  M117 > starting
  SET_LED LED=caselight RED=0.50 GREEN=0.50 BLUE=0.50
  G4 P2000
  SET_FAN_SPEED FAN=exhaust_fan SPEED=0.5
  CLEAN_NOZZLE

[gcode_macro PRINT_LAYER_CHANGE]
gcode:
  {% set layer=params.LAYER|default(0) %}
  {% set layer_z=params.LAYER_Z|default(0) %}
  M117 > layer {layer}/{layer_z}mm


[gcode_macro CLEAN_NOZZLE]
gcode:
  {% set x0=params.x0|default(75) %}
  {% set x1=params.x1|default(225) %}
  {% set y0=params.y0|default(15) %}
  {% set y1=params.y1|default(15.8) %}
  M117 > clean nozzle
  G0 Z5 F300                  # move Z to travel height
  G0 X{x0} Y{y0} F5000        # move to x0/y0
  G0 Z0.2 F1500               # lower Z
  G0 X{x1} E30                # draw line
  G0 Y{y1}                    # move to y1
  G0 X{x0} E15                # draw fine line


[gcode_macro PRINT_END]
gcode:
  M117 > finished
  PARK
  M400                          ; wait for buffer to clear
  G92 E0                        ; zero the extruder
  G1 E-10.0 F3600               ; retract filament
  TURN_OFF_HEATERS
  M107                          ; turn off fan
  SET_FAN_SPEED FAN=exhaust_fan SPEED=0.0