#!/usr/bin/env bash
#
# Build tests for AVR ATmega2560 RAMBo
#

# exit on first failure
set -e

#
# Lots of options - Formerly the first Mega2560 test
#
restore_configs
opt_set MOTHERBOARD BOARD_RAMBO \
        EXTRUDERS 2 TEMP_SENSOR_0 -2 TEMP_SENSOR_1 1 TEMP_SENSOR_BED 2 \
        TEMP_SENSOR_PROBE 1 TEMP_PROBE_PIN 12 \
        TEMP_SENSOR_CHAMBER 3 TEMP_CHAMBER_PIN 3 HEATER_CHAMBER_PIN 45 \
        GRID_MAX_POINTS_X 16 AUTO_POWER_E_TEMP 80 \
        FANMUX0_PIN 53
opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN USE_WATCHDOG
opt_enable USE_ZMAX_PLUG REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \
           FIX_MOUNTED_PROBE CODEPENDENT_XY_HOMING PIDTEMPBED PTC_PROBE PTC_BED \
           PREHEAT_BEFORE_PROBING PROBING_HEATERS_OFF PROBING_FANS_OFF PROBING_STEPPERS_OFF WAIT_FOR_BED_HEATER \
           EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \
           BLINKM PCA9533 PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \
           NEOPIXEL_LED NEOPIXEL_PIN CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CASE_LIGHT_MENU \
           PID_PARAMS_PER_HOTEND PID_AUTOTUNE_MENU PID_EDIT_MENU PID_EXTRUSION_SCALING LCD_SHOW_E_TOTAL \
           PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 LCD_BED_TRAMMING BED_TRAMMING_INCLUDE_CENTER \
           NOZZLE_PARK_FEATURE FILAMENT_RUNOUT_SENSOR FILAMENT_RUNOUT_DISTANCE_MM \
           ADVANCED_PAUSE_FEATURE FILAMENT_LOAD_UNLOAD_GCODES FILAMENT_UNLOAD_ALL_EXTRUDERS \
           PASSWORD_FEATURE PASSWORD_ON_STARTUP PASSWORD_ON_SD_PRINT_MENU PASSWORD_AFTER_SD_PRINT_END PASSWORD_AFTER_SD_PRINT_ABORT \
           AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DISTINCT_E_FACTORS \
           SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE \
           BACKLASH_COMPENSATION BACKLASH_GCODE BAUD_RATE_GCODE BEZIER_CURVE_SUPPORT \
           FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
           PSU_CONTROL PS_OFF_CONFIRM PS_OFF_SOUND POWER_OFF_WAIT_FOR_COOLDOWN \
           POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE POWER_LOSS_RECOVER_ZHOME POWER_LOSS_ZHOME_POS \
           SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER LIN_ADVANCE EXTRA_LIN_ADVANCE_K \
           HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL
opt_add DEBUG_POWER_LOSS_RECOVERY
exec_test $1 $2 "RAMBO | EXTRUDERS 2 | CHAR LCD + SD | FIX Probe | ABL-Linear | Advanced Pause | PLR | LEDs ..." "$3"

#
# Full size Rambo Dual Endstop CNC
#
restore_configs
opt_set MOTHERBOARD BOARD_RAMBO \
        EXTRUDERS 0 TEMP_SENSOR_0 999 DUMMY_THERMISTOR_999_VALUE 170 Z_HOME_DIR 1 \
        DIGIPOT_MOTOR_CURRENT '{ 120, 120, 120, 120, 120 }' \
        DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 4000 }' \
        DEFAULT_MAX_FEEDRATE '{ 300, 300, 5 }' \
        DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100 }' \
        MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60 }' \
        AXIS_RELATIVE_MODES '{ false, false, false }' \
        BED_TRAMMING_LEVELING_ORDER '{ LF, RF }' \
        X2_DRIVER_TYPE A4988 Y2_DRIVER_TYPE A4988
opt_enable USE_XMAX_PLUG USE_YMAX_PLUG USE_ZMAX_PLUG \
           REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER REVERSE_ENCODER_DIRECTION SDSUPPORT EEPROM_SETTINGS \
           S_CURVE_ACCELERATION X_DUAL_ENDSTOPS Y_DUAL_ENDSTOPS \
           ADAPTIVE_STEP_SMOOTHING CNC_COORDINATE_SYSTEMS GCODE_MOTION_MODES \
           LCD_BED_TRAMMING BED_TRAMMING_INCLUDE_CENTER
opt_disable MIN_SOFTWARE_ENDSTOP_Z MAX_SOFTWARE_ENDSTOPS
exec_test $1 $2 "Rambo CNC Configuration" "$3"

#
# Rambo heated bed and probe temp sensor
#
restore_configs
opt_set MOTHERBOARD BOARD_RAMBO EXTRUDERS 0 TEMP_SENSOR_BED 1 TEMP_SENSOR_PROBE 1 TEMP_PROBE_PIN 12 \
        DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 4000 }' \
        DEFAULT_MAX_FEEDRATE '{ 300, 300, 5 }' \
        DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100 }' \
        MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60 }' \
        AXIS_RELATIVE_MODES '{ false, false, false }'
opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER FIX_MOUNTED_PROBE Z_SAFE_HOMING
exec_test $1 $2 "Rambo heated bed only" "$3"

#
# Build with the default configurations
#
restore_configs
opt_set MOTHERBOARD BOARD_EINSY_RAMBO \
        X_DRIVER_TYPE TMC2130 Y_DRIVER_TYPE TMC2130 Z_DRIVER_TYPE TMC2130 E0_DRIVER_TYPE TMC2130
exec_test $1 $2 "Einsy RAMBo with TMC2130" "$3"

#
# Test MINIRAMBO with PWM_MOTOR_CURRENT and many features
#
restore_configs
opt_set MOTHERBOARD BOARD_MINIRAMBO \
        CONTROLLERFAN_SPEED_IDLE 128 \
        PWM_MOTOR_CURRENT '{ 1300, 1300, 1250 }' \
        I2C_SLAVE_ADDRESS 63
opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER \
          SDSUPPORT PCA9632 SOUND_MENU_ITEM GCODE_REPEAT_MARKERS \
          AUTO_BED_LEVELING_LINEAR PROBE_MANUALLY LCD_BED_LEVELING \
          LIN_ADVANCE EXTRA_LIN_ADVANCE_K \
          INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT EXPERIMENTAL_I2CBUS M100_FREE_MEMORY_WATCHER \
          NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE \
          ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE ADVANCED_PAUSE_CONTINUOUS_PURGE FILAMENT_LOAD_UNLOAD_GCODES \
          PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 M114_DETAIL
opt_add M100_FREE_MEMORY_DUMPER
opt_add M100_FREE_MEMORY_CORRUPTOR
exec_test $1 $2 "MINIRAMBO | RRDGFSC | ABL Linear Manual | M100 | PWM_MOTOR_CURRENT | M600..." "$3"

#
# Test many less common options
#
restore_configs
opt_set MOTHERBOARD BOARD_RAMBO \
        TEMP_SENSOR_0 -2 \
        DIGIPOT_I2C_NUM_CHANNELS 5 \
        LCD_LANGUAGE it \
        MIXING_STEPPERS 2 \
        SERVO_DELAY '{ 300, 300, 300 }' \
        CONTROLLER_FAN_PIN X_MAX_PIN FILWIDTH_PIN 5 \
        FAN_MIN_PWM 50 FAN_KICKSTART_TIME 100 \
        XY_FREQUENCY_LIMIT 15
opt_enable COREYX USE_XMAX_PLUG MIXING_EXTRUDER GRADIENT_MIX \
           BABYSTEPPING BABYSTEP_DISPLAY_TOTAL FILAMENT_LCD_DISPLAY \
           REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER MENU_ADDAUTOSTART SDSUPPORT SDCARD_SORT_ALPHA \
           ENDSTOP_NOISE_THRESHOLD FAN_SOFT_PWM \
           FIX_MOUNTED_PROBE PROBING_ESTEPPERS_OFF PROBE_OFFSET_WIZARD \
           AUTO_BED_LEVELING_BILINEAR X_AXIS_TWIST_COMPENSATION MESH_EDIT_MENU DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION \
           Z_SAFE_HOMING SHOW_TEMP_ADC_VALUES HOME_Y_BEFORE_X EMERGENCY_PARSER \
           SD_ABORT_ON_ENDSTOP_HIT HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT HOST_PAUSE_M76 ADVANCED_OK M114_DETAIL \
           VOLUMETRIC_DEFAULT_ON NO_WORKSPACE_OFFSETS EXTRA_FAN_SPEED FWRETRACT \
           USE_CONTROLLER_FAN CONTROLLER_FAN_EDITABLE CONTROLLER_FAN_USE_Z_ONLY
opt_disable DISABLE_INACTIVE_EXTRUDER
exec_test $1 $2 "Rambo | CoreXY, Gradient Mix | Endstop Int. | Home Y > X | FW Retract ..." "$3"

# clean up
restore_configs