# -*- shell-script -*-

## NEEDS: LIBRARY, SKETCH, ROOT, SOURCEDIR
## Should be included when the current directory is the dir of the Sketch.

SKETCH="${SKETCH:-${DEFAULT_SKETCH}}"
LIBRARY="${LIBRARY:-${SKETCH}}"

########
######## Keyboard hardware definitions
########

BOARD="${BOARD:-model01}"
MCU="${MCU:-atmega32u4}"
if [ "${BOARD}" = "virtual" ]; then
    FQBN="${FQBN:-keyboardio:x86:${BOARD}}"
else
    FQBN="${FQBN:-keyboardio:avr:${BOARD}}"
fi

########
######## Host OS specific commands
########

## Platform-specific overrides
# Shamelessly stolen from git's Makefile
uname_S=$(uname -s 2>/dev/null || echo not)

find_max_prog_size() {
    VPIDS=$(${ARDUINO_BUILDER} \
    -hardware "${ARDUINO_PATH}/hardware" \
    -hardware "${BOARD_HARDWARE_PATH}" \
    ${ARDUINO_TOOLS_PARAM} \
    -tools "${ARDUINO_PATH}/tools-builder" \
    -fqbn "${FQBN}" \
    -dump-prefs | grep "upload\.maximum_size=")
    MAX_PROG_SIZE=${MAX_PROG_SIZE:-$(echo "${VPIDS}" | grep upload.maximum_size | head -n 1 | cut -d= -f2)}
}

find_device_vid_pid() {
    VPIDS=$(${ARDUINO_BUILDER} \
		-hardware "${ARDUINO_PATH}/hardware" \
		-hardware "${BOARD_HARDWARE_PATH}" \
		${ARDUINO_TOOLS_PARAM} \
		-tools "${ARDUINO_PATH}/tools-builder" \
		-fqbn "${FQBN}" \
		-dump-prefs | grep "\.[vp]id=")
    VID=${VID:-$(echo "${VPIDS}" | grep build.vid= | cut -dx -f2)}
    SKETCH_PID=${SKETCH_PID:-$(echo "${VPIDS}" | grep build.pid= | cut -dx -f2)}
    BOOTLOADER_PID=${BOOTLOADER_PID:-$(echo "${VPIDS}" | grep bootloader.pid= | cut -dx -f2)}
    BOOTLOADER_VID=${BOOTLOADER_VID:-$(echo "${VPIDS}" | grep bootloader.vid= | cut -dx -f2)}
}

find_device_port() {
    find_device_vid_pid
    DIR=$(dirname "$(readlink -f "$0")")
    DEVICE_PORT_PROBER="${DIR}/find-device-port-linux-udev"
    DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})"
}

reset_device_cmd() {
    if [ -z ${NO_RESET} ]; then
        stty -F ${DEVICE_PORT} 1200 hupcl
    fi
}

find_bootloader_ports() {
    find_device_vid_pid
    DIR=$(dirname "$(readlink -f "$0")")
    BOOTLOADER_VID="${BOOTLOADER_VID:-${VID}}"
    DEVICE_PORT_PROBER="${DIR}/find-device-port-linux-udev"
    DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})"
}

MD5="md5sum"

if [ "${uname_S}" = "Darwin" ]; then

    find_device_port() {
	DIR=$(dirname "$0")
	DEVICE_PORT_PROBER="${DIR}/find-device-port-macos"
	DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER})"
    }

    reset_device_cmd() {
	/bin/stty -f ${DEVICE_PORT} 1200
    }

    ARDUINO_PATH="${ARDUINO_PATH:-/Applications/Arduino.app/Contents/Java/}"
    ARDUINO_PACKAGE_PATH="${ARDUINO_PACKAGE_PATH:-${HOME}/Library/Arduino15/packages}"
    ARDUINO_LOCAL_LIB_PATH="${ARDUINO_LOCAL_LIB_PATH:-${HOME}/Documents/Arduino}"

    MD5="md5"

    find_bootloader_ports() {
	DIR=$(dirname "$0")
	DEVICE_PORT_PROBER="${DIR}/find-device-port-macos"
	DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER})"
    }

fi

######
###### Arduino tools configuration
######

ARDUINO_PATH="${ARDUINO_PATH:-/usr/local/arduino}"
ARDUINO_LOCAL_LIB_PATH="${ARDUINO_LOCAL_LIB_PATH:-${HOME}/Arduino}"
ARDUINO_TOOLS_PATH="${ARDUINO_TOOLS_PATH:-${ARDUINO_PATH}/hardware/tools}"
ARDUINO_PACKAGE_PATH="${ARDUINO_PACKAGE_PATH:-${HOME}/.arduino15/packages}"

ARDUINO_BUILDER="${ARDUINO_BUILDER:-${ARDUINO_PATH}/arduino-builder}"
ARDUINO_IDE_VERSION="10607"

######
###### Executable paths
######

AVR_SIZE="${AVR_SIZE:-${ARDUINO_TOOLS_PATH}/avr/bin/avr-size}"
AVR_NM="${AVR_NM:-${ARDUINO_TOOLS_PATH}/avr/bin/avr-nm}"
AVR_OBJDUMP="${AVR_OBJDUMP:-${ARDUINO_TOOLS_PATH}/avr/bin/avr-objdump}"
AVRDUDE="${AVRDUDE:-${ARDUINO_TOOLS_PATH}/avr/bin/avrdude}"
AVRDUDE_CONF="${AVRDUDE_CONF:-${ARDUINO_TOOLS_PATH}/avr/etc/avrdude.conf}"

######
###### Source files and dependencies
######

BOARD_HARDWARE_PATH="${BOARD_HARDWARE_PATH:-${ARDUINO_LOCAL_LIB_PATH}/hardware}"
BOOTLOADER_PATH="${BOOTLOADER_PATH:-${BOARD_HARDWARE_PATH}/keyboardio/avr/bootloaders/caterina/Caterina.hex}"

if [ ! -z "${ARDUINO_TOOLS_PATH}" ]; then
    ARDUINO_TOOLS_PARAM="-tools ${ARDUINO_TOOLS_PATH}"
fi

if [ ! -z "${AVR_GCC_PREFIX}" ]; then
    ARDUINO_AVR_GCC_PREFIX_PARAM="-prefs \"runtime.tools.avr-gcc.path=${AVR_GCC_PREFIX}\""
fi