Compare commits

..

13 Commits

Author SHA1 Message Date
InsanityAutomation 9365fcc69a Catchup to 1.1.9 Head 2018-11-07 11:03:49 -05:00
InsanityAutomation 40b579afc4 Move options to top and enable ubl 2018-07-14 11:47:14 -04:00
InsanityAutomation 00145dda6f Configuration updates 2018-07-13 22:48:00 -04:00
InsanityAutomation 14c57719f4 Bump to current upstream branch 2018-07-11 08:12:54 -04:00
InsanityAutomation d1931a0bd3 Update Bilinear probe positions 2018-04-27 13:58:00 -04:00
InsanityAutomation a5d61601f7 Reduce UBL target bed temp for DC bed 2018-04-27 10:41:57 -04:00
InsanityAutomation 5c010d93d0 Invert filament sensor 2018-04-27 10:11:28 -04:00
InsanityAutomation 2d3634a6eb Set fil width
Even though we dont have any features that use it, nice to be correct anyway!
2018-04-27 09:48:11 -04:00
InsanityAutomation ef22cdf881 Fix condition 2018-04-27 09:46:47 -04:00
InsanityAutomation 160cddb349 Reverse encoder direction 2018-04-26 23:45:25 -04:00
InsanityAutomation 125758ccc4 Fix encode steps 2018-04-26 23:44:28 -04:00
InsanityAutomation 3ba69f47dc Set author and version 2018-04-26 23:30:23 -04:00
InsanityAutomation 517510a519 Initial Config 2018-04-26 23:28:54 -04:00
8 changed files with 251 additions and 1824 deletions
+3 -3
View File
@@ -118,7 +118,7 @@ script:
# Add a Sled Z Probe, use UBL Cartesian moves, use Japanese language
#
- opt_set LANGUAGE kana_utf8
- opt_enable Z_PROBE_SLED SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE BEZIER_JERK_CONTROL
- opt_enable Z_PROBE_SLED SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE
- opt_disable SEGMENT_LEVELED_MOVES
- opt_enable_adv BABYSTEP_ZPROBE_OFFSET DOUBLECLICK_FOR_Z_BABYSTEPPING
- build_marlin
@@ -143,7 +143,7 @@ script:
# PROBE_MANUALLY feature, with LCD support,
# ULTIMAKERCONTROLLER, FILAMENT_LCD_DISPLAY, FILAMENT_WIDTH_SENSOR,
# PRINTCOUNTER, NOZZLE_PARK_FEATURE, NOZZLE_CLEAN_FEATURE, PCA9632,
# Z_DUAL_ENDSTOPS, BEZIER_CURVE_SUPPORT, EXPERIMENTAL_I2CBUS,
# Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS, BEZIER_CURVE_SUPPORT, EXPERIMENTAL_I2CBUS,
# ADVANCED_PAUSE_FEATURE, ADVANCED_PAUSE_CONTINUOUS_PURGE, PARK_HEAD_ON_PAUSE, LCD_INFO_MENU, M114_DETAIL
# EEPROM_SETTINGS, EEPROM_CHITCHAT, M100_FREE_MEMORY_WATCHER,
# INCH_MODE_SUPPORT, TEMPERATURE_UNITS_SUPPORT
@@ -153,7 +153,7 @@ script:
- opt_enable PROBE_MANUALLY AUTO_BED_LEVELING_BILINEAR G26_MESH_EDITING LCD_BED_LEVELING ULTIMAKERCONTROLLER
- opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT M100_FREE_MEMORY_WATCHER M100_FREE_MEMORY_DUMPER M100_FREE_MEMORY_CORRUPTOR INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT
- opt_enable ULTIMAKERCONTROLLER SDSUPPORT
- opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PCA9632
- opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PCA9632 USE_XMAX_PLUG
- opt_enable_adv BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS
- opt_enable_adv ADVANCED_PAUSE_FEATURE ADVANCED_PAUSE_CONTINUOUS_PURGE FILAMENT_LOAD_UNLOAD_GCODES PARK_HEAD_ON_PAUSE LCD_INFO_MENU M114_DETAIL
- opt_set_adv PWM_MOTOR_CURRENT {1300,1300,1250}
+92 -244
View File
@@ -1,54 +1,5 @@
// CUSTOMIZE FOR YOUR MACHINE BELOW
// CUSTOMIZE FOR YOUR MACHINE BELOW
// CUSTOMIZE FOR YOUR MACHINE BELOW
// CUSTOMIZE FOR YOUR MACHINE BELOW
// CUSTOMIZE FOR YOUR MACHINE BELOW
/**
* Enable if you replace the stepper drivers with TMC 2208. Be sure to remove MS3 jumper
* underneath the stepper driver! Plug and Play will result in Stealth Chop 2 Mode enabled
* Stealthchop with 2208 on E will disabe inear Advance! Please enable stealthchop if
* you require Linear Advance with a TMC2208 on the extruder!
* If you have used a UART connection to program the driver to SpreadCycle mode, pease seect that as well
*/
//#define X_2208
//#define X_SpreadCycle
//#define Y_2208
//#define Y_SpreadCycle // Highly recommended as large prints with high mass can cause layer shifts with stealthchop at high speed
//#define Y_4988 // Some machines shipped with 4988 drivers across the board. Set this if you arent sure what you have and all the drivers look identical
//#define Z_2208 // NOT Recommended! Dual stepper current draw is above the recommended limit for this driver
//#define Z_SpreadCycle
#define Z_4988 // Some machines shipped with 4988 drivers across the board. Set this if you arent sure what you have and all the drivers look identical
//#define E_2208 // Not Recommended! Stealthchop mode faults with linear advance
//#define E_SpreadCycle
/**
* Enable if you install a KEENOVO AC BED with Solid State Relay
*/
//#define BED_AC
//#define HotendAllMetal
/**
* Enable if you install a filament runout sensor from www.formbotusa.com
*/
//#define RunoutSensor
//#define ledgeFilSensor //Modify filament sensor contact type for TM3D V2 sensors
/**
* Enable if you wish to change the auto level strategy to Unified Bed Leveling. Under CUSTOM COMMANDS, run Step 1 and 2 before setting Z Offset
*/
//#define UBL
//ONLY MAKE CHANGES ABOVE FOR RELIABLE FUNCTION
//ONLY MAKE CHANGES ABOVE FOR RELIABLE FUNCTION
//ONLY MAKE CHANGES ABOVE FOR RELIABLE FUNCTION
//ONLY MAKE CHANGES ABOVE FOR RELIABLE FUNCTION
//ONLY MAKE CHANGES ABOVE FOR RELIABLE FUNCTION
#define UBL
//#define FILAMENT_RUNOUT_SENSOR
/**
* Marlin 3D Printer Firmware
@@ -133,7 +84,7 @@
// User-specified version info of this build to display in [Pronterface, etc] terminal window during
// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
// build by the user have been successfully uploaded into firmware.
#define STRING_CONFIG_H_AUTHOR "Tinymachines3D" // Who made the changes.
#define STRING_CONFIG_H_AUTHOR "Tinymachines 3D" // Who made the changes.
#define SHOW_BOOTSCREEN
#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during bootup in line 1
#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during bootup in line 2
@@ -150,10 +101,10 @@
*/
// Enable to show the bitmap in Marlin/_Bootscreen.h on startup.
#define SHOW_CUSTOM_BOOTSCREEN
//#define SHOW_CUSTOM_BOOTSCREEN
// Enable to show the bitmap in Marlin/_Statusscreen.h on the status screen.
#define CUSTOM_STATUS_SCREEN_IMAGE
//#define CUSTOM_STATUS_SCREEN_IMAGE
// @section machine
@@ -183,13 +134,12 @@
// The following define selects which electronics board you have.
// Please choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_RUMBA
#define MOTHERBOARD BOARD_RAMPS_14_EFB
#endif
// Optional custom name for your RepStrap or other custom machine
// Displayed in the LCD "Ready" message
#define CUSTOM_MACHINE_NAME "TM3D RaPtOr"
#define CUSTOM_MACHINE_NAME "TM3D Mamorubot"
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
@@ -362,16 +312,12 @@
*
* :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#if(ENABLED(BED_AC))
#define TEMP_SENSOR_BED 11
#else
#define TEMP_SENSOR_BED 1
#endif
#define TEMP_SENSOR_CHAMBER 0
// Dummy thermistor constant temperature readings, for use with 998 and 999
@@ -406,16 +352,12 @@
// When temperature exceeds max temp, your heater will be switched off.
// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
// You should use MINTEMP for thermistor short/failure protection.
#define HEATER_0_MAXTEMP 290
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#if(ENABLED(BED_AC))
#define BED_MAXTEMP 150
#else
#define BED_MAXTEMP 100
#endif
#define BED_MAXTEMP 130
//===========================================================================
//============================= PID Settings ================================
@@ -440,24 +382,19 @@
// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
// Ultimaker
#if(ENABLED(HotendAllMetal))
#define DEFAULT_Kp 21.9
#define DEFAULT_Ki 1.5
#define DEFAULT_Kd 79.88
#else
#define DEFAULT_Kp 22.2
#define DEFAULT_Ki 1.08
#define DEFAULT_Kd 114
#endif
#define DEFAULT_Kp 17.52
#define DEFAULT_Ki 0.6
#define DEFAULT_Kd 127.62
// MakerGear
//#define DEFAULT_Kp 7.0
//#define DEFAULT_Ki 0.1
//#define DEFAULT_Kd 12
//#define DEFAULT_Kp 7.0
//#define DEFAULT_Ki 0.1
//#define DEFAULT_Kd 12
// Mendel Parts V9 on 12V
//#define DEFAULT_Kp 63.0
//#define DEFAULT_Ki 2.25
//#define DEFAULT_Kd 440
//#define DEFAULT_Kp 63.0
//#define DEFAULT_Ki 2.25
//#define DEFAULT_Kd 440
#endif // PIDTEMP
@@ -496,9 +433,9 @@
//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
#define DEFAULT_bedKp 100.0
#define DEFAULT_bedKi 15.0
#define DEFAULT_bedKd 200.0
#define DEFAULT_bedKp 398.58
#define DEFAULT_bedKi 73.71
#define DEFAULT_bedKd 538.78
//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from pidautotune
@@ -556,7 +493,7 @@
// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
// either in the usual order or reversed
//#define COREXY
#define COREXY
//#define COREXZ
//#define COREYZ
//#define COREYX
@@ -596,10 +533,10 @@
#define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the probe.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
/**
* Stepper Drivers
@@ -615,41 +552,17 @@
* TMC5130, TMC5130_STANDALONE
* :['A4988', 'DRV8825', 'LV8729', 'L6470', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE']
*/
#if ENABLED(X_2208)
#define X_DRIVER_TYPE TMC2208_STANDALONE
#define X2_DRIVER_TYPE TMC2208_STANDALONE
#else
#define X_DRIVER_TYPE A4988
#define X2_DRIVER_TYPE A4988
#endif
#if ENABLED(Y_2208)
#define Y_DRIVER_TYPE TMC2208_STANDALONE
#elif ENABLED(Y_4988)
#define Y_DRIVER_TYPE A4988
#else
#define Y_DRIVER_TYPE DRV8825
#endif
#if ENABLED(Z_2208)
#define Z_DRIVER_TYPE TMC2208_STANDALONE
#elif ENABLED(Z_4988)
#define Z_DRIVER_TYPE A4988
#else
#define Z_DRIVER_TYPE DRV8825
#endif
#define X_DRIVER_TYPE A4988
#define Y_DRIVER_TYPE A4988
#define Z_DRIVER_TYPE A4988
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
#if ENABLED(E_2208)
#define E0_DRIVER_TYPE TMC2208_STANDALONE
#define E1_DRIVER_TYPE TMC2208_STANDALONE
#else
#define E0_DRIVER_TYPE DRV8825
#define E1_DRIVER_TYPE DRV8825
#endif
#define E0_DRIVER_TYPE A4988
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
// Enable this feature if all enabled endstop pins are interrupt-capable.
// This will remove the need to poll the interrupt pins, saving many CPU cycles.
@@ -697,26 +610,14 @@
* Override with M92
* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]]
*/
#if(ENABLED(Y_2208) || ENABLED(Y_4988))
#define Y_STEPSMM 80
#else
#define Y_STEPSMM 160
#endif
#if(ENABLED(Z_2208) || ENABLED(Z_4988))
#define Z_STEPSMM 800
#else
#define Z_STEPSMM 1600
#endif
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80,Y_STEPSMM , Z_STEPSMM, 96 }
#define DEFAULT_AXIS_STEPS_PER_UNIT {160, 160, 800, 215.4 }
/**
* Default Max Feed Rate (mm/s)
* Override with M203
* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]]
*/
#define DEFAULT_MAX_FEEDRATE { 250, 150, 5, 25 }
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
/**
* Default Max Acceleration (change/s) change = mm/s
@@ -724,26 +625,7 @@
* Override with M201
* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]]
*/
#if(ENABLED(X_2208))
#if(ENABLED(X_SpreadCycle))
#define x_accel 1750
#else
#define x_accel 1000
#endif
#else
#define x_accel 1500
#endif
#if(ENABLED(Y_2208))
#if(ENABLED(Y_SpreadCycle))
#define y_accel 500
#else
#define y_accel 300
#endif
#else
#define y_accel 500
#endif
#define DEFAULT_MAX_ACCELERATION { x_accel, y_accel, 400, 4000 }
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 2000 }
/**
* Default Acceleration (change/s) change = mm/s
@@ -753,9 +635,9 @@
* M204 R Retract Acceleration
* M204 T Travel Acceleration
*/
#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
#define DEFAULT_ACCELERATION 2000 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 2000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 2000 // X, Y, Z acceleration for travel (non printing) moves
/**
* Default Jerk (mm/s)
@@ -765,18 +647,9 @@
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
#if(ENABLED(X_SpreadCycle) || !ENABLED(X_2208))
#define DEFAULT_XJERK 20.0
#else
#define DEFAULT_XJERK 10.0
#endif
#if(ENABLED(Y_SpreadCycle) || !ENABLED(Y_2208))
#define DEFAULT_YJERK 10.0
#else
#define DEFAULT_YJERK 5.0
#endif
#define DEFAULT_ZJERK 0.4
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
#define DEFAULT_EJERK 5.0
/**
@@ -876,7 +749,7 @@
//#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors
// A probe that is deployed and stowed with a solenoid pin (SOL1_PIN)
//#define SOLENOID_PROBE
#define SOLENOID_PROBE PIN_11
// A sled-mounted probe like those designed by Charles Bell.
//#define Z_PROBE_SLED
@@ -905,13 +778,15 @@
* O-- FRONT --+
* (0,0)
*/
#define X_PROBE_OFFSET_FROM_EXTRUDER -22 // X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.5 // Z offset: -below +above [the nozzle]
#define X_PROBE_OFFSET_FROM_EXTRUDER 37 // X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]
// Certain types of probes need to stay away from edges
#define MIN_PROBE_EDGE 10
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
#define XY_PROBE_SPEED 3000
// Feedrate (mm/m) for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
@@ -938,7 +813,7 @@
* Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle.
* But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle.
*/
#define Z_CLEARANCE_DEPLOY_PROBE 5 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points
#define Z_CLEARANCE_MULTI_PROBE 5 // Z Clearance between multiple probes
//#define Z_AFTER_PROBING 5 // Z position after probing is done
@@ -975,32 +850,15 @@
// @section machine
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#if(ENABLED(X_2208))
#define INVERT_X_DIR true
#else
#define INVERT_X_DIR false
#endif
#if(ENABLED(Y_2208))
#define INVERT_Y_DIR true
#else
#define INVERT_Y_DIR false
#endif
#if(ENABLED(Z_2208))
#define INVERT_Z_DIR false
#else
#define INVERT_Z_DIR true
#endif
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false
// @section extruder
// For direct drive extruder v9 set to true, for geared extruder set to false.
#if(ENABLED(E_2208))
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#else
#define INVERT_E0_DIR true
#define INVERT_E1_DIR true
#endif
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
@@ -1011,7 +869,7 @@
//#define UNKNOWN_Z_NO_RAISE // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off.
#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
// Be sure you have this distance over your Z_MAX_POS in case.
// Direction of endstops when homing; 1=MAX, -1=MIN
@@ -1071,17 +929,10 @@
* For other boards you may need to define FIL_RUNOUT_PIN, FIL_RUNOUT2_PIN, etc.
* By default the firmware assumes HIGH=FILAMENT PRESENT.
*/
#if(ENABLED(RunoutSensor))
#define FILAMENT_RUNOUT_SENSOR
#endif
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
#define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
#define FIL_RUNOUT_PIN 57
#if ENABLED(ledgeFilSensor)
#define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
#else
#define FIL_RUNOUT_INVERTING true // set to true to invert the logic of the sensor.
#endif
#define FIL_RUNOUT_INVERTING true // set to true to invert the logic of the sensor.
#define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins.
#define FILAMENT_RUNOUT_SCRIPT "M600"
#endif
@@ -1126,12 +977,11 @@
*/
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
#if(ENABLED(UBL))
#define AUTO_BED_LEVELING_UBL
#if(!ENABLED(UBL))
#define AUTO_BED_LEVELING_BILINEAR
#else
#define AUTO_BED_LEVELING_BILINEAR
#define AUTO_BED_LEVELING_UBL
#endif
//#define MESH_BED_LEVELING
/**
@@ -1156,7 +1006,7 @@
// For Cartesian machines, instead of dividing moves on mesh boundaries,
// split up moves into short segments like a Delta. This follows the
// contours of the bed more closely than edge-to-edge straight moves.
#define SEGMENT_LEVELED_MOVES
//#define SEGMENT_LEVELED_MOVES
#define LEVELED_SEGMENT_LENGTH 5.0 // (mm) Length of all segments (except the last one)
/**
@@ -1175,17 +1025,14 @@
#if ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR)
// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 6
#define GRID_MAX_POINTS_X 9
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
// Set the boundaries for probing (where the probe can reach).
#define LEFT_PROBE_BED_POSITION 30
#define RIGHT_PROBE_BED_POSITION 365
#define FRONT_PROBE_BED_POSITION 30
#define BACK_PROBE_BED_POSITION 365
// The Z probe minimum outer margin (to validate G29 parameters).
#define MIN_PROBE_EDGE 10
#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE + X_PROBE_OFFSET_FROM_EXTRUDER + 5
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - X_PROBE_OFFSET_FROM_EXTRUDER - 5)
#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE + Y_PROBE_OFFSET_FROM_EXTRUDER + 5
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - Y_PROBE_OFFSET_FROM_EXTRUDER - 5)
// Probe along the Y axis, advancing X after each column
//#define PROBE_Y_FIRST
@@ -1214,16 +1061,16 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
//#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh
// #define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh
#define MESH_INSET 35 // Set Mesh bounds as an inset region of the bed
#define MESH_INSET 5 // Set Mesh bounds as an inset region of the bed
#define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited.
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
#define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle
#define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500
#define UBL_Z_RAISE_WHEN_OFF_MESH 0.0 // When the nozzle is off the mesh, this value is used
#define UBL_Z_RAISE_WHEN_OFF_MESH 0 // When the nozzle is off the mesh, this value is used
// as the Z-Height correction value.
#elif ENABLED(MESH_BED_LEVELING)
@@ -1245,12 +1092,12 @@
* Override if the automatically selected points are inadequate.
*/
#if ENABLED(AUTO_BED_LEVELING_3POINT) || ENABLED(AUTO_BED_LEVELING_UBL)
#define PROBE_PT_1_X 50
#define PROBE_PT_1_Y 350
#define PROBE_PT_2_X 50
#define PROBE_PT_2_Y 50
#define PROBE_PT_3_X 350
#define PROBE_PT_3_Y 50
#define PROBE_PT_1_X 40
#define PROBE_PT_1_Y 360
#define PROBE_PT_2_X 40
#define PROBE_PT_2_Y 40
#define PROBE_PT_3_X 360
#define PROBE_PT_3_Y 40
#endif
/**
@@ -1268,7 +1115,7 @@
//#define LEVEL_BED_CORNERS
#if ENABLED(LEVEL_BED_CORNERS)
#define LEVEL_CORNERS_INSET 20 // (mm) An inset for corner leveling
#define LEVEL_CORNERS_INSET 30 // (mm) An inset for corner leveling
//#define LEVEL_CENTER_TOO // Move to the center after the last corner
#endif
@@ -1276,7 +1123,7 @@
* Commands to execute at the end of G29 probing.
* Useful to retract or move the Z probe out of the way.
*/
//#define Z_PROBE_END_SCRIPT "M280 P0 S90"
#define Z_PROBE_END_SCRIPT "M280 P0 S90"
// @section homing
@@ -1298,16 +1145,17 @@
// - If stepper drivers time out, it will need X and Y homing again before Z homing.
// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
// - Prevent Z homing when the Z probe is outside bed area.
//
#define Z_SAFE_HOMING
#if ENABLED(Z_SAFE_HOMING)
#define Z_SAFE_HOMING_X_POINT 50 // X point for Z homing when homing all axis (G28).
#define Z_SAFE_HOMING_Y_POINT 50 // Y point for Z homing when homing all axis (G28).
#define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing all axes (G28).
#define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G28).
#endif
// Homing speeds (mm/m)
#define HOMING_FEEDRATE_XY (50*60)
#define HOMING_FEEDRATE_Z (4*60)
#define HOMING_FEEDRATE_XY (80*60)
#define HOMING_FEEDRATE_Z (20*60)
// @section calibrate
@@ -1412,12 +1260,12 @@
// @section temperature
// Preheat Constants
#define PREHEAT_1_TEMP_HOTEND 200
#define PREHEAT_1_TEMP_BED 60
#define PREHEAT_1_TEMP_HOTEND 180
#define PREHEAT_1_TEMP_BED 70
#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
#define PREHEAT_2_TEMP_HOTEND 220
#define PREHEAT_2_TEMP_BED 100
#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED 110
#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
/**
@@ -1435,8 +1283,8 @@
#if ENABLED(NOZZLE_PARK_FEATURE)
// Specify a park position as { X, Y, Z }
#define NOZZLE_PARK_POINT { 10, 10, 20}
#define NOZZLE_PARK_XY_FEEDRATE 70 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
#define NOZZLE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define NOZZLE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#endif
@@ -1591,7 +1439,7 @@
* Enable one of the following items for a slower SPI transfer speed.
* This may be required to resolve "volume init" errors.
*/
//#define SPI_SPEED SPI_HALF_SPEED
#define SPI_SPEED SPI_HALF_SPEED
//#define SPI_SPEED SPI_QUARTER_SPEED
//#define SPI_SPEED SPI_EIGHTH_SPEED
@@ -1640,7 +1488,7 @@
//
// Set this option if CLOCKWISE causes values to DECREASE
//
//#define REVERSE_ENCODER_DIRECTION
#define REVERSE_ENCODER_DIRECTION
//
// This option reverses the encoder direction for navigating LCD menus.
@@ -1686,7 +1534,7 @@
//
// Note: Usually sold with a white PCB.
//
//#define REPRAP_DISCOUNT_SMART_CONTROLLER
#define REPRAP_DISCOUNT_SMART_CONTROLLER
//
// ULTIMAKER Controller.
@@ -1813,7 +1661,7 @@
// RepRapDiscount FULL GRAPHIC Smart Controller
// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
//
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
//
// ReprapWorld Graphical LCD
+27 -28
View File
@@ -75,8 +75,8 @@
* THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
*/
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
#define THERMAL_PROTECTION_PERIOD 180 // Seconds
#define THERMAL_PROTECTION_HYSTERESIS 2 // Degrees Celsius
#define THERMAL_PROTECTION_PERIOD 120 // Seconds
#define THERMAL_PROTECTION_HYSTERESIS 5 // Degrees Celsius
/**
* Whenever an M104, M109, or M303 increases the target temperature, the
@@ -90,21 +90,21 @@
* and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set
* below 2.
*/
#define WATCH_TEMP_PERIOD 180 // Seconds
#define WATCH_TEMP_INCREASE 2 // Degrees Celsius
#define WATCH_TEMP_PERIOD 120 // Seconds
#define WATCH_TEMP_INCREASE 5 // Degrees Celsius
#endif
/**
* Thermal Protection parameters for the bed are just as above for hotends.
*/
#if ENABLED(THERMAL_PROTECTION_BED)
#define THERMAL_PROTECTION_BED_PERIOD 300 // Seconds
#define THERMAL_PROTECTION_BED_PERIOD 40 // Seconds
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
/**
* As described above, except for the bed (M140/M190/M303).
*/
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
#define WATCH_BED_TEMP_PERIOD 120 // Seconds
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
#endif
@@ -206,7 +206,7 @@
// When first starting the main fan, run it at full speed for the
// given number of milliseconds. This gets the fan spinning reliably
// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
#define FAN_KICKSTART_TIME 100
//#define FAN_KICKSTART_TIME 100
/**
* PWM Fan Scaling
@@ -260,13 +260,13 @@
/**
* M355 Case Light on-off / brightness
*/
#define CASE_LIGHT_ENABLE
//#define CASE_LIGHT_ENABLE
#if ENABLED(CASE_LIGHT_ENABLE)
#define CASE_LIGHT_PIN 5 // Override the default pin if needed
//#define CASE_LIGHT_PIN 4 // Override the default pin if needed
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)
#define MENU_ITEM_CASE_LIGHT // Add a Case Light option to the LCD main menu
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
//#define MENU_ITEM_CASE_LIGHT // Add a Case Light option to the LCD main menu
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
#define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
@@ -386,13 +386,13 @@
#define Y_HOME_BUMP_MM 5
#define Z_HOME_BUMP_MM 2
#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially
//#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially
// When G28 is called, this option will make Y home before X
//#define HOME_Y_BEFORE_X
// Enable this if X or Y can't home without homing the other axis first.
//#define CODEPENDENT_XY_HOMING
#define CODEPENDENT_XY_HOMING
// @section machine
@@ -486,7 +486,7 @@
* M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
*/
//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps
//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro)
@@ -539,7 +539,7 @@
#define LCD_SET_PROGRESS_MANUALLY
#if ENABLED(SDSUPPORT) || ENABLED(LCD_SET_PROGRESS_MANUALLY)
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
#define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar
#define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message
@@ -678,7 +678,7 @@
*/
#if ENABLED(DOGLCD)
// Show SD percentage next to the progress bar
#define DOGM_SD_PERCENT
//#define DOGM_SD_PERCENT
// Enable to save many cycles by drawing a hollow frame on the Info Screen
#define XYZ_HOLLOW_FRAME
@@ -748,12 +748,12 @@
#if ENABLED(BABYSTEPPING)
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
#define BABYSTEP_MULTIPLICATOR 25 // Babysteps are very small. Increase for faster motion.
#define BABYSTEP_MULTIPLICATOR 20 // Babysteps are very small. Increase for faster motion.
#define BABYSTEP_ZPROBE_OFFSET // Enable to combine M851 and Babystepping
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
// Note: Extra time may be added to mitigate controller latency.
#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
//#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
#endif
// @section extruder
@@ -774,9 +774,7 @@
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
*/
#if(ENABLED(E_2208) && !ENABLED(E_SpreadCycle))
#define LIN_ADVANCE
#endif
#if ENABLED(LIN_ADVANCE)
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
@@ -806,7 +804,7 @@
#endif
// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
#define BEZIER_CURVE_SUPPORT
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
// Set MULTIPLE_PROBING if you want G38 to double touch
@@ -968,7 +966,7 @@
* 'M106 P<fan> T2' : Use the set secondary speed
* 'M106 P<fan> T1' : Restore the previous fan speed
*/
//#define EXTRA_FAN_SPEED
#define EXTRA_FAN_SPEED
/**
* Advanced Pause
@@ -1012,11 +1010,11 @@
#define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
#define FILAMENT_CHANGE_ALERT_BEEPS 2 // Number of alert beeps to play when a response is needed.
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
//#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
//#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
//#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
@@ -1486,22 +1484,23 @@
/**
* User-defined menu items that execute custom GCode
*/
#if(ENABLED(UBL))
#if(ENABLED(UBL))
#define CUSTOM_USER_MENUS
#endif
#if ENABLED(CUSTOM_USER_MENUS)
//#define USER_SCRIPT_DONE "M117 User Script Done"
//#define USER_SCRIPT_DONE "M117 User Script Done"
#define USER_SCRIPT_AUDIBLE_FEEDBACK
#define USER_SCRIPT_RETURN // Return to status screen after a script
#define USER_DESC_1 "UBL Commission Step 1"
#define USER_GCODE_1 "M502 \n M500 \n M501 \n M190 S75 \n G28 \n G29 P1 \n G29 S1 \n M117 Run Step 2 \n"
#define USER_GCODE_1 "M502 \n M500 \n M501 \n M190 S60 \n M104 S225 \n G28 \n G29 P1 \n G29 S1 \n M117 Run Step 2 \n"
#define USER_DESC_2 "UBL Commission Step 2"
#define USER_GCODE_2 "G29 S1 \n G29 S0 \n G29 F 10.0 \n G29 A \n M500 \n G28 \n G29 L1 \n M109 S225 \n G1 X150 Y 150 \n G1 Z0 \n M117 Set Z Offset \n"
#define USER_DESC_3 "Prep for Z Adjust"
#define USER_GCODE_3 "M190 75 \n M104 235 \n G28 \n G29 L1 \n G1 X150 Y 150 \n G1 Z0 \n"
#define USER_GCODE_3 "M190 60 \n M104 235 \n G28 \n G29 L1 \n G1 X150 Y 150 \n G1 Z0 \n"
#define USER_DESC_4 "Fill Mesh Points"
#define USER_GCODE_4 "G29 P3 \n G29 P3 \n G29 P3 \n G29 T \n"
+4 -4
View File
@@ -35,7 +35,7 @@
/**
* Marlin release version identifier
*/
#define SHORT_BUILD_VERSION "1.1.9-R4"
#define SHORT_BUILD_VERSION "TM3D-1.1.9_M3"
/**
* Verbose version identifier which should contain a reference to the location
@@ -48,7 +48,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
#define STRING_DISTRIBUTION_DATE "2019-01-10"
#define STRING_DISTRIBUTION_DATE "2018-11-07"
/**
* Required minimum Configuration.h and Configuration_adv.h file versions.
@@ -70,7 +70,7 @@
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
*/
#define MACHINE_NAME "TM3D Raptor"
#define MACHINE_NAME "3D Printer"
/**
* The SOURCE_CODE_URL is the location where users will find the Marlin Source
@@ -78,7 +78,7 @@
* has a distinct Github fork— the Source Code URL should just be the main
* Marlin repository.
*/
#define SOURCE_CODE_URL "https://github.com/MarlinFirmware/Marlin"
#define SOURCE_CODE_URL "tinymachines3d.com"
/**
* Default generic printer UUID.
+94 -239
View File
@@ -28,39 +28,27 @@
#error "Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu."
#endif
#if E_STEPPERS > 3 || HOTENDS > 3
#error "RUMBA supports up to 3 hotends / E-steppers. Comment this line to keep going."
#if HOTENDS > 3 || E_STEPPERS > 3
#error "RUMBA supports up to 3 hotends / E-steppers. Comment out this line to continue."
#endif
#define DEFAULT_MACHINE_NAME "Rumba"
#define BOARD_NAME "Rumba"
//#endif
#define LARGE_FLASH true
//
// Servos
//
#ifdef IS_RAMPS_13
#define SERVO0_PIN 7 // RAMPS_13 // Will conflict with BTN_EN2 on LCD_I2C_VIKI
#else
#define SERVO0_PIN 11
#endif
#define SERVO1_PIN 6
#define SERVO2_PIN 5
#define SERVO3_PIN -1
#define SERVO0_PIN 5
//
// Limit Switches
//
#define X_MIN_PIN 3
#ifndef X_MAX_PIN
#define X_MAX_PIN 2
#endif
#define Y_MIN_PIN 14
#define Y_MAX_PIN 15
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19
#define X_MIN_PIN 37
#define X_MAX_PIN 36
#define Y_MIN_PIN 35
#define Y_MAX_PIN 34
#define Z_MIN_PIN 33
#define Z_MAX_PIN 32
//
// Z Probe (when not Z_MIN_PIN)
@@ -69,255 +57,122 @@
#define Z_MIN_PROBE_PIN 32
#endif
#define SLED_PIN -1
//
// Steppers
//
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_CS_PIN 53
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_CS_PIN 49
#define X_STEP_PIN 17
#define X_DIR_PIN 16
#define X_ENABLE_PIN 48
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Y_STEP_PIN 54
#define Y_DIR_PIN 47
#define Y_ENABLE_PIN 55
#define Z_STEP_PIN 57
#define Z_DIR_PIN 56
#define Z_ENABLE_PIN 62
#define Z_CS_PIN 40
#define E0_STEP_PIN 26
#define E0_DIR_PIN 28
#define E0_STEP_PIN 23
#define E0_DIR_PIN 22
#define E0_ENABLE_PIN 24
#define E0_CS_PIN 42
#define E1_STEP_PIN 36
#define E1_DIR_PIN 34
#define E1_ENABLE_PIN 30
#define E1_CS_PIN 44
#define E1_STEP_PIN 26
#define E1_DIR_PIN 25
#define E1_ENABLE_PIN 27
#define E2_STEP_PIN 42
#define E2_DIR_PIN 43
#define E2_ENABLE_PIN 44
#define E2_STEP_PIN 29
#define E2_DIR_PIN 28
#define E2_ENABLE_PIN 39
//
// Temperature Sensors
//
#define TEMP_0_PIN 13 // Analog Input
#define TEMP_1_PIN 15 // Analog Input
#define TEMP_BED_PIN 14 // Analog Input
// SPI for Max6675 or Max31855 Thermocouple
#if DISABLED(SDSUPPORT)
#define MAX6675_SS 66 // Do not use pin 53 if there is even the remote possibility of using Display/SD card
#if TEMP_SENSOR_0 == -1
#define TEMP_0_PIN 6 // Analog Input (connector *K1* on RUMBA thermocouple ADD ON is used)
#else
#define MAX6675_SS 66 // Do not use pin 49 as this is tied to the switch inside the SD card socket to detect if there is an SD card present
#define TEMP_0_PIN 15 // Analog Input (default connector for thermistor *T0* on rumba board is used)
#endif
//
// Augmentation for auto-assigning RAMPS plugs
//
#if DISABLED(IS_RAMPS_EEB) && DISABLED(IS_RAMPS_EEF) && DISABLED(IS_RAMPS_EFB) && DISABLED(IS_RAMPS_EFF) && DISABLED(IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
#if HOTENDS > 1
#if TEMP_SENSOR_BED
#define IS_RAMPS_EEB
#else
#define IS_RAMPS_EEF
#endif
#elif TEMP_SENSOR_BED
#define IS_RAMPS_EFB
#else
#define IS_RAMPS_EFF
#endif
#if TEMP_SENSOR_1 == -1
#define TEMP_1_PIN 5 // Analog Input (connector *K2* on RUMBA thermocouple ADD ON is used)
#else
#define TEMP_1_PIN 14 // Analog Input (default connector for thermistor *T1* on rumba board is used)
#endif
#if TEMP_SENSOR_2 == -1
#define TEMP_2_PIN 7 // Analog Input (connector *K3* on RUMBA thermocouple ADD ON is used <-- this can't be used when TEMP_SENSOR_BED is defined as thermocouple)
#else
#define TEMP_2_PIN 13 // Analog Input (default connector for thermistor *T2* on rumba board is used)
#endif
// optional for extruder 4 or chamber:
//#define TEMP_X_PIN 12 // Analog Input (default connector for thermistor *T3* on rumba board is used)
//#define TEMP_CHAMBER_PIN 12 // Analog Input (default connector for thermistor *T3* on rumba board is used)
#if TEMP_SENSOR_BED == -1
#define TEMP_BED_PIN 7 // Analog Input (connector *K3* on RUMBA thermocouple ADD ON is used <-- this can't be used when TEMP_SENSOR_2 is defined as thermocouple)
#else
#define TEMP_BED_PIN 11 // Analog Input (default connector for thermistor *THB* on rumba board is used)
#endif
//
// Heaters / Fans
//
#define HEATER_0_PIN 10
#define HEATER_1_PIN 58
//#define HEATER_2_PIN 6
//#define HEATER_3_PIN 8
#define HEATER_BED_PIN 8
#define HEATER_0_PIN 2
#define HEATER_1_PIN 3
#define HEATER_2_PIN 6
#define HEATER_3_PIN 8
#define HEATER_BED_PIN 9
#define LED4_PIN 5
#define LASER_PIN -1
#define FAN_PIN 9
#define FAN1_PIN -1
#ifndef FAN_PIN
#define FAN_PIN 7
#endif
#define FAN1_PIN 8
//
// Misc. Functions
//
#define SDSS 53
#define LED_PIN 13
#define PS_ON_PIN 45
#define KILL_PIN 46
#define CASE_LIGHT_PIN 45
// Use the RAMPS 1.4 Analog input 5 on the AUX2 connector
#define FILWIDTH_PIN 5 // Analog Input
// define digital pin 4 for the filament runout sensor. Use the RAMPS 1.4 digital input 4 on the servos connector
//#define FIL_RUNOUT_PIN 4
#define PS_ON_PIN 12
//
// M3/M4/M5 - Spindle/Laser Control
//
#ifndef SPINDLE_LASER_PWM_PIN
#define SPINDLE_LASER_PWM_PIN 4 // MUST BE HARDWARE PWM. Pin 4 interrupts OC0* and OC1* always in use?
#endif
#ifndef SPINDLE_LASER_ENABLE_PIN
#define SPINDLE_LASER_ENABLE_PIN 14 // Pin should have a pullup!
#endif
#ifndef SPINDLE_DIR_PIN
#define SPINDLE_DIR_PIN 15
#endif
//
// LCD / Controller
//
#if ENABLED(ULTRA_LCD)
#if ENABLED(REPRAPWORLD_GRAPHICAL_LCD)
#define LCD_PINS_RS 49 // CS chip select /SS chip slave select
#define LCD_PINS_ENABLE 51 // SID (MOSI)
#define LCD_PINS_D4 52 // SCK (CLK) clock
#elif ENABLED(NEWPANEL) && ENABLED(PANEL_ONE)
#define LCD_PINS_RS 40
#define LCD_PINS_ENABLE 42
#define LCD_PINS_D4 65
#define LCD_PINS_D5 66
#define LCD_PINS_D6 44
#define LCD_PINS_D7 64
#else
#define LCD_PINS_RS 16
#define LCD_PINS_ENABLE 17
#define LCD_PINS_D4 23
#define LCD_PINS_D5 25
#define LCD_PINS_D6 27
#define LCD_PINS_D7 29
#if DISABLED(NEWPANEL)
#define BEEPER_PIN 33
// Buttons are attached to a shift register
// Not wired yet
//#define SHIFT_CLK 38
//#define SHIFT_LD 42
//#define SHIFT_OUT 40
//#define SHIFT_EN 17
#endif
#endif
#if ENABLED(NEWPANEL)
#if ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
#define BEEPER_PIN 37
#define BTN_EN1 31
#define BTN_EN2 33
#define BTN_ENC 35
#define SD_DETECT_PIN 49
#define KILL_PIN 41
#if ENABLED(BQ_LCD_SMART_CONTROLLER)
#define LCD_BACKLIGHT_PIN 39
#endif
#elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD)
#define BTN_EN1 64
#define BTN_EN2 59
#define BTN_ENC 63
#define SD_DETECT_PIN 42
#elif ENABLED(LCD_I2C_PANELOLU2)
#define BTN_EN1 47 // reverse if the encoder turns the wrong way.
#define BTN_EN2 43
#define BTN_ENC 32
#define LCD_SDSS 53
#define SD_DETECT_PIN -1
#define KILL_PIN 41
#elif ENABLED(LCD_I2C_VIKI)
#define BTN_EN1 22 // reverse if the encoder turns the wrong way.
#define BTN_EN2 7 // http://files.panucatt.com/datasheets/viki_wiring_diagram.pdf
// tells about 40/42.
// 22/7 are unused on RAMPS_14. 22 is unused and 7 the SERVO0_PIN on RAMPS_13.
#define BTN_ENC -1
#define LCD_SDSS 53
#define SD_DETECT_PIN 49
#elif ENABLED(VIKI2) || ENABLED(miniVIKI)
#define BEEPER_PIN 33
// Pins for DOGM SPI LCD Support
#define DOGLCD_A0 44
#define DOGLCD_CS 45
#define LCD_SCREEN_ROT_180
#define BTN_EN1 22
#define BTN_EN2 7
#define BTN_ENC 39
#define SDSS 53
#define SD_DETECT_PIN -1 // Pin 49 for display sd interface, 72 for easy adapter board
#define KILL_PIN 31
#define STAT_LED_RED_PIN 32
#define STAT_LED_BLUE_PIN 35
#elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
#define BTN_EN1 35 // reverse if the encoder turns the wrong way.
#define BTN_EN2 37
#define BTN_ENC 31
#define SD_DETECT_PIN 49
#define LCD_SDSS 53
#define KILL_PIN 41
#define BEEPER_PIN 23
#define DOGLCD_CS 29
#define DOGLCD_A0 27
#define LCD_BACKLIGHT_PIN 33
#elif ENABLED(MINIPANEL)
#define BEEPER_PIN 42
// Pins for DOGM SPI LCD Support
#define DOGLCD_A0 44
#define DOGLCD_CS 66
#define LCD_BACKLIGHT_PIN 65 // backlight LED on A11/D65
#define SDSS 53
#define KILL_PIN 64
// GLCD features
//#define LCD_CONTRAST 190
// Uncomment screen orientation
//#define LCD_SCREEN_ROT_90
//#define LCD_SCREEN_ROT_180
//#define LCD_SCREEN_ROT_270
// The encoder and click button
#define BTN_EN1 40
#define BTN_EN2 63
#define BTN_ENC 59
// not connected to a pin
#define SD_DETECT_PIN 49
#else
// Beeper on AUX-4
#define BEEPER_PIN 33
// buttons are directly attached using AUX-2
#if ENABLED(REPRAPWORLD_KEYPAD)
#define BTN_EN1 64 // encoder
#define BTN_EN2 59 // encoder
#define BTN_ENC 63 // enter button
#define SHIFT_OUT 40 // shift register
#define SHIFT_CLK 44 // shift register
#define SHIFT_LD 42 // shift register
#elif ENABLED(PANEL_ONE)
#define BTN_EN1 59 // AUX2 PIN 3
#define BTN_EN2 63 // AUX2 PIN 4
#define BTN_ENC 49 // AUX3 PIN 7
#else
#define BTN_EN1 37
#define BTN_EN2 35
#define BTN_ENC 31 // the click
#endif
#if ENABLED(G3D_PANEL)
#define SD_DETECT_PIN 49
#define KILL_PIN 41
#else
//#define SD_DETECT_PIN -1 // Ramps doesn't use this
#endif
#endif
#endif // NEWPANEL
#endif // ULTRA_LCD
#define SD_DETECT_PIN 49
#define BEEPER_PIN 44
#define LCD_PINS_D7 40
#define BTN_EN1 11
#define BTN_EN2 12
#define BTN_ENC 43
#if ENABLED(MKS_12864OLED) || ENABLED(MKS_12864OLED_SSD1306)
#define LCD_PINS_DC 38 // Set as output on init
#define LCD_PINS_RS 41 // Pull low for 1s to init
// DOGM SPI LCD Support
#define DOGLCD_CS 19
#define DOGLCD_MOSI 42
#define DOGLCD_SCK 18
#define DOGLCD_A0 LCD_PINS_DC
#else
#define LCD_PINS_RS 19
#define LCD_PINS_ENABLE 42
#define LCD_PINS_D4 18
#define LCD_PINS_D5 38
#define LCD_PINS_D6 41
#endif
-935
View File
@@ -1,935 +0,0 @@
#######################################
#
# Marlin 3D Printer Firmware
# Copyright (C) 2018 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
#
# Based on Sprinter and grbl.
# Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#######################################
#######################################
#
# Description: script to automate PlatformIO builds
# CLI: python auto_build.py build_option
# build_option (required)
# build executes -> platformio run -e target_env
# clean executes -> platformio run --target clean -e target_env
# upload executes -> platformio run --target upload -e target_env
# traceback executes -> platformio run --target upload -e target_env
# program executes -> platformio run --target program -e target_env
# test executes -> platformio test upload -e target_env
# remote executes -> platformio remote run --target upload -e target_env
# debug executes -> platformio debug -e target_env
#
# 'traceback' just uses the debug variant of the target environment if one exists
#
#######################################
#######################################
#
# General program flow
#
# 1. Scans Configuration.h for the motherboard name and Marlin version.
# 2. Scans pins.h for the motherboard.
# returns the CPU(s) and platformio environment(s) used by the motherboard
# 3. If further info is needed then a popup gets it from the user.
# 4. The OUTPUT_WINDOW class creates a window to display the output of the PlatformIO program.
# 5. A thread is created by the OUTPUT_WINDOW class in order to execute the RUN_PIO function.
# 6. The RUN_PIO function uses a subprocess to run the CLI version of PlatformIO.
# 7. The "iter(pio_subprocess.stdout.readline, '')" function is used to stream the output of
# PlatformIO back to the RUN_PIO function.
# 8. Each line returned from PlatformIO is formatted to match the color coding seen in the
# PlatformIO GUI.
# 9. If there is a color change within a line then the line is broken at each color change
# and sent separately.
# 10. Each formatted segment (could be a full line or a split line) is put into the queue
# IO_queue as it arrives from the platformio subprocess.
# 11. The OUTPUT_WINDOW class periodically samples IO_queue. If data is available then it
# is written to the window.
# 12. The window stays open until the user closes it.
# 13. The OUTPUT_WINDOW class continues to execute as long as the window is open. This allows
# copying, saving, scrolling of the window. A right click popup is available.
#
#######################################
import sys
import os
num_args = len(sys.argv)
if num_args > 1:
build_type = str(sys.argv[1])
else:
print 'Please specify build type'
exit()
print'build_type: ', build_type
print '\nWorking\n'
python_ver = sys.version_info[0] # major version - 2 or 3
if python_ver == 2:
print "python version " + str(sys.version_info[0]) + "." + str(sys.version_info[1]) + "." + str(sys.version_info[2])
else:
print "python version " + str(sys.version_info[0])
print "This script only runs under python 2"
exit()
#########
# Python 2 error messages:
# Can't find a usable init.tcl in the following directories ...
# error "invalid command name "tcl_findLibrary""
#
# Fix for the above errors on my Win10 system:
# search all init.tcl files for the line "package require -exact Tcl" that has the highest 8.5.x number
# copy it into the first directory listed in the error messages
# set the environmental variables TCLLIBPATH and TCL_LIBRARY to the directory where you found the init.tcl file
# reboot
#########
#globals
target_env = ''
board_name = ''
##########################################################################################
#
# popup to get input from user
#
##########################################################################################
def get_answer(board_name, cpu_label_txt, cpu_a_txt, cpu_b_txt):
if python_ver == 2:
import Tkinter as tk
else:
import tkinter as tk
def CPU_exit_3(): # forward declare functions
CPU_exit_3_()
def CPU_exit_4():
CPU_exit_4_()
def kill_session():
kill_session_()
root_get_answer = tk.Tk()
root_get_answer.chk_state_1 = 1 # declare variables used by TK and enable
chk_state_1 = 0 # set initial state of check boxes
global get_answer_val
get_answer_val = 2 # return get_answer_val, set default to match chk_state_1 default
l1 = tk.Label(text=board_name,
fg = "light green",
bg = "dark green",
font = "Helvetica 12 bold").grid(row=1)
l2 = tk.Label(text=cpu_label_txt,
fg = "light green",
bg = "dark green",
font = "Helvetica 16 bold italic").grid(row=2)
b4 = tk.Checkbutton(text=cpu_a_txt,
fg = "black",
font = "Times 20 bold ",
variable=chk_state_1, onvalue=1, offvalue=0,
command = CPU_exit_3).grid(row=3)
b5 = tk.Checkbutton(text=cpu_b_txt,
fg = "black",
font = "Times 20 bold ",
variable=chk_state_1, onvalue=0, offvalue=1,
command = CPU_exit_4).grid(row=4) # use same variable but inverted so they will track
b6 = tk.Button(text="CONFIRM",
fg = "blue",
font = "Times 20 bold ",
command = root_get_answer.destroy).grid(row=5, pady=4)
b7 = tk.Button(text="CANCEL",
fg = "red",
font = "Times 12 bold ",
command = kill_session).grid(row=6, pady=4)
def CPU_exit_3_():
global get_answer_val
get_answer_val = 1
def CPU_exit_4_():
global get_answer_val
get_answer_val = 2
def kill_session_():
raise SystemExit(0) # kill everything
root_get_answer.mainloop()
# end - get answer
def env_name_check(argument):
name_check = {
'teensy35' : True,
'teensy20' : True,
'STM32F4' : True,
'STM32F1' : True,
'sanguino_atmega644p' : True,
'sanguino_atmega1284p' : True,
'rambo' : True,
'melzi_optiboot' : True,
'melzi' : True,
'megaatmega2560' : True,
'megaatmega1280' : True,
'malyanm200' : True,
'LPC1768' : True,
'DUE_debug' : True,
'DUE_USB' : True,
'DUE' : True
}
return name_check.get(argument, False)
# gets the last build environment
def get_build_last():
env_last = ''
DIR_PWD = os.listdir('.')
if '.pioenvs' in DIR_PWD:
date_last = 0.0
DIR__pioenvs = os.listdir('.pioenvs')
for name in DIR__pioenvs:
if env_name_check(name):
DIR_temp = os.listdir('.pioenvs/' + name)
for names_temp in DIR_temp:
if 0 == names_temp.find('firmware.'):
date_temp = os.path.getmtime('.pioenvs/' + name + '/' + names_temp)
if date_temp > date_last:
date_last = date_temp
env_last = name
return env_last
# gets the board being built from the Configuration.h file
# returns: board name, major version of Marlin being used (1 or 2)
def get_board_name():
board_name = ''
# get board name
with open('Marlin/Configuration.h', 'r') as myfile:
Configuration_h = myfile.read()
Configuration_h = Configuration_h.split('\n')
Marlin_ver = 0 # set version to invalid number
for lines in Configuration_h:
if 0 == lines.find('#define CONFIGURATION_H_VERSION 01'):
Marlin_ver = 1
if 0 == lines.find('#define CONFIGURATION_H_VERSION 02'):
Marlin_ver = 2
board = lines.find(' BOARD_') + 1
motherboard = lines.find(' MOTHERBOARD ') + 1
define = lines.find('#define ')
comment = lines.find('//')
if (comment == -1 or comment > board) and \
board > motherboard and \
motherboard > define and \
define >= 0 :
spaces = lines.find(' ', board) # find the end of the board substring
if spaces == -1:
board_name = lines[board : ]
else:
board_name = lines[board : spaces]
break
return board_name, Marlin_ver
# extract first environment name it finds after the start position
# returns: environment name and position to start the next search from
def get_env_from_line(line, start_position):
env = ''
next_position = -1
env_position = line.find('env:', start_position)
if 0 < env_position:
next_position = line.find(' ', env_position + 4)
if 0 < next_position:
env = line[env_position + 4 : next_position]
else:
env = line[env_position + 4 : ] # at the end of the line
return env, next_position
#scans pins.h for board name and returns the environment(s) it finds
def get_starting_env(board_name_full, version):
# get environment starting point
if version == 1:
path = 'Marlin/pins.h'
if version == 2:
path = 'Marlin/src/pins/pins.h'
with open(path, 'r') as myfile:
pins_h = myfile.read()
board_name = board_name_full[ 6 : ] # only use the part after "BOARD_" since we're searching the pins.h file
pins_h = pins_h.split('\n')
environment = ''
board_line = ''
cpu_A = ''
cpu_B = ''
i = 0
list_start_found = False
for lines in pins_h:
i = i + 1 # i is always one ahead of the index into pins_h
if 0 < lines.find("Unknown MOTHERBOARD value set in Configuration.h"):
break # no more
if 0 < lines.find('1280'):
list_start_found = True
if list_start_found == False: # skip lines until find start of CPU list
continue
board = lines.find(board_name)
comment_start = lines.find('// ')
cpu_A_loc = comment_start
cpu_B_loc = 0
if board > 0: # need to look at the next line for environment info
cpu_line = pins_h[i]
comment_start = cpu_line.find('// ')
env_A, next_position = get_env_from_line(cpu_line, comment_start) # get name of environment & start of search for next
env_B, next_position = get_env_from_line(cpu_line, next_position) # get next environment, if it exists
env_C, next_position = get_env_from_line(cpu_line, next_position) # get next environment, if it exists
break
return env_A, env_B, env_C
# scans input string for CPUs that the users may need to select from
# returns: CPU name
def get_CPU_name(environment):
CPU_list = ('1280', '2560','644', '1284', 'LPC1768', 'DUE')
CPU_name = ''
for CPU in CPU_list:
if 0 < environment.find(CPU):
return CPU
# get environment to be used for the build
# returns: environment
def get_env(board_name, ver_Marlin):
def no_environment():
print 'ERROR - no environment for this board'
print board_name
raise SystemExit(0) # no environment so quit
def invalid_board():
print 'ERROR - invalid board'
print board_name
raise SystemExit(0) # quit if unable to find board
CPU_question = ( ('1280', '2560', "1280 or 2560 CPU?"), ('644', '1284', "644 or 1284 CPU?") )
if 0 < board_name.find('MELZI') :
get_answer(board_name, "Which flavor of Melzi?", "Melzi (Optiboot bootloader)", "Melzi ")
if 1 == get_answer_val:
target_env = 'melzi_optiboot'
else:
target_env = 'melzi'
else:
env_A, env_B, env_C = get_starting_env(board_name, ver_Marlin)
if env_A == '':
no_environment()
if env_B == '':
return env_A # only one environment so finished
CPU_A = get_CPU_name(env_A)
CPU_B = get_CPU_name(env_B)
for item in CPU_question:
if CPU_A == item[0]:
get_answer(board_name, item[2], item[0], item[1])
if 2 == get_answer_val:
target_env = env_B
else:
target_env = env_A
return target_env
if env_A == 'LPC1768':
if build_type == 'traceback' or (build_type == 'clean' and get_build_last() == 'LPC1768_debug_and_upload'):
target_env = 'LPC1768_debug_and_upload'
else:
target_env = 'LPC1768'
elif env_A == 'DUE':
target_env = 'DUE'
if build_type == 'traceback' or (build_type == 'clean' and get_build_last() == 'DUE_debug'):
target_env = 'DUE_debug'
elif env_B == 'DUE_USB':
get_answer(board_name, "DUE: need download port", "USB (native USB) port", "Programming port ")
if 1 == get_answer_val:
target_env = 'DUE_USB'
else:
target_env = 'DUE'
else:
invalid_board()
if build_type == 'traceback' and not(target_env == 'LPC1768_debug_and_upload' or target_env == 'DUE_debug') and Marlin_ver == 2:
print "ERROR - this board isn't setup for traceback"
print 'board_name: ', board_name
print 'target_env: ', target_env
raise SystemExit(0)
return target_env
# end - get_env
# puts screen text into queue so that the parent thread can fetch the data from this thread
import Queue
IO_queue = Queue.Queue()
def write_to_screen_queue(text, format_tag = 'normal'):
double_in = [text, format_tag]
IO_queue.put(double_in, block = False)
#
# send one line to the terminal screen with syntax highlighting
#
# input: unformatted text, flags from previous run
# returns: formatted text ready to go to the terminal, flags from this run
#
# This routine remembers the status from call to call because previous
# lines can affect how the current line is highlighted
#
# 'static' variables - init here and then keep updating them from within print_line
warning = False
warning_FROM = False
error = False
standard = True
prev_line_COM = False
next_line_warning = False
warning_continue = False
def line_print(line_input):
global warning
global warning_FROM
global error
global standard
global prev_line_COM
global next_line_warning
global warning_continue
# all '0' elements must precede all '1' elements or they'll be skipped
platformio_highlights = [
['Environment', 0, 'highlight_blue'],
['[SKIP]', 1, 'warning'],
['[ERROR]', 1, 'error'],
['[SUCCESS]', 1, 'highlight_green']
]
def write_to_screen_with_replace(text, highlights): # search for highlights & split line accordingly
did_something = False
for highlight in highlights:
found = text.find(highlight[0])
if did_something == True:
break
if found >= 0 :
did_something = True
if 0 == highlight[1]:
found_1 = text.find(' ')
found_tab = text.find('\t')
if found_1 < 0 or found_1 > found_tab:
found_1 = found_tab
write_to_screen_queue(text[ : found_1 + 1 ])
for highlight_2 in highlights:
if highlight[0] == highlight_2[0] :
continue
found = text.find(highlight_2[0])
if found >= 0 :
found_space = text.find(' ', found_1 + 1)
found_tab = text.find('\t', found_1 + 1)
if found_space < 0 or found_space > found_tab:
found_space = found_tab
found_right = text.find(']', found + 1)
write_to_screen_queue(text[found_1 + 1 : found_space + 1 ], highlight[2])
write_to_screen_queue(text[found_space + 1 : found + 1 ])
write_to_screen_queue(text[found + 1 : found_right], highlight_2[2])
write_to_screen_queue(text[found_right : ] + '\n')
break
break
if 1 == highlight[1]:
found_right = text.find(']', found + 1)
write_to_screen_queue(text[ : found + 1 ])
write_to_screen_queue(text[found + 1 : found_right ], highlight[2])
write_to_screen_queue(text[found_right : ] + '\n')
break
if did_something == False:
write_to_screen_queue(text + '\n')
# end - write_to_screen_with_replace
# scan the line
max_search = len(line_input)
if max_search > 3 :
max_search = 3
beginning = line_input[:max_search]
# set flags
if 0 < line_input.find(': warning: '): # start of warning block
warning = True
warning_FROM = False
error = False
standard = False
prev_line_COM = False
prev_line_COM = False
warning_continue = True
if beginning == 'War' or \
beginning == '#er' or \
beginning == 'In ' or \
(beginning != 'Com' and prev_line_COM == True and not(beginning == 'Arc' or beginning == 'Lin' or beginning == 'Ind') or \
next_line_warning == True):
warning = True #warning found
warning_FROM = False
error = False
standard = False
prev_line_COM = False
elif beginning == 'Com' or \
beginning == 'Ver' or \
beginning == ' [E' or \
beginning == 'Rem' or \
beginning == 'Bui' or \
beginning == 'Ind' or \
beginning == 'PLA':
warning = False #standard line found
warning_FROM = False
error = False
standard = True
prev_line_COM = False
warning_continue = False
elif beginning == '***':
warning = False # error found
warning_FROM = False
error = True
standard = False
prev_line_COM = False
elif beginning == 'fro' and warning == True : # start of warning /error block
warning_FROM = True
prev_line_COM = False
warning_continue = True
elif 0 < line_input.find(': error:') or \
0 < line_input.find(': fatal error:'): # start of warning /error block
warning = False # error found
warning_FROM = False
error = True
standard = False
prev_line_COM = False
warning_continue = True
elif warning_continue == True:
warning = True
warning_FROM = False # keep the warning status going until find a standard line
error = False
standard = False
prev_line_COM = False
warning_continue = True
else:
warning = False # unknown so assume standard line
warning_FROM = False
error = False
standard = True
prev_line_COM = False
warning_continue = False
if beginning == 'Com':
prev_line_COM = True
# print based on flags
if standard == True:
write_to_screen_with_replace(line_input, platformio_highlights) #print white on black with substitutions
if warning == True:
write_to_screen_queue(line_input + '\n', 'warning')
if error == True:
write_to_screen_queue(line_input + '\n', 'error')
# end - line_print
def run_PIO(dummy):
##########################################################################
# #
# run Platformio #
# #
##########################################################################
# build platformio run -e target_env
# clean platformio run --target clean -e target_env
# upload platformio run --target upload -e target_env
# traceback platformio run --target upload -e target_env
# program platformio run --target program -e target_env
# test platformio test upload -e target_env
# remote platformio remote run --target upload -e target_env
# debug platformio debug -e target_env
global build_type
global target_env
global board_name
print 'build_type: ', build_type
import subprocess
import sys
print 'starting platformio'
if build_type == 'build':
# platformio run -e target_env
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'run', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif build_type == 'clean':
# platformio run --target clean -e target_env
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'run', '--target', 'clean', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif build_type == 'upload':
# platformio run --target upload -e target_env
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'run', '--target', 'upload', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif build_type == 'traceback':
# platformio run --target upload -e target_env - select the debug environment if there is one
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'run', '--target', 'upload', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif build_type == 'program':
# platformio run --target program -e target_env
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'run', '--target', 'program', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif build_type == 'test':
#platformio test upload -e target_env
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'test', 'upload', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif build_type == 'remote':
# platformio remote run --target upload -e target_env
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'remote', 'run', '--target', 'program', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
elif build_type == 'debug':
# platformio debug -e target_env
# combine stdout & stderr so all compile messages are included
pio_subprocess = subprocess.Popen(['platformio', 'debug', '-e', target_env], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
print 'ERROR - unknown build type: ', build_type
raise SystemExit(0) # kill everything
# stream output from subprocess and split it into lines
for line in iter(pio_subprocess.stdout.readline, ''):
line_print(line.replace('\n', ''))
# append info used to run PlatformIO
write_to_screen_queue('\nBoard name: ' + board_name + '\n') # put build info at the bottom of the screen
write_to_screen_queue('Build type: ' + build_type + '\n')
write_to_screen_queue('Environment used: ' + target_env + '\n')
# end - run_PIO
########################################################################
import time
import threading
import Tkinter as tk
import ttk
import Queue
import subprocess
import sys
que = Queue.Queue()
#IO_queue = Queue.Queue()
from Tkinter import Tk, Frame, Text, Scrollbar, Menu
from tkMessageBox import askokcancel
import tkFileDialog
from tkMessageBox import askokcancel
import tkFileDialog
class output_window(Text):
global continue_updates
continue_updates = True
def __init__(self):
self.root = tk.Tk()
self.frame = tk.Frame(self.root)
self.frame.pack(fill='both', expand=True)
# text widget
#self.text = tk.Text(self.frame, borderwidth=3, relief="sunken")
Text.__init__(self, self.frame, borderwidth=3, relief="sunken")
self.config(tabs=(400,)) # configure Text widget tab stops
self.config(background = 'black', foreground = 'white', font= ("consolas", 12), wrap = 'word', undo = 'True')
self.config(height = 24, width = 120)
self.pack(side='left', fill='both', expand=True)
self.tag_config('normal', foreground = 'white')
self.tag_config('warning', foreground = 'yellow' )
self.tag_config('error', foreground = 'red')
self.tag_config('highlight_green', foreground = 'green')
self.tag_config('highlight_blue', foreground = 'cyan')
# self.bind('<Control-Key-a>', self.select_all) # the event happens but the action doesn't
# scrollbar
scrb = tk.Scrollbar(self.frame, orient='vertical', command=self.yview)
self.config(yscrollcommand=scrb.set)
scrb.pack(side='right', fill='y')
# pop-up menu
self.popup = tk.Menu(self, tearoff=0)
self.popup.add_command(label='Cut', command=self._cut)
self.popup.add_command(label='Copy', command=self._copy)
self.popup.add_command(label='Paste', command=self._paste)
self.popup.add_separator()
self.popup.add_command(label='Select All', command=self._select_all)
self.popup.add_command(label='Clear All', command=self._clear_all)
self.popup.add_separator()
self.popup.add_command(label='Save As', command=self._file_save_as)
self.bind('<Button-3>', self._show_popup)
# threading & subprocess section
def start_thread(self, ):
global continue_updates
# create then start a secondary thread to run an arbitrary function
# must have at least one argument
self.secondary_thread = threading.Thread(target = lambda q, arg1: q.put(run_PIO(arg1)), args=(que, ''))
self.secondary_thread.start()
continue_updates = True
# check the Queue in 50ms
self.root.after(50, self.check_thread)
self.root.after(50, self.update)
def check_thread(self): # wait for user to kill the window
global continue_updates
if continue_updates == True:
self.root.after(20, self.check_thread)
def update(self):
global continue_updates
if continue_updates == True:
self.root.after(20, self.update)#method is called every 50ms
temp_text = ['0','0']
if IO_queue.empty():
if not(self.secondary_thread.is_alive()):
continue_updates = False # queue is exhausted and thread is dead so no need for further updates
self.tag_add('sel', '1.0', 'end')
else:
try:
temp_text = IO_queue.get(block = False)
except Queue.Empty:
continue_updates = False # queue is exhausted so no need for further updates
else:
self.insert('end', temp_text[0], temp_text[1])
self.see("end") # make the last line visible (scroll text off the top)
# text editing section
def _file_save_as(self):
self.filename = tkFileDialog.asksaveasfilename(defaultextension = '.txt')
f = open(self.filename, 'w')
f.write(self.get('1.0', 'end'))
f.close()
def copy(self, event):
try:
selection = self.get(*self.tag_ranges('sel'))
self.clipboard_clear()
self.clipboard_append(selection)
except TypeError:
pass
def cut(self, event):
try:
selection = self.get(*self.tag_ranges('sel'))
self.clipboard_clear()
self.clipboard_append(selection)
self.delete(*self.tag_ranges('sel'))
except TypeError:
pass
def _show_popup(self, event):
'''right-click popup menu'''
if self.root.focus_get() != self:
self.root.focus_set()
try:
self.popup.tk_popup(event.x_root, event.y_root, 0)
finally:
self.popup.grab_release()
def _cut(self):
try:
selection = self.get(*self.tag_ranges('sel'))
self.clipboard_clear()
self.clipboard_append(selection)
self.delete(*self.tag_ranges('sel'))
except TypeError:
pass
def cut(self, event):
_cut(self)
def _copy(self):
try:
selection = self.get(*self.tag_ranges('sel'))
self.clipboard_clear()
self.clipboard_append(selection)
except TypeError:
pass
def copy(self, event):
_copy(self)
def _paste(self):
self.insert('insert', self.selection_get(selection='CLIPBOARD'))
def _select_all(self):
self.tag_add('sel', '1.0', 'end')
def select_all(self, event):
self.tag_add('sel', '1.0', 'end')
def _clear_all(self):
'''erases all text'''
isok = askokcancel('Clear All', 'Erase all text?', frame=self,
default='ok')
if isok:
self.delete('1.0', 'end')
def _place_cursor(self): # theme: terminal
'''check the position of the cursor against the last known position
every 15ms and update the cursorblock tag as needed'''
current_index = self.index('insert')
if self.cursor != current_index:
self.cursor = current_index
self.tag_delete('cursorblock')
start = self.index('insert')
end = self.index('insert+1c')
if start[0] != end[0]:
self.insert(start, ' ')
end = self.index('insert')
self.tag_add('cursorblock', start, end)
self.mark_set('insert', self.cursor)
self.after(15, self._place_cursor)
def _blink_cursor(self): # theme: terminal
'''alternate the background color of the cursorblock tagged text
every 600 milliseconds'''
if self.switch == self.fg:
self.switch = self.bg
else:
self.switch = self.fg
self.tag_config('cursorblock', background=self.switch)
self.after(600, self._blink_cursor)
# end - output_window
def main():
##########################################################################
# #
# main program #
# #
##########################################################################
global build_type
global target_env
global board_name
board_name, Marlin_ver = get_board_name()
target_env = get_env(board_name, Marlin_ver)
auto_build = output_window()
auto_build.start_thread() # executes the "run_PIO" function
auto_build.root.mainloop()
if __name__ == '__main__':
main()
+31 -14
View File
@@ -52,6 +52,15 @@ build_flags = ${common.build_flags}
board_f_cpu = 16000000L
lib_deps = ${common.lib_deps}
#
# Brainwave Pro (Teensy 2.0)
#
[env:brainwavepro]
platform = teensy
framework = arduino
board = teensy20pp
build_flags = ${common.build_flags} -D MOTHERBOARD=BOARD_BRAINWAVE_PRO
lib_deps = ${common.lib_deps}
#
# Melzi and clones (ATmega1284p)
@@ -76,6 +85,28 @@ build_flags = ${common.build_flags}
upload_speed = 115200
lib_deps = ${common.lib_deps}
#
# Printrboard (Teensy 2.0)
#
[env:printrboard]
platform = teensy
framework = arduino
board = teensy20pp
build_flags = ${common.build_flags} -D MOTHERBOARD=BOARD_PRINTRBOARD
# Bug in arduino framework does not allow boards running at 20Mhz
#board_f_cpu = 20000000L
lib_deps = ${common.lib_deps}
#
# Printrboard Rev.F (Teensy 2.0)
#
[env:printrboard_revf]
platform = teensy
framework = arduino
board = teensy20pp
build_flags = ${common.build_flags} -D MOTHERBOARD=BOARD_PRINTRBOARD_REVF
lib_deps = ${common.lib_deps}
#
# RAMBo
#
@@ -107,17 +138,3 @@ board = sanguino_atmega1284p
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps}
#
# Teensy++ 2.0
#
# - PrintrBoard
# - PrintrBoard Rev.F
# - Brainwave Pro
#
[env:teensy20]
platform = teensy
framework = arduino
board = teensy20pp
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps}
-357
View File
@@ -1,357 +0,0 @@
{
"patterns": {
"P1": {
"expression": "(path):(line)"
},
"P2": {
"expression": "(path)\\s+(line)",
"path": "(?:\\/[\\w\\.\\-]+)+"
}
},
"commands": [
{
"namespace": "process-palette",
"action": "PIO Build",
"command": "python buildroot/share/atom/auto_build.py build",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": true,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": "",
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Clean",
"command": "python buildroot/share/atom/auto_build.py clean",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Upload",
"command": "python buildroot/share/atom/auto_build.py upload",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Upload (traceback)",
"command": "python buildroot/share/atom/auto_build.py traceback",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Upload using Programmer",
"command": "python buildroot/share/atom/auto_build.py program",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Test",
"command": "python buildroot/share/atom/auto_build.py test",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Debug",
"command": "python buildroot/share/atom/auto_build.py debug",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Remote",
"command": "python buildroot/share/atom/auto_build.py remote",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
}
]
}