#!/usr/bin/env bash
#
# Build tests for Teensy 3.5/3.6 (ARM Cortex-M4)
#

# exit on first failure
set -e

restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
exec_test $1 $2 "Teensy3.5 with default config" "$3"

#
# Test as many features together as possible
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
opt_set EXTRUDERS 2
opt_set TEMP_SENSOR_0 1
opt_set TEMP_SENSOR_1 5
opt_set TEMP_SENSOR_BED 1
opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LCD_INFO_MENU SDSUPPORT SDCARD_SORT_ALPHA \
           FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY CALIBRATION_GCODE BAUD_RATE_GCODE SOUND_MENU_ITEM \
           FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
           BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
           PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT M100_FREE_MEMORY_WATCHER \
           ADVANCED_PAUSE_FEATURE ARC_SUPPORT BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES PARK_HEAD_ON_PAUSE \
           PHOTO_GCODE PHOTO_POSITION PHOTO_SWITCH_POSITION PHOTO_SWITCH_MS PHOTO_DELAY_MS PHOTO_RETRACT_MM \
           HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT
opt_set I2C_SLAVE_ADDRESS 63
opt_set GRID_MAX_POINTS_X 16
exec_test $1 $2 "Teensy3.5 with many features" "$3"

#
# Test a Sled Z Probe with Linear leveling
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
opt_enable EEPROM_SETTINGS Z_PROBE_SLED Z_SAFE_HOMING AUTO_BED_LEVELING_LINEAR DEBUG_LEVELING_FEATURE GCODE_MACROS
exec_test $1 $2 "Sled Z Probe with Linear leveling" "$3"

#
# Test a Servo Probe
#
# restore_configs
# opt_set MOTHERBOARD BOARD_TEENSY35_36
# opt_enable Z_PROBE_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE \
#            AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS
# opt_set NUM_SERVOS 1
# exec_test $1 $2 "Servo Probe"
#
# ...with AUTO_BED_LEVELING_3POINT, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, EEPROM_CHITCHAT, EXTENDED_CAPABILITIES_REPORT, and AUTO_REPORT_TEMPERATURES
#
# opt_enable AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS \
#            EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES
# exec_test $1 $2 "...with AUTO_BED_LEVELING_3POINT, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, EEPROM_CHITCHAT, EXTENDED_CAPABILITIES_REPORT, and AUTO_REPORT_TEMPERATURES"

#
# Test MAGNETIC_PARKING_EXTRUDER with LCD
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
opt_set EXTRUDERS 2
opt_set TEMP_SENSOR_1 1
opt_enable MAGNETIC_PARKING_EXTRUDER ULTIMAKERCONTROLLER
exec_test $1 $2 "MAGNETIC_PARKING_EXTRUDER with LCD" "$3"

#
# Mixing Extruder
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
opt_enable MIXING_EXTRUDER DIRECT_MIXING_IN_G1 GRADIENT_MIX GRADIENT_VTOOL REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
opt_set MIXING_STEPPERS 2
exec_test $1 $2 "Mixing Extruder" "$3"

#
# Test SWITCHING_EXTRUDER
#
# restore_configs
# opt_set MOTHERBOARD BOARD_TEENSY35_36
# opt_set EXTRUDERS 2
# opt_set NUM_SERVOS 1
# opt_enable SWITCHING_EXTRUDER ULTIMAKERCONTROLLER
# exec_test $1 $2 "SWITCHING_EXTRUDER"

#
# Enable COREXY
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
opt_enable COREXY
opt_set X_DRIVER_TYPE TMC5160
opt_set Y_DRIVER_TYPE TMC5160
opt_set X_MIN_ENDSTOP_INVERTING true
opt_set Y_MIN_ENDSTOP_INVERTING true
opt_add X_CS_PIN 46
opt_add Y_CS_PIN 47
opt_enable USE_ZMIN_PLUG MONITOR_DRIVER_STATUS SENSORLESS_HOMING
exec_test $1 $2 "Teensy 3.5/3.6 COREXY" "$3"

#
# Enable COREXZ
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
opt_enable COREXZ
exec_test $1 $2 "Teensy 3.5/3.6 COREXZ" "$3"

#
# Enable Dual Z with Dual Z endstops
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY35_36
opt_set NUM_Z_STEPPER_DRIVERS 2
opt_enable Z_MULTI_ENDSTOPS USE_XMAX_PLUG
pins_set ramps/RAMPS X_MAX_PIN -1
opt_add Z2_MAX_PIN 2
exec_test $1 $2 "Dual Z with Dual Z endstops" "$3"

# Clean up
restore_configs