#!/bin/bash

if [ ! -f "/root/selftest-only-audio" ] && [ ! -f "/root/selftest-only-cv" ] && [ ! -f "/root/selftest-only-bottomboard" ]; then
    # wait for hmi to log in
    echo "Waiting for HMI to log in..."

    while (! who | grep -q hmi); do usleep 250000; done
    sleep 1

    # force a clean boot of HMI
    echo "Resetting HMI..."
    hmi-reset
    sleep 1
fi

echo "Setting up system..."
source /etc/mod-hardware-descriptor.env

# kill any previous instance
killall python3 2>/dev/null

# init control chain GPIOs
echo out > ${CC_DE_GPIO_PATH}/direction
echo out > ${CC_RE_GPIO_PATH}/direction
echo 1 > ${CC_DE_GPIO_PATH}/value
echo 0 > ${CC_RE_GPIO_PATH}/value

# if duox, set CV stuff to good known defaults
if [ "${SOUNDCARD}" = "DUOX" ]; then
    amixer -q -D "hw:${SOUNDCARD}" sset 'Headphone/CV Mode' off
    amixer -q -D "hw:${SOUNDCARD}" sset 'CV/Exp.Pedal Mode' off
    amixer -q -D "hw:${SOUNDCARD}" sset 'Exp.Pedal Mode' off
fi

# as used by mod-host
export LD_BIND_NOW=1
export LV2_PATH=${HOME}/.lv2:/usr/lib/lv2
export MOD_KEYS_PATH="/root/keys/"

# setup devices, used by peakmeter, ttymidi and spi2jack
export MOD_MIDI_SERIAL_PORT=${MIDI_SERIAL_PORT}
export MOD_PEAKMETER_BUS_NUMBER=${I2C_MAIN_BUS}
export MOD_PEAKMETER_GPIO_PATH=${PCA9685_OE_GPIO_PATH}
export MOD_SPI2JACK_DEVICE=${SPI2JACK_DEVICE}
export MOD_JACK2SPI_DEVICE=${JACK2SPI_DEVICE}
if [ -n "${SPI2JACK_PRESCALED}" ] && [ "${SPI2JACK_PRESCALED}" -eq 1 ]; then
    export MOD_SPI2JACK_PRESCALED=1
fi

# recreate dir used to store results
if [ -d /data/self-test ] && [ ! -d /data/self-test.old ]; then
    mv /data/self-test /data/self-test.old
fi
rm -rf /data/self-test
mkdir -p /data/self-test

echo "Starting self-test..."
exec /usr/bin/python3 -u /usr/share/mod/self-test/run.py "$@"
