[gcode_macro BED_MESH_CALIBRATE]
rename_existing:BED_MESH_CALIBRATE_BASE
gcode:
  {% if "z" not in printer.toolhead.homed_axes %}
    G28 Z
  {% endif %}
  M118 Heating the bed, please wait...
  M190 S50
  M118 Complete heating and start executing bed mesh calibrate
  BED_MESH_CALIBRATE_BASE
  G28 

[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing: QUAD_GANTRY_LEVEL_BASE
gcode:
  G28
  M118 Heating the bed, please wait...
  M190 S50
  M118 Complete heating and start executing quad gantry level
  QUAD_GANTRY_LEVEL_BASE
  G28 

[gcode_macro CALIBRATE_BED]
description: Level bed and create or update the "default" mesh
gcode:
  LM_ENABLE
  M190 S50
  M109 S150
  QUAD_GANTRY_LEVEL_BASE
  BED_MESH_CALIBRATE_BASE


[gcode_macro TUNE_BED_PID]
gcode:
  PID_CALIBRATE HEATER=heater_bed TARGET=60

[gcode_macro TUNE_EXTRUDER_PID]
gcode:
  PID_CALIBRATE HEATER=extruder TARGET=230

[gcode_macro SET_XYZ_POSITION]
gcode:
  SET_KINEMATIC_POSITION X=100 Y=100 Z=100

[gcode_macro RUN_INPUT_SHAPER]
gcode:
  SHAPER_CALIBRATE


[gcode_macro PRINT_START]
variable_b_extruder_temp:165
gcode:
  {% set EXTRUDER_TEMP = params.EXTRUDER|default(210)|float %}
  {% set BED_TEMP = params.BED|default(50)|float %}
  {% set b_extruder_temp = printer[printer.toolhead.extruder].target %}  
  LM_ENABLE
  MESH_LOAD
  # M118 Cooling nozzle to 165 ...
  # M106
  # M109 S165
  # M107 
  G28
  G90
  # M109 S{b_extruder_temp}
  LINE_PURGE

[gcode_macro Z_TO_BOTTOM]
gcode:
  G28
  G1 Z295


  
[gcode_macro RESUME]
rename_existing: BASE_RESUME
variable_last_fan_speed: 0
variable_last_jetstream_speed: 0
variable_last_extruder_temp: 0
gcode:
    {% set macro_found = True if printer['gcode_macro _CLIENT_VARIABLE'] is defined else False %}
    {% set client = printer['gcode_macro _CLIENT_VARIABLE'] %}
    {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %}
    {% set sp_move        = velocity if not macro_found else client.speed_move|default(velocity) %}
    ##### end of definitions #####
    M118 Resume printing....heating nozzle, please wait a moment
    M109 S{last_extruder_temp}
    M106 S{last_fan_speed*255|int}
    SET_FAN_SPEED FAN=Jetstream SPEED={last_jetstream_speed}
    _CLIENT_EXTRUDE
    BASE_RESUME VELOCITY={params.VELOCITY|default(sp_move)}


[delayed_gcode cool_hot_end]
gcode:
    {% if printer['pause_resume'].is_paused|int == 1 %}
      M104 S0   
    {% endif %}

[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
gcode:
    CLEAR_PAUSE
    {% if printer['pause_resume'].is_paused|int == 0 %}
        SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE={printer[printer.toolhead.extruder].target} 
        SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_fan_speed VALUE={printer["fan"].speed}   
        SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_jetstream_speed VALUE={printer["fan_generic Jetstream"].speed}   
        SAVE_GCODE_STATE NAME=PAUSE                                                          
        BASE_PAUSE                                                                           
        G1 Z{printer.gcode_move.position.z+10} F300
        G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000  
        SAVE_GCODE_STATE NAME=PAUSEPARK      
        M107
        UPDATE_DELAYED_GCODE ID=cool_hot_end DURATION=240   
    {% endif %}


[gcode_macro MESH_LOAD]
gcode:
    BED_MESH_PROFILE LOAD=default


[delayed_gcode delay_disable_motor]
gcode:
    LM_DISABLE

[gcode_macro PRINT_END]
gcode:
  G91 
  G1 Z5
  G1 E-5 F300
  G90
  G1 X200 Y10  F12000
  M104 S0 
  M140 S0
  M106 S0
  UPDATE_DELAYED_GCODE ID=delay_disable_motor DURATION=30  

# button click unload filament
[gcode_macro _C_UNLOAD_FILAMENT] 
gcode:  
    {% if printer[printer.toolhead.extruder].temperature > printer.configfile.settings['extruder'].min_extrude_temp %}
      {% set speed = params.SPEED|default(300) %}  
      {% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity %}  
      G92 E0   
      G1 E-20 F1200 # fast-unload  
    {% else %}
      M118 Extruder temperature too low, please heat the nozzle first
    {% endif %}

# touch screen unload filament
[gcode_macro UNLOAD_FILAMENT] 
gcode:  
  {% if printer.idle_timeout.state != 'Printing' %}
      M118 Unloading filament
      M118 Heating nozzle...
      M109 S250
      G91
      M118 Unloading...
      G0 E40 F360  
      G0 E40 F360 
      G0 E5 F1200
      M118 Cooling nozzle to 165 ...
      M106
      M109 S165
      M107
      G0 E-45 F1200
      G0 E-45 F1200 
      G0 E-45 F1200 
      G0 E-45 F1200 
      G90
      G92 E0
      M104 S0
      M118 Unload finish
  {% endif %}

[gcode_macro LOAD_FILAMENT] 
gcode:  
    {% if printer[printer.toolhead.extruder].temperature > printer.configfile.settings['extruder'].min_extrude_temp %}
      {% set speed = params.SPEED|default(300) %}  
      {% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity %}  
      G91  
      G92 E0   
      G1 E25 F{speed} # purge
    {% else %}
      M118 Extruder temperature too low,please heat the nozzle first
    {% endif %}

[gcode_macro M106]
rename_existing: G106
gcode:
    {% if params.P is defined %}
        {% if params.P|int == 2 %}
            {% if params.S is defined %}
                {% if params.S|int == 255 %}
                    {% set realspeed = 1 %}
                {% else %}
                    {% if params.S|int == 0 %}
                        {% set realspeed = 0 %}
                    {% else %}
                        {% set realspeed = params.S|float/255 %}
                    {% endif %}
                {% endif %}
            {% else %}
                {% set realspeed = 1 %}
            {% endif %}

            SET_FAN_SPEED FAN=Jetstream SPEED={realspeed}
        {% endif %}
    {% else %}
        {% if params.S is defined %}
          G106 S{params.S}
        {% else %}
          G106 S255
        {% endif %}
    {% endif %}

[gcode_macro M107]
rename_existing: G107
gcode:
    {% if params.P is defined %}
      {% if params.P|int == 2 %}
        SET_FAN_SPEED FAN=Jetstream SPEED=0
      {% endif %}      
    {% else %}
      SET_FAN_SPEED FAN=Jetstream SPEED=0  
      G107
    {% endif %}

[gcode_shell_command RM_UPDATE]
command: rm -rf /home/pi/magnetox-os-update 
timeout: 2.
verbose: True

[gcode_shell_command GIT_CLONE_DEV]
command: git clone -b v1.1.5 https://github.com/mypeopoly/magnetox-os-update /home/pi/magnetox-os-update
timeout: 150.
verbose: True

[gcode_shell_command GIT_CLONE]
command: git clone -b main https://github.com/mypeopoly/magnetox-os-update /home/pi/magnetox-os-update
timeout: 150.
verbose: True

[gcode_shell_command CHMOD_E]
command: chmod +x /home/pi/magnetox-os-update/update.sh
timeout: 3.
verbose: True

[gcode_shell_command  UPDATE_OS_CMD]
command: sh /home/pi/magnetox-os-update/update.sh
timeout: 600.
verbose: True

[gcode_macro _UPDATE_OS_DEV]
gcode:
  RUN_SHELL_COMMAND CMD=RM_UPDATE
  RUN_SHELL_COMMAND CMD=GIT_CLONE_DEV
  RUN_SHELL_COMMAND CMD=CHMOD_E
  RUN_SHELL_COMMAND CMD=UPDATE_OS_CMD


[gcode_macro _UPDATE_OS]
gcode:
  RUN_SHELL_COMMAND CMD=RM_UPDATE
  RUN_SHELL_COMMAND CMD=GIT_CLONE
  RUN_SHELL_COMMAND CMD=CHMOD_E
  RUN_SHELL_COMMAND CMD=UPDATE_OS_CMD

[gcode_shell_command  MOTOR_CONTROL]
command: curl -G http://127.0.0.1:8880/motor_control
timeout: 2.
verbose: True

[gcode_macro LINEAR_MOTOR_CONTROL]
gcode:
  RUN_SHELL_COMMAND CMD=MOTOR_CONTROL



[gcode_shell_command  GET_MIRROR_VERSION]
command: curl -G http://127.0.0.1:8880/get_os_version
timeout: 2.
verbose: True

[gcode_macro MAGNETO_OS_VERSION]
gcode:
  RUN_SHELL_COMMAND CMD=GET_MIRROR_VERSION

[gcode_shell_command  RESIZE_FILE_SYSTEM]
command: curl -G http://127.0.0.1:8880/auto_resize_filesystem
timeout: 2.
verbose: False

[gcode_macro RESIZE_FILESYSTEM]
gcode:
  RUN_SHELL_COMMAND CMD=RESIZE_FILE_SYSTEM

[gcode_shell_command  LINER_MOTOR_ENABLE]
command: curl -G http://127.0.0.1:8880/send_command?command=ENABLE
timeout: 2.
verbose: False


[gcode_shell_command  LINER_MOTOR_DISABLE]
command: curl -G http://127.0.0.1:8880/send_command?command=DISABLE
timeout: 2.
verbose: False


[gcode_macro LINER_MOTOR]
gcode:
  {% if params.ENABLE is defined %}
    {% if params.ENABLE|int == 0 %}
      RUN_SHELL_COMMAND CMD=LINER_MOTOR_DISABLE
    {% else %}
      RUN_SHELL_COMMAND CMD=LINER_MOTOR_ENABLE
    {% endif %}
  {% else %}
    RUN_SHELL_COMMAND CMD=LINER_MOTOR_ENABLE
  {% endif %}

[gcode_macro LM_ENABLE]
gcode:
  G4 P500
  RUN_SHELL_COMMAND CMD=LINER_MOTOR_ENABLE
  
[gcode_macro LM_DISABLE]
gcode:
  RUN_SHELL_COMMAND CMD=LINER_MOTOR_DISABLE



[gcode_macro TEST_X_MOVE]
gcode:
    # Speed
    {% set speed  = params.SPEED|default(400)|int %}
    # Iterations
    {% set iterations = params.ITERATIONS|default(10)|int %}
    # Acceleration
    {% set accel  = params.ACCEL|default(10000)|int %}
    SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2}
    G28
    G1 Z20 F300
    {% for i in range(iterations) %}
        G0 X50 Y150 F{speed*60}
        G0 X290 Y150 F{speed*60}
    {% endfor %}

[gcode_macro TEST_X_MOVE_START]
gcode:
    # Speed
    {% set speed  = params.SPEED|default(400)|int %}
    # Iterations
    {% set iterations = params.ITERATIONS|default(10)|int %}
    # Acceleration
    {% set accel  = params.ACCEL|default(10000)|int %}
    SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2}
    G28
    G1 Z20 F300
    {% for i in range(iterations) %}
        G0 X10 Y150 F{speed*60}
        G0 X180 Y150 F{speed*60}
    {% endfor %}


[gcode_macro TEST_X_MOVE_END]
gcode:
    # Speed
    {% set speed  = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %}
    # Iterations
    {% set iterations = params.ITERATIONS|default(5)|int %}
    # Acceleration
    {% set accel  = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %}
    SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2}
    G28
    G1 Z20 F300
    {% for i in range(iterations) %}
        G0 X160 Y150 F{speed*60}
        G0 X280 Y150 F{speed*60}
    {% endfor %}

[gcode_macro TEST_Y_MOVE]
gcode:
    # Speed
    {% set speed  = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %}
    # Iterations
    {% set iterations = params.ITERATIONS|default(5)|int %}
    # Acceleration
    {% set accel  = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %}
    SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2}
    G28
    G1 Z20 F300
    {% for i in range(iterations) %}
        G0 X100 Y50 F{speed*60}
        G0 X100 Y350 F{speed*60}
    {% endfor %}

[gcode_macro TEST_XY_MOVE]
gcode:
    # Speed
    {% set speed  = params.SPEED|default(400)|int %}
    # Iterations
    {% set iterations = params.ITERATIONS|default(5)|int %}
    # Acceleration
    {% set accel  = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %}
    SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2}
    G28
    G1 Z20 F300
    {% for i in range(iterations) %}
        G0 X10 Y10 F{speed*60}
        G0 X250 Y350 F{speed*60}
    {% endfor %}

[gcode_macro TEST_Z_MOVE]
gcode:
    # Speed
    {% set speed  = params.SPEED|default(20)|int %}
    # Iterations
    {% set iterations = params.ITERATIONS|default(3)|int %}
    # Acceleration
    {% set accel  = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %}
    SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2}
    G28
    {% for i in range(iterations) %}
        G0 Z10 F{speed*60}
        G0 Z266 F{speed*60}
    {% endfor %}