File indexing completed on 2024-05-12 04:41:10
0001 /* AtCore KDE Libary for 3D Printers 0002 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0003 SPDX-FileCopyrightText: 2016 Lays Rodrigues <lays.rodrigues@kde.org> 0004 SPDX-FileCopyrightText: 2016, 2018 Tomaz Canabrava <tcanabrava@kde.org> 0005 SPDX-FileCopyrightText: 2016 Patrick José Pereira <patrickjp@kde.org> 0006 SPDX-FileCopyrightText: 2016-2020 Chris Rizzitello <rizzitello@kde.org> 0007 */ 0008 0009 #include "gcodecommands.h" 0010 #include <QString> 0011 0012 const QString GCode::commandRequiresArgument = QObject::tr("%1%2: requires an argument"); 0013 const QString GCode::commandNotSupported = QObject::tr("Not implemented or not supported!"); 0014 0015 QString GCode::description(GCommands gcode) 0016 { 0017 switch (gcode) { 0018 case G0: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0019 return QObject::tr("G0: Rapid linear move"); 0020 case G1: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0021 return QObject::tr("G1: Linear move"); 0022 case G2: // Sprinter - Marlin - Repetier - Smoothie 0023 return QObject::tr("G2: Controlled Arc Move clockwise"); 0024 case G3: // Sprinter - Marlin - Repetier - Smoothie 0025 return QObject::tr("G3: Controlled Arc Move counterclockwise"); 0026 case G4: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0027 return QObject::tr("G4: Dwell"); 0028 case G10: // Marlin - Repetier > 0.92 - Smoothie 0029 return QObject::tr("G10: Retract"); 0030 case G11: // Marlin - Repetier > 0.92 - Smoothie 0031 return QObject::tr("G11: Unretract"); 0032 case G20: // Teacup - Sprinter - Repetier - Smoothie - RepRap Firmware 0033 return QObject::tr("G20: Set units to inches"); 0034 case G21: // Teacup - Sprinter - Repetier - Smoothie - RepRap Firmware 0035 return QObject::tr("G21: Set units to millimeters"); 0036 case G28: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0037 return QObject::tr("G28: Move to Origin Home"); 0038 case G29: // Marlin - Repetier 0.91.7 0039 return QObject::tr("G29: Detailed Z-Probe"); 0040 case G30: // Marlin - Repetier - Smoothie - RepRap Firmware 0041 return QObject::tr("G30: Single Z-Probe"); 0042 case G31: // Repetier 0.91.7 - Smoothie - RepRap Firmware - Marlin 0043 return QObject::tr("G31: Set or report current probe status / Dock Z Probe sled for Marlin"); 0044 case G32: // Repetier 0.92.8 - Smoothie - RepRap Firmware - Marlin 0045 return QObject::tr("G32: Probe Z and calculate Z plane(Bed Leveling)/ UnDoc Z Probe sled for Marlin"); 0046 case G33: // Repetier 0.92.8 0047 return QObject::tr("G33: Measure/List/Adjust Distortion Matrix"); 0048 case G90: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0049 return QObject::tr("G90: Set to absolute positioning"); 0050 case G91: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0051 return QObject::tr("G91: Set to relative positioning"); 0052 case G92: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0053 return QObject::tr("G92: Set position"); 0054 case G100: // Repetier 0.92 0055 return QObject::tr("G100: Calibrate floor or rod radius"); 0056 case G130: // MakerBot 0057 return QObject::tr("G130: Set digital potentiometer value"); 0058 case G131: // Repetier 0.91 0059 return QObject::tr("G131: Recase Move offset"); 0060 case G132: // Repetier 0.91 0061 return QObject::tr("G132: Calibrate endstops offsets"); 0062 case G133: // Repetier 0.91 0063 return QObject::tr("G133: Measure steps to top"); 0064 case G161: // Teacup - MakerBot 0065 return QObject::tr("G161: Home axis to minimum"); 0066 case G162: // Teacup - MakerBot 0067 return QObject::tr("G162: Home axis to maximum"); 0068 default: 0069 return commandNotSupported; 0070 } 0071 } 0072 0073 QString GCode::toCommand(GCommands gcode, const QString &value1) 0074 { 0075 QString code = QStringLiteral("G%1").arg(QString::number(gcode)); 0076 switch (gcode) { 0077 case G29: 0078 case G90: 0079 case G91: 0080 return code; 0081 0082 case G32: 0083 return code.append(QStringLiteral(" S1")); 0084 case G0: 0085 case G1: 0086 case G28: 0087 code = value1.isEmpty() ? code : code.append(QStringLiteral(" %1").arg(value1)); 0088 return code; 0089 0090 default: 0091 return commandNotSupported; 0092 } 0093 } 0094 0095 QString GCode::description(MCommands gcode) 0096 { 0097 switch (gcode) { 0098 case M0: // Marlin - Teacup - RepRap Firmware 0099 return QObject::tr("M0: Stop or unconditional stop"); 0100 case M1: // Marlin - RepRap Firmware 0101 return QObject::tr("M1: Sleep or unconditional stop"); 0102 case M2: // Teacup - Maker Bot 0103 return QObject::tr("M2: Program End"); 0104 case M6: // Teacup 0105 return QObject::tr("M6: Tool Change"); 0106 case M17: // Teacup - Marlin - Smoothie 0107 return QObject::tr("M17: Enable/power all steppers motors"); 0108 case M18: // Teacup - Marlin(M84) - Smoothie -RepRap Firmware 0109 return QObject::tr("M18: Disable all steppers motors"); 0110 case M20: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0111 return QObject::tr("M20: List SDCard"); 0112 case M21: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0113 return QObject::tr("M21: Initialize SDCard"); 0114 case M22: // Teacup - Sprinter - Marlin - Repetier - RepRap Firmware 0115 return QObject::tr("M22: Release SDCard"); 0116 case M23: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0117 return QObject::tr("M23: Select SD file"); 0118 case M24: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0119 return QObject::tr("M24: Start/resume SD print"); 0120 case M25: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0121 return QObject::tr("M25: Pause SD print"); 0122 case M26: // Sprinter - Marlin - Repetier - Smoothie(abort) - RepRap Firmware 0123 return QObject::tr("M26: Set SD position"); 0124 case M27: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0125 return QObject::tr("M27: Report SD print status"); 0126 case M28: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0127 return QObject::tr("M28: Begin write to SD card"); 0128 case M29: // Sprinter - Marlin - Repetier - RepRap Firmware 0129 return QObject::tr("M29: Stop writing to SD card"); 0130 case M30: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0131 return QObject::tr("M30: Delete a file on the SD card"); 0132 case M31: // Marlin 0133 return QObject::tr("M31: Output time since last M109 or SD card start to serial"); 0134 case M32: // Marlin - Smoothie - RepRap Firmware 0135 return QObject::tr("M32: Select file and start SD print"); 0136 case M33: // Marlin 0137 return QObject::tr("M33: Get the long name for an SD card file or folder"); 0138 case M34: // Marlin 0139 return QObject::tr("M34: Set SD file sorting options"); 0140 case M36: // RepRap Firmware 0141 return QObject::tr("M36: Return file information"); 0142 case M42: // Sprinter - Marlin - Repetier - RepRap Firmware 0143 return QObject::tr("M42: Switch I/O pin"); 0144 case M48: // Marlin 0145 return QObject::tr("M48: Measure Z-Probe repeatability"); 0146 case M70: // MakerBot 0147 return QObject::tr("M70: Display message"); 0148 case M72: // MakerBot 0149 return QObject::tr("M72: Play a tone or song"); 0150 case M73: // MakerBot 0151 return QObject::tr("M73: Set build percentage"); 0152 case M80: // Teacup(automatic) - Sprinter - Marlin - Repetier - RepRap Firmware 0153 return QObject::tr("M80: ATX Power On"); 0154 case M81: // Teacup(automatic) - Sprinter - Marlin - Repetier - RepRap Firmware 0155 return QObject::tr("M81: ATX Power Off"); 0156 case M82: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0157 return QObject::tr("M82: Set extruder to absolute mode"); 0158 case M83: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0159 return QObject::tr("M83: Set extruder to relative mode"); 0160 case M84: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0161 return QObject::tr("M84: Stop idle hold"); 0162 case M85: // Sprinter - Marlin - Repetier 0163 return QObject::tr("M85: Set Inactivity shutdown timer"); 0164 case M92: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0165 return QObject::tr("M92: Set axis steps per unit"); 0166 case M93: // Sprinter 0167 return QObject::tr("M93: Send axis steps per unit"); 0168 case M98: // RepRap Firmware 0169 return QObject::tr("M98: Call Macro/Subprogram"); 0170 case M99: // RepRap Firmware 0171 return QObject::tr("M99: Return from Macro/Subprogram"); 0172 case M101: // Teacup 0173 return QObject::tr("M101: Turn extruder 1 on Forward, Undo Retraction"); 0174 case M103: // Teacup 0175 return QObject::tr("M103: Turn all extruders off - Extruder Retraction"); 0176 case M104: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0177 return QObject::tr("M104: Set Extruder Temperature"); 0178 case M105: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0179 return QObject::tr("M105: Get Extruder Temperature"); 0180 case M106: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0181 return QObject::tr("M106: Fan On"); 0182 case M107: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0183 return QObject::tr("M107: Fan Off"); 0184 case M108: // Marlin 0185 return QObject::tr("M108: Cancel Heating"); 0186 case M109: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0187 return QObject::tr("M109: Set Extruder Temperature and Wait"); 0188 case M110: // Marlin - Repetier - Smoothie - RepRap Firmware 0189 return QObject::tr("M110: Set Current Line Number"); 0190 case M111: // Teacup - Marlin - Repetier - RepRap Firmware 0191 return QObject::tr("M111: Set Debug Level"); 0192 case M112: // Teacup - Marlin - Repetier - Smoothie - RepRap Firmware 0193 return QObject::tr("M112: Emergency Stop"); 0194 case M114: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0195 return QObject::tr("M114: Get Current Position"); 0196 case M115: // Teacup - Sprinter - Marlin - Repetier - RepRap Firmware 0197 return QObject::tr("M115: Get Firmware Version and Capabilities"); 0198 case M116: // Teacup - Repetier - RepRap Firmware - MakerBot 0199 return QObject::tr("M116: Wait"); 0200 case M117: // Marlin - Repetier - Smoothie - RepRap Firmware 0201 return QObject::tr("M117: Display Message"); 0202 case M119: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0203 return QObject::tr("M119: Get Endstop Status"); 0204 case M120: // Marlin - Smoothie - RepRap Firmware 0205 return QObject::tr("M120: Push for Smoothie and RepRap Firmware / Enable Endstop detection for Marlin"); 0206 case M121: // Marlin - Smoothie - RepRap Firmware 0207 return QObject::tr("M121: Pop for Smoothie and RepRap Firmware / Disable Endstop detection for Marlin"); 0208 case M122: // RepRap Firmware 0209 return QObject::tr("M122: Diagnose"); 0210 case M126: // Marlin - MakerBot 0211 return QObject::tr("M126: Open valve"); 0212 case M127: // Marlin - MakerBot 0213 return QObject::tr("M127: Close valve"); 0214 case M130: // Teacup 0215 return QObject::tr("M130: Set PID P value"); 0216 case M131: // Teacup 0217 return QObject::tr("M131: Set PID I value"); 0218 case M132: // Teacup - MakerBot 0219 return QObject::tr("M132: Set PID D value"); 0220 case M133: // Teacup - MakerBot 0221 return QObject::tr("M133: Set PID I limit value"); 0222 case M134: // Teacup - MakerBot 0223 return QObject::tr("M134: Write PID values to EEPROM"); 0224 case M135: // RepRap Firmware - MakerBot 0225 return QObject::tr("M135: Set PID sample interval"); 0226 case M140: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware - MakerBot 0227 return QObject::tr("M140: Set Bed Temperature - Fast"); 0228 case M141: // RepRap Firmware 0229 return QObject::tr("M141: Set Chamber Temperature - Fast"); 0230 case M143: // RepRap Firmware 0231 return QObject::tr("M143: Maximum hot-end temperature"); 0232 case M144: // RepRap Firmware 0233 return QObject::tr("M144: Stand by your bed"); 0234 case M150: // Marlin 0235 return QObject::tr("M150: Set display color"); 0236 case M155: // Look for Cap:AUTOREPORT_TEMP:1 in M115 to check for support 0237 return QObject::tr("M155: Set Temperature auto report"); 0238 case M163: // Repetier > 0.92 0239 return QObject::tr("M163: Set weight of mixed material"); 0240 case M164: // Repetier > 0.92 0241 return QObject::tr("M164: Store weights"); 0242 case M190: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0243 return QObject::tr("M190: Wait for bed temperature to reach target temp"); 0244 case M200: // Marlin - Repetier - Smoothie 0245 return QObject::tr("M200: Set filament diameter"); 0246 case M201: // Sprinter - Marlin - Repetier - RepRap Firmware 0247 return QObject::tr("M201: Set max printing acceleration"); 0248 case M202: // Marlin - Repetier 0249 return QObject::tr("M202: Set max travel acceleration"); 0250 case M203: // Marlin - Repetier - Smoothie - RepRap Firmware 0251 return QObject::tr("M203: Set maximum feedrate"); 0252 case M204: // Sprinter - Marlin - Repetier - Smoothie 0253 return QObject::tr("M204: Set default acceleration"); 0254 case M205: // Sprinter - Marlin - Repetier - Smoothie 0255 return QObject::tr("M205: Advanced settings"); 0256 case M206: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0257 return QObject::tr("M206: Offset axes for Sprinter, Marlin, Smoothie, RepRap Firmware / Set eeprom value for Repetier"); 0258 case M207: // Marlin - Smoothie 0259 return QObject::tr("M207: Set retract length"); 0260 case M208: // Marlin - Smoothie 0261 return QObject::tr("M208: Set unretract length"); 0262 case M209: // Marlin - Repetier 0263 return QObject::tr("M209: Enable automatic retract"); 0264 case M212: // Marlin 0265 return QObject::tr("M212: Set Bed Level Sensor Offset"); 0266 case M218: // Marlin 0267 return QObject::tr("M218: Set Hotend Offset"); 0268 case M220: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0269 return QObject::tr("M220: Set speed factor override percentage"); 0270 case M221: // Teacup - Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0271 return QObject::tr("M221: Set extrude factor override percentage"); 0272 case M226: // Marlin - Repetier 0273 return QObject::tr("M226: Wait for pin state"); 0274 case M231: // Repetier 0275 return QObject::tr("M231: Set OPS parameter"); 0276 case M232: // Repetier 0277 return QObject::tr("M232: Read and reset max. advance values"); 0278 case M240: // Marlin 0279 return QObject::tr("M240: Trigger camera"); 0280 case M250: // Marlin 0281 return QObject::tr("M250: Set LCD contrast"); 0282 case M251: // Repetier 0283 return QObject::tr("M251: Measure Z steps from homing stop (Delta printers)"); 0284 case M280: // Marlin 0285 return QObject::tr("M280: Set servo position"); 0286 case M300: // Marlin - Repetier - RepRap Firmware - MakerBot 0287 return QObject::tr("M300: Play beep sound"); 0288 case M301: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0289 return QObject::tr("M301: Set PID parameters"); 0290 case M302: // Marlin - Repetier > 0.92 - RepRap Firmware 0291 return QObject::tr("M302: Allow cold extrudes "); 0292 case M303: // Sprinter - Marlin - Repetier - Smoothie 0293 return QObject::tr("M303: Run PID tuning"); 0294 case M304: // Marlin - RepRap Firmware 0295 return QObject::tr("M304: Set PID parameters - Bed"); 0296 case M305: // Smoothie - RepRap Firmware 0297 return QObject::tr("M305: Set thermistor and ADC parameters"); 0298 case M306: // Smoothie 0299 return QObject::tr("M306: set home offset calculated from toolhead position"); 0300 case M320: // Repeier 0301 return QObject::tr("M320: Activate autolevel (Repetier)"); 0302 case M321: // Repetier 0303 return QObject::tr("M321: Deactivate autolevel (Repetier)"); 0304 case M322: // Repetier 0305 return QObject::tr("M322: Reset autolevel matrix (Repetier)"); 0306 case M323: // Repetier 0307 return QObject::tr("M323: Distortion correction on/off (Repetier)"); 0308 case M340: // Repetier 0309 return QObject::tr("M340: Control the servos"); 0310 case M350: // Marlin - Repetier - RepRap Firmware 0311 return QObject::tr("M350: Set microstepping mode"); 0312 case M351: // Marlin 0313 return QObject::tr("M351: Toggle MS1 MS2 pins directly"); 0314 case M355: // Repetier > 0.92.2 0315 return QObject::tr("M355: Turn case lights on/off"); 0316 case M360: // Repetier > 9.92.2 0317 return QObject::tr("M360: Report firmware configuration"); 0318 case M361: // Smoothie 0319 return QObject::tr("M361: Move to Theta 90 degree position"); 0320 case M362: // Smoothie 0321 return QObject::tr("M362: Move to Psi 0 degree position"); 0322 case M363: // Smoothie 0323 return QObject::tr("M363: Move to Psi 90 degree position"); 0324 case M364: // Smoothie 0325 return QObject::tr("M364: Move to Psi + Theta 90 degree position"); 0326 case M365: // Smoothie 0327 return QObject::tr("M365: SCARA scaling factor"); 0328 case M366: // Smoothie 0329 return QObject::tr("M366: SCARA convert trim"); 0330 case M370: // Smoothie 0331 return QObject::tr("M370: Morgan manual bed level - clear map"); 0332 case M371: // Smoothie 0333 return QObject::tr("M371: Move to next calibration position"); 0334 case M372: // Smoothie 0335 return QObject::tr("M372: Record calibration value, and move to next position"); 0336 case M373: // Smoothie 0337 return QObject::tr("M373: End bed level calibration mode"); 0338 case M374: // Smoothie 0339 return QObject::tr("M374: Save calibration grid"); 0340 case M375: // Smoothie 0341 return QObject::tr("M375: Display matrix / Load Matrix"); 0342 case M380: // Marlin 0343 return QObject::tr("M380: Activate solenoid"); 0344 case M381: // Marlin 0345 return QObject::tr("M381: Disable all solenoids"); 0346 case M400: // Sprinter - Marlin - Repetier - Smoothie - RepRap Firmware 0347 return QObject::tr("M400: Wait for current moves to finish"); 0348 case M401: // Marlin 0349 return QObject::tr("M401: Lower z-probe"); 0350 case M402: // Marlin 0351 return QObject::tr("M402: Raise z-probe"); 0352 case M404: // Marlin - RepRap Firmware 0353 return QObject::tr("M404: Filament width and nozzle diameter"); 0354 case M405: // Marlin 0355 return QObject::tr("M405: Filament Sensor on"); 0356 case M406: // Marlin 0357 return QObject::tr("M406: Filament Sensor off"); 0358 case M407: // Marlin - RepRap Firmware 0359 return QObject::tr("M407: Display filament diameter"); 0360 case M408: // RepRap Firmware 0361 return QObject::tr("M408: Report JSON-style response"); 0362 case M420: 0363 return QObject::tr("M420: Enable/Disable Mesh Leveling (Marlin)"); 0364 case M450: // Repetier 0365 return QObject::tr("M450: Report Printer Mode"); 0366 case M451: // Repetier 0367 return QObject::tr("M451: Select FFF Printer Mode"); 0368 case M452: // Repetier 0369 return QObject::tr("M452: Select Laser Printer Mode"); 0370 case M453: // Repetier 0371 return QObject::tr("M453: Select CNC Printer Mode"); 0372 case M460: // Repetier 0373 return QObject::tr("M460: Define temperature range for thermistor controlled fan"); 0374 case M500: // Sprinter - Marlin - Repetier - RepRap Firmware 0375 return QObject::tr("M500: Store parameters in EEPROM"); 0376 case M501: // Sprinter - Marlin - Repetier - RepRap Firmware 0377 return QObject::tr("M501: Read parameters from EEPROM"); 0378 case M502: // Sprinter - Marlin - Repetier - RepRap Firmware 0379 return QObject::tr("M502: Revert to the default 'factory settings'."); 0380 case M503: // Sprinter - Marlin - RepRap Firmware 0381 return QObject::tr("M503: Print settings "); 0382 case M540: // Marlin 0383 return QObject::tr("M540: Enable/Disable 'Stop SD Print on Endstop Hit'"); 0384 case M550: // RepRap Firmware 0385 return QObject::tr("M550: Set Name"); 0386 case M551: // RepRap Firmware 0387 return QObject::tr("M551: Set Password"); 0388 case M552: // RepRap Firmware 0389 return QObject::tr("M552: Set IP address"); 0390 case M553: // RepRap Firmware 0391 return QObject::tr("M553: Set Netmask"); 0392 case M554: // RepRap Firmware 0393 return QObject::tr("M554: Set Gateway"); 0394 case M555: // RepRap Firmware 0395 return QObject::tr("M555: Set compatibility"); 0396 case M556: // RepRap Firmware 0397 return QObject::tr("M556: Axis compensation"); 0398 case M557: // Smoothie - RepRap Firmware 0399 return QObject::tr("M557: Set Z probe point"); 0400 case M558: // RepRap Firmware 0401 return QObject::tr("M558: Set Z probe type"); 0402 case M559: // RepRap Firmware 0403 return QObject::tr("M559: Upload configuration file"); 0404 case M560: // RepRap Firmware 0405 return QObject::tr("M560: Upload web page file"); 0406 case M561: // Smoothie - RepRap Firmware 0407 return QObject::tr("M561: Set Identity Transform"); 0408 case M562: // RepRap Firmware 0409 return QObject::tr("M562: Reset temperature fault"); 0410 case M563: // RepRap Firmware 0411 return QObject::tr("M563: Define or remove a tool"); 0412 case M564: // RepRap Firmware 0413 return QObject::tr("M564: Limit axes"); 0414 case M565: // Smoothie 0415 return QObject::tr("M565: Set Z probe offset"); 0416 case M566: // RepRap Firmware 0417 return QObject::tr("M566: Set allowable instantaneous speed change"); 0418 case M567: // RepRap Firmware 0419 return QObject::tr("M567: Set tool mix ratio"); 0420 case M568: // RepRap Firmware 0421 return QObject::tr("M568: Turn off/on tool mix ratio"); 0422 case M569: // RepRap Firmware 0423 return QObject::tr("M569: Set axis direction and enable values"); 0424 case M570: // RepRap Firmware 0425 return QObject::tr("M570: Set heater timeout"); 0426 case M571: // RepRap Firmware 0427 return QObject::tr("M571: Set output on extrude"); 0428 case M573: // RepRap Firmware 0429 return QObject::tr("M573: Report heater PWM"); 0430 case M574: // RepRap Firmware 0431 return QObject::tr("M574: Set endstop configuration"); 0432 case M575: // RepRap Firmware 0433 return QObject::tr("M575: Set serial comms parameters"); 0434 case M577: // RepRap Firmware 0435 return QObject::tr("M577: Wait until endstop is triggered"); 0436 case M578: // RepRap Firmware 0437 return QObject::tr("M578: Fire inkjet bits"); 0438 case M579: // RepRap Firmware 0439 return QObject::tr("M579: Scale Cartesian axes"); 0440 case M580: // RepRap Firmware 0441 return QObject::tr("M580: Select Roland"); 0442 case M600: // Marlin 0443 return QObject::tr("M600: Filament change pause"); 0444 case M605: // Marlin 0445 return QObject::tr("M605: Set dual x-carriage movement mode"); 0446 case M665: // Marlin - Smoothie - RepRap Firmware 0447 return QObject::tr("M665: Set delta configuration"); 0448 case M666: // Marlin - Repetier - Smoothie - RepRap Firmware 0449 return QObject::tr("M666: Set delta endstop adjustment"); 0450 case M667: // RepRap Firmware 0451 return QObject::tr("M667: Select CoreXY mode"); 0452 case M851: // Marlin 0453 return QObject::tr("M851: Set Z-Probe Offset"); 0454 case M906: // RepRap Firmware 0455 return QObject::tr("M906: Set motor currents"); 0456 case M907: // Marlin - Repetier - Smoothie 0457 return QObject::tr("M907: Set digital trimpot motor"); 0458 case M908: // Marlin - Repetier > 0.92 0459 return QObject::tr("M908: Control digital trimpot directly"); 0460 case M911: // RepRap Firmware 0461 return QObject::tr("M911: Set power monitor threshold voltages"); 0462 case M912: // RepRap Firmware 0463 return QObject::tr("M912: Set electronics temperature monitor adjustment"); 0464 case M913: // RepRap Firmware 0465 return QObject::tr("M913: Set motor percentage of normal current"); 0466 case M928: // Marlin 0467 return QObject::tr("M928: Start SD logging"); 0468 case M997: // RepRap Firmware 0469 return QObject::tr("M997: Perform in-application firmware update"); 0470 case M998: // RepRap Firmware 0471 return QObject::tr("M998: Request resend of line"); 0472 case M999: // Marlin - Smoothie - RepRap Firmware 0473 return QObject::tr("M999: Restart after being stopped by error"); 0474 default: 0475 return commandNotSupported; 0476 } 0477 } 0478 0479 QString GCode::toCommand(MCommands gcode, const QString &value1, const QString &value2) 0480 { 0481 QString code = QStringLiteral("M%1").arg(QString::number(gcode)); 0482 switch (gcode) { 0483 case M20: 0484 case M24: 0485 case M25: 0486 case M27: 0487 case M105: 0488 case M107: 0489 case M112: 0490 case M114: 0491 case M115: 0492 case M116: 0493 case M119: 0494 return code; 0495 0496 case M21: 0497 case M22: 0498 code = value1.isEmpty() ? code : code.append(QStringLiteral(" P%1").arg(value1)); 0499 return code; 0500 0501 case M23: 0502 case M28: 0503 case M29: 0504 case M30: 0505 case M117: 0506 code = value1.isEmpty() ? GCode::commandRequiresArgument.arg(QStringLiteral("M"), QString::number(gcode)) : code.append(QStringLiteral(" %1").arg(value1)); 0507 return code; 0508 0509 case M109: 0510 case M140: 0511 case M155: 0512 case M190: 0513 case M220: 0514 case M221: 0515 code = value1.isEmpty() ? GCode::commandRequiresArgument.arg(QStringLiteral("M"), QString::number(gcode)) : code.append(QStringLiteral(" S%1").arg(value1)); 0516 return code; 0517 0518 case M84: 0519 code = value1.isEmpty() ? code : code.append(QStringLiteral(" S%1").arg(value1)); 0520 return code; 0521 0522 case M104: 0523 code = value2.isEmpty() ? code.append(QStringLiteral(" S%1").arg(value1)) : code.append(QStringLiteral(" P%1 S%2").arg(value1, value2)); 0524 code = value1.isEmpty() ? GCode::commandRequiresArgument.arg(QStringLiteral("M"), QString::number(gcode)) : code; 0525 return code; 0526 0527 case M106: 0528 code = value2.isEmpty() ? code.append(QStringLiteral(" S%1").arg(value1)) : code.append(QStringLiteral(" P%1 S%2").arg(value1, value2)); 0529 code = value1.isEmpty() ? QStringLiteral("M106") : code; 0530 return code; 0531 0532 /// For M26 values that end with %. AtCore will send the percentage verison of the command (optional in firmwares) 0533 /// For all values not ending in % it will start on that byte. This is the standard Sd resume supported by all reprap based firmware. 0534 case M26: { 0535 if (!value1.isEmpty()) { 0536 if (value1.endsWith(QStringLiteral("%"))) { 0537 QString temp = value1; 0538 temp.replace(QStringLiteral("%"), QLatin1String("")); 0539 return code.append(QStringLiteral(" P%1").arg(temp.toDouble() / 100)); 0540 } 0541 return code.append(QStringLiteral(" S%1").arg(value1)); 0542 } 0543 return GCode::commandRequiresArgument.arg(QStringLiteral("M"), QString::number(gcode)); 0544 } 0545 0546 default: 0547 return commandNotSupported; 0548 } 0549 }