#!/usr/bin/env bash
#
# Build tests for Teensy 4.0/4.1 (ARM Cortex-M7)
#

# exit on first failure
set -e

restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41
exec_test $1 $2 "Teensy4.1 with default config" "$3"

#
# Test as many features together as possible
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41
opt_set EXTRUDERS 2
opt_set TEMP_SENSOR_0 1
opt_set TEMP_SENSOR_1 5
opt_set TEMP_SENSOR_BED 1
opt_enable EXTENSIBLE_UI LCD_INFO_MENU SDSUPPORT SDCARD_SORT_ALPHA \
           FILAMENT_LCD_DISPLAY CALIBRATION_GCODE BAUD_RATE_GCODE \
           FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
           BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET \
           PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \
           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_add EXTUI_EXAMPLE
opt_set I2C_SLAVE_ADDRESS 63
opt_set GRID_MAX_POINTS_X 16
exec_test $1 $2 "Teensy4.1 with many features" "$3"

#
# Test a Sled Z Probe with Linear leveling
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41
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_TEENSY41
# 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" "$3"
#
# ...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" "$3"

#
# Test MAGNETIC_PARKING_EXTRUDER with no LCD
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41
opt_set EXTRUDERS 2
opt_set TEMP_SENSOR_1 1
opt_set SERIAL_PORT_2 -2
opt_enable EEPROM_SETTINGS MAGNETIC_PARKING_EXTRUDER
exec_test $1 $2 "Ethernet, EEPROM, Magnetic Parking Extruder, No LCD" "$3"

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

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

#
# Enable COREXY
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41
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 4.0/4.1 COREXY" "$3"

#
# Enable COREXZ
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41
opt_enable COREXZ
exec_test $1 $2 "Teensy 4.0/4.1 COREXZ" "$3"

#
# Enable Dual Z with Dual Z endstops
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY41
opt_enable Z_MULTI_ENDSTOPS USE_XMAX_PLUG
opt_set NUM_Z_STEPPER_DRIVERS 2
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