# X1C Specific G-Code

Bambu Labs has partially implemented [Marlin G-Code](https://marlinfw.org/docs/gcode/G000-G001.html) commands and have added their own custom G-Code commands to perform functions that are not implemented in Marlin. It is also important to note that the X1C runs their own G-Code engine and does not use the open-source Marlin Firmware on their MC Board.

## Hardware Control

### Printer

<table border="1" id="bkmrk-code-description-exa" style="width: 100%; border-collapse: collapse; border-style: solid; height: 5114.1875px; border-width: 1px;"><thead><tr style="height: 29px;"><th style="width: 18.712753%; height: 29px;">**Code**</th><th style="width: 40.882002%; height: 29px;">**Description**</th><th style="width: 40.405244%; height: 29px;">**Example**</th></tr></thead><tbody><tr style="height: 72px;"><td style="width: 18.712753%; height: 72px;">G29.1</td><td style="width: 40.882002%; height: 72px;">Set Z-trim value to #

<p class="callout info">Use 0 to clear Z-trim</p>

</td><td style="width: 40.405244%; height: 72px;">Squish for Textured PEI

```G-Code
G29.1 Z-0.04
```

</td></tr><tr style="height: 141.1875px;"><td style="width: 18.712753%; height: 141.1875px;">G29.2 </td><td style="width: 40.882002%; height: 141.1875px;">Bed leveling compensation (ABL)</td><td style="width: 40.405244%; height: 141.1875px;">Disable ABL

```G-Code
G29.2 S0
```

Enable ABL

```G-Code
G29.2 S1
```

</td></tr><tr style="height: 45px;"><td style="width: 18.712753%; height: 45px;"> G29.4</td><td style="width: 40.882002%; height: 45px;"> High frequency z compensation</td><td style="width: 40.405244%; height: 45px;"> Turn off high frequency z compensation

```
G29.4 S0
```

Turn on high frequency z compensation

```G-Code
G29.4 S1
```

</td></tr><tr style="height: 45px;"><td style="width: 18.712753%; height: 45px;">M205 </td><td style="width: 40.882002%; height: 45px;">Sets the jerk limits in mm/sec for the X Y Z and E motions

<p class="callout info">If you are not chainging an jerk limit axis you do not need to explicity list it</p>

</td><td style="width: 40.405244%; height: 45px;">```
M205 X0.5 Y1.01 Z2.02 E3.03
```

  
</td></tr><tr style="height: 105px;"><td style="width: 18.712753%; height: 105px;">M17 X/Y/Z#.#</td><td style="width: 40.882002%; height: 105px;">Set X/Y/Z Stepper Motor Current

<p class="callout danger">Be EXTREMELY careful using this command as it is VERY EASY to cause hardware damage with it should you set it too high!!!</p>

</td><td style="width: 40.405244%; height: 105px;">set Z stepper current to 0.4 Amps

```G-Code
M17 Z0.4
```

</td></tr><tr style="height: 289px;"><td style="width: 18.712753%; height: 289px;">M106 P1 S0-255</td><td style="width: 40.882002%; height: 289px;">Part cooling fan off-full\*\*\*</td><td style="width: 40.405244%; height: 289px;">Sets the part fan on at 70%

```G-Code
M106 P1 S180
```

Sets the Aux fan on at 100%

```G-Code
M106 P2 S255
```

Sets the chamber fan on at 0%

```
M106 P3 S0
```

Sets the part fan on at 70%

```
M106 A1 S180
```

</td></tr><tr style="height: 98px;"><td style="width: 18.712753%; height: 98px;">M142</td><td style="width: 40.882002%; height: 98px;">Chamber Fan Temp Control</td><td style="width: 40.405244%; height: 98px;">Set chamber fan to min start rpm @35° and ramp to full speed at 40°

```G-Code
M142 P1 R35 S40
```

</td></tr><tr style="height: 82px;"><td style="width: 18.712753%; height: 29px;">M400</td><td style="width: 40.882002%; height: 29px;">Pause </td><td style="width: 40.405244%; height: 29px;">Pause until all movement completes

```
M400
```

Pause for 10 seconds

```G-Code
M400 S10
```

 Pause for User Interaction

```
M400 U1
```

 Pause for 500 miliseconds

```G-Code
M400 P500
```

</td></tr><tr style="height: 82px;"><td style="width: 18.712753%; height: 82px;">M220</td><td style="width: 40.882002%; height: 82px;">Set feed rate to percent of normal.

<p class="callout info">Default Speed is 100</p>

</td><td style="width: 40.405244%; height: 82px;">Set print rate to Ludicrous Speed. ```G-Code
M220 S166
```

</td></tr><tr style="height: 82px;"><td rowspan="2" style="height: 167px; width: 18.712753%;">M221   
</td><td style="width: 40.882002%; height: 82px;">Set Flow rate</td><td style="width: 40.405244%; height: 82px;">disable the X endstop and enable them on Y and Z)

```G-Code
M221 S100
```

</td></tr><tr style="height: 85px;"><td style="width: 40.882002%; height: 85px;">Disable endstop

<p class="callout info">If you are not chainging an endstop you do not need to explicity list it</p>

</td><td style="width: 40.405244%; height: 85px;">disable the X endstop and enable them on Y and Z)

```G-Code
M221 X0 Y1 Z1
```

</td></tr><tr><td style="width: 18.712753%;">  
</td><td style="width: 40.882002%;"></td><td style="width: 40.405244%;"></td></tr><tr><td style="width: 18.712753%; height: 61px;">M622 </td><td style="width: 40.882002%; height: 61px;">Conditional code block and execute if selected flag is True, otherwise skip to the end of the code block

<p class="callout info">Used with M1002</p>

</td><td style="width: 40.405244%; height: 61px;">Execute if false

```G-Code
M622 J0
```

Execute if true

```G-Code
M622 J1
```

</td></tr><tr><td style="width: 18.712753%; height: 29px;">M623</td><td style="width: 40.882002%; height: 29px;">End of the conditional code block

</td><td style="width: 40.405244%; height: 29px;">```
M623
```

  
</td></tr><tr style="height: 101px;"><td style="width: 18.712753%; height: 101px;">M710 A1 S0-255</td><td style="width: 40.882002%; height: 101px;">Motor Control (MC) Board fan off-full

<p class="callout danger">Be EXTREMELY careful using this command as it is VERY EASY to cause hardware damage with it should you set it too high!!!</p>

</td><td style="width: 40.405244%; height: 101px;">Sets the part fan on at 70%

```
M106 A1 S180
```

</td></tr><tr><td style="width: 18.712753%; height: 45px;">M900</td><td style="width: 40.882002%; height: 45px;">Set Pressure Advance, also known as Bambu Labs call this the K-value. </td><td style="width: 40.405244%; height: 45px;">```
M900 K0.023
```

</td></tr><tr style="height: 703px;"><td style="width: 18.712753%; height: 703px;">M960 S0 P0</td><td style="width: 40.882002%; height: 703px;">Toolhead Lighting and Lazers</td><td style="width: 40.405244%; height: 703px;">Turn off all Leds

```
M960 S0 P0
```

Turn on all Leds

```
M960 S0 P1
```

Horizontal Laser Off

```
M960 S1 P0
```

Horizontal Laser On

```
M960 S1 P1
```

Vertical Laser Off

```
M960 S2 P0
```

Vertical Laser On

```
M960 S2 P1
```

 Toolhead Light Off (micro-lidar)

```
M960 S4 P0
```

Toohead Light On

```G-Code
M960 S4 P1
```

 Toolhead Logo Light Off

```G-Code
M960 S5 P0
```

Toolhead Logo Light On

```
M960 S5 P1
```

</td></tr><tr style="height: 119px;"><td style="width: 18.712753%; height: 119px;">M970.3</td><td style="width: 40.882002%; height: 119px;">Play mech mode test vibrations

</td><td style="width: 40.405244%; height: 119px;">```
M970.3 Q0 A7 B30 C90 Q0 H15 K0
```

```
M970.3 Q1 A7 B30 C80  H15 K0
```

</td></tr><tr style="height: 35px;"><td style="width: 18.712753%; height: 35px;">M971</td><td style="width: 40.882002%; height: 35px;">Internal Camera Control</td><td style="width: 40.405244%; height: 35px;">Take photo

```G-Code
M971 S11 C10 O0
```

</td></tr><tr style="height: 82px;"><td style="width: 18.712753%; height: 82px;">M972</td><td style="width: 40.882002%; height: 82px;">Calibrate Micro-Lidar</td><td style="width: 40.405244%; height: 82px;">Move Lidar to calibration sticker

```G-Code
M972 S5 P0
```

</td></tr><tr style="height: 427px;"><td style="width: 18.712753%; height: 427px;">M973</td><td style="width: 40.882002%; height: 427px;">Toolhead Camera

</td><td style="width: 40.405244%; height: 427px;">Enable Auto Exposure

```
M973 S1
```

 Camera Off

```G-Code
M973 S3
```

Camera On

```G-Code
M973 S3
```

Turn off Micro-Lidar

```G-Code
M973 S4
```

Set Auto Exposure for Horizontal :Laser

```G-Code
M973 S6 P0
```

Set Auto Exposure for Vertical Laser

```G-Code
M973 S6 P1
```

</td></tr><tr style="height: 119px;"><td style="width: 18.712753%; height: 119px;">M974</td><td style="width: 40.882002%; height: 119px;">Set Mech Mode Suppression Values</td><td style="width: 40.405244%; height: 119px;">```G-Code
M974 Q0 S2 P0
```

```G-Code
M974 Q1 S2 P0
```

</td></tr><tr style="height: 167px;"><td style="width: 18.712753%; height: 167px;">M975</td><td style="width: 40.882002%; height: 167px;">Mech Mode Supression</td><td style="width: 40.405244%; height: 167px;">turn off mech mode supression

```G-Code
M975 S0
```

turn on mech mode supression

```G-Code
M975 S1
```

</td></tr><tr style="height: 204px;"><td style="width: 18.712753%; height: 204px;">M976</td><td style="width: 40.882002%; height: 204px;">  
</td><td style="width: 40.405244%; height: 204px;">```G-Code
M976 S3 P2
```

Scan Heatbead before printing

```G-Code
M976 S2 P1
```

First Layer Scan

```G-Code
M976 S1 P1
```

</td></tr><tr style="height: 135px;"><td style="width: 18.712753%; height: 135px;">M977</td><td style="width: 40.882002%; height: 135px;">first layer scanning</td><td style="width: 40.405244%; height: 135px;">Enable first layer scanning

```G-Code
M971 S11 C10 O0
```

```G-Code
M971 S11 C10 O0
```

</td></tr><tr style="height: 183px;"><td style="width: 18.712753%; height: 183px;">M981</td><td style="width: 40.882002%; height: 183px;">Spaghetti detector</td><td style="width: 40.405244%; height: 183px;">Spaghetti detector off

```
M981 S0 P20000
```

Spagetti detector on

```G-Code
M981 S1 P20000
```

</td></tr><tr style="height: 167px;"><td style="width: 18.712753%; height: 167px;">M982.2</td><td style="width: 40.882002%; height: 167px;">Motor Noise Cancelation</td><td style="width: 40.405244%; height: 167px;">Turn off motor noise cancelation

```
M982.2 C0
```

Turn on motor noise cancelation

```
M982.2 C1
```

</td></tr><tr style="height: 167px;"><td style="width: 18.712753%; height: 167px;">M991</td><td style="width: 40.882002%; height: 167px;">Layer Change</td><td style="width: 40.405244%; height: 167px;">Notify Printer of Layer Change where # is the current layer number

```G-code
M991 S0	P#
```

Finish Smooth timelapse

```G-Code
M991 S0 P-1
```

</td></tr><tr style="height: 29px;"><td style="width: 18.712753%; height: 29px;">M620 C#</td><td style="width: 40.882002%; height: 29px;">calibrate AMS by AMS index</td><td style="width: 40.405244%; height: 29px;">  
</td></tr><tr style="height: 29px;"><td style="width: 18.712753%; height: 29px;">M620 R#</td><td style="width: 40.882002%; height: 29px;">refresh AMS by tray index</td><td style="width: 40.405244%; height: 29px;">  
</td></tr><tr style="height: 29px;"><td style="width: 18.712753%; height: 29px;">M620 P#</td><td style="width: 40.882002%; height: 29px;">select AMS tray by tray index</td><td style="width: 40.405244%; height: 29px;">  
</td></tr><tr style="height: 82px;"><td style="width: 18.712753%; height: 82px;">M620 S#</td><td style="width: 40.882002%; height: 82px;">select AMS by tray index</td><td style="width: 40.405244%; height: 82px;">Pull Filament back into AMS

```G-Code
M620 S255
```

</td></tr><tr style="height: 29px;"><td style="width: 18.712753%; height: 29px;">M621 S#</td><td style="width: 40.882002%; height: 29px;">load filament in AMS by tray index</td><td style="width: 40.405244%; height: 29px;"> </td></tr><tr><td rowspan="2" style="height: 45px; width: 18.712753%;">M1002  
</td><td style="width: 40.882002%; height: 45px;">Select flag for conditional commands from slicer</td><td style="width: 40.405244%; height: 45px;">Check to see if extrusion calibration was set in the slicer

```G-Code
“M1002 judge_flag extrude_cali_flag”
```

</td></tr><tr><td style="width: 40.882002%;">Update Printer Status on Slicer / LCD</td><td style="width: 40.405244%;">Clear (Set to printing)

```
M1002 gcode_claim_action: 0
```

Auto bed levelling

```
M1002 gcode_claim_action: 1
```

Heatbed preheating

```
M1002 gcode_claim_action: 2
```

Sweeping XY mech mode

```
M1002 gcode_claim_action: 3
```

Changing filament

```
M1002 gcode_claim_action: 4
```

Pause (M400)

```
M1002 gcode_claim_action: 5
```

Paused due to filament runout

```
M1002 gcode_claim_action: 6
```

Heating hotend

```
M1002 gcode_claim_action: 7
```

Calibrating extrusion

```
M1002 gcode_claim_action: 8
```

Scanning bed surface

```
M1002 gcode_claim_action: 9
```

Inspecting first layer

```
M1002 gcode_claim_action: 10
```

Identifying build plate type

```
M1002 gcode_claim_action: 11
```

Calibrating Micro Lidar

```
M1002 gcode_claim_action: 12
```

Homing Toolhead

```
M1002 gcode_claim_action: 13
```

Cleaning Nozzle Tip

```
M1002 gcode_claim_action: 14
```

Checking Extruder Temperature

```
M1002 gcode_claim_action: 15
```

Paused by the user

```
M1002 gcode_claim_action: 16
```

Paused due to toolhead cover falling off

```
M1002 gcode_claim_action: 17
```

Calibrating the micor lidar

```
M1002 gcode_claim_action: 18
```

Calibrating the extruder flow

```
M1002 gcode_claim_action: 19
```

Paused due to nozzle temperature malfunction

```
M1002 gcode_claim_action: 20
```

Paused due to heat bed temperature malfunction

```G-Code
M1002 gcode_claim_action: 21

```

</td></tr><tr style="height: 151px;"><td style="width: 18.712753%; height: 151px;">M1003</td><td style="width: 40.882002%; height: 151px;">Power loss recovery</td><td style="width: 40.405244%; height: 151px;">Disable power loss recovery

```G-Code
M1003 S0
```

Enable power loss recovery

```
M1003 S1
```

</td></tr><tr><td style="width: 18.712753%;">M1004</td><td style="width: 40.882002%;">External Camera Shutter Control</td><td style="width: 40.405244%;">Actuate External Camera Shutter

```
M1004 S5 P1
```

</td></tr><tr style="height: 453px;"><td style="width: 18.712753%; height: 453px;">M1005</td><td style="width: 40.882002%; height: 453px;">set skew correction</td><td style="width: 40.405244%; height: 453px;">Set skew correction

```G-Code
M1005 X##.#Y##.# ; input values from printed calibration stl
M500 ; save the values
```

<p class="callout warning">Add the above Gcode to the last line of the “Machine start Gcode” and only run it once as the compensation will compound each time it is run. </p>

Set skew correction in radians

```
M1005 I500
M500
```

<p class="callout info">Unlike the first example this is not iterative, and will overwrite any skew value set</p>

Reset skew correction

```G-Code
M1005 I0 ; reset the compensation value
M500 ; save the value
```

</td></tr><tr style="height: 220px;"><td style="width: 18.712753%; height: 220px;">M1006</td><td style="width: 40.882002%; height: 220px;">Play Sound Through Speaker</td><td style="width: 40.405244%; height: 220px;">Enable Speaker?

```G-Code
M1006 S1
```

Set note to play

```G-Code
M1006 A0 B10 L100 C37 D10 M60 E37 F10 N60
```

Play supplied notes

```G-Code
M1006 W
```

</td></tr><tr style="height: 82px;"><td style="width: 18.712753%; height: 82px;">T1000</td><td style="width: 40.882002%; height: 82px;">Set toolhead to extruder</td><td style="width: 40.405244%; height: 82px;">```GCODE
T1000
```

</td></tr><tr style="height: 66px;"><td style="width: 18.712753%; height: 66px;">T1100</td><td style="width: 40.882002%; height: 66px;">Set toolhead to Micro-Lidar</td><td style="width: 40.405244%; height: 66px;">```
T1100
```

</td></tr></tbody></table>

# Software Control

<div class="md-table fullscreen-table-wrapper" data-table-index="2" id="bkmrk-code-description-exa-1"><div class="fullscreen-table-wrapper__buttons">  
</div><table style="width: 100%; height: 484px;"><thead><tr style="height: 29px;"><th style="width: 18.951132%; height: 29px;">**Code**</th><th style="width: 40.76338%; height: 29px;">**Description**</th><th style="width: 40.285487%; height: 29px;">**Example**</th></tr></thead><tbody><tr style="height: 29px;"><td style="width: 18.951132%; height: 29px;"> </td><td style="width: 40.76338%; height: 29px;"> </td><td style="width: 40.285487%; height: 29px;"> </td></tr><tr style="height: 45px;"><td style="width: 18.951132%; height: 45px;"> </td><td style="width: 40.76338%; height: 45px;"> </td><td style="width: 40.285487%; height: 45px;"> </td></tr><tr style="height: 82px;"><td style="width: 18.951132%; height: 82px;"> </td><td style="width: 40.76338%; height: 82px;"> </td><td style="width: 40.285487%; height: 82px;"> </td></tr><tr style="height: 45px;"><td style="width: 18.951132%; height: 45px;"> </td><td style="width: 40.76338%; height: 45px;"> </td><td style="width: 40.285487%; height: 45px;"> </td></tr><tr style="height: 45px;"><td style="width: 18.951132%; height: 45px;"> </td><td style="width: 40.76338%; height: 45px;"> </td><td style="width: 40.285487%; height: 45px;"> </td></tr><tr style="height: 61px;"><td style="width: 18.951132%; height: 61px;"> </td><td style="width: 40.76338%; height: 61px;"> </td><td style="width: 40.285487%; height: 61px;"> </td></tr><tr style="height: 29px;"><td style="width: 18.951132%; height: 29px;"> </td><td style="width: 40.76338%; height: 29px;"> </td><td style="width: 40.285487%; height: 29px;"> </td></tr><tr style="height: 29px;"><td style="width: 18.951132%; height: 29px;"> </td><td style="width: 40.76338%; height: 29px;"> </td><td style="width: 40.285487%; height: 29px;"> </td></tr></tbody></table>

</div>##### References:

1. [https://forum.bambulab.com/t/bambu-lab-x1-specific-g-code/666](https://forum.bambulab.com/t/bambu-lab-x1-specific-g-code/666)
2. [https://github.com/Doridian/OpenBambuAPI/blob/main/gcode.md](https://github.com/Doridian/OpenBambuAPI/blob/main/gcode.md)
3. [https://github.com/jphannifan/x1plus-testing/blob/main/Gcode.md](https://github.com/jphannifan/x1plus-testing/blob/main/Gcode.md)