#!/bin/bash
set -e

cleanup() {
    trap - EXIT INT TERM
    # kill all children:
    pkill -P $$ 2>/dev/null || true
}

trap cleanup EXIT INT TERM

remote_IP="192.168.188.37"
remote_port_CAT="8888"
remote_port_PTT="7779"
ptt_serial_device="/dev/ttyUSB0"

# Virtual local serial port for CAT for HRD (Linux):
virt_port_cat="$HOME/dev/virtualcom1"
# virt port for CAT as to be seen in wine program:
wine_port_cat="$HOME/.wine/dosdevices/com1"

# virtual port pair for flrig <--> HRD
virt_port_flrig_hrd_a="$HOME/dev/virtualcom2"
virt_port_flrig_hrd_b="$HOME/dev/virtualcom3"

# virtual port pair for n1mm <--> rigctlcom
virt_port_n1mm_rigctlcom_a="$HOME/dev/virtualcom4"
virt_port_n1mm_rigctlcom_b="$HOME/dev/virtualcom5"

HRD_PROG_EXE=$HOME/.wine/drive_c/Program\ Files\ \(x86\)/HRD\ Software\ LLC/Ham\ Radio\ Deluxe/HamRadioDeluxe.exe
CAT_RELAY_PROG="/home/andrej/A_Radioamaterstvo/Linux/cat-relay/listen.py"

# Dedicated wine prefix for N1MM:
LOGGER_WINE_PREFIX=".wine-logger"

# Create virtual port for remote CAT control, connect to remote TCP serial server:
socat pty,raw,echo=0,link=$virt_port_cat tcp:$remote_IP:$remote_port_CAT &
echo "Virtual port for remote CAT created: $virt_port_cat (wine: $wine_port_cat)"

# Create virtual port pair for flrig <--> HRD  communication (TS-2000):
socat pty,raw,echo=0,link=$virt_port_flrig_hrd_a pty,raw,echo=0,link=$virt_port_flrig_hrd_b &
echo "Virtual port pair for rigctld <--> HRD communication created: $virt_port_flrig_hrd_a <--> $virt_port_flrig_hrd_b"

# Create virtual port pair for N1MM <--> rigctlcom communication
socat pty,raw,echo=0,link=$virt_port_n1mm_rigctlcom_a pty,raw,echo=0,link=$virt_port_n1mm_rigctlcom_b &
echo "Virtual port pair for N1MM <--> rigctlcom communication created: $virt_port_n1mm_rigctlcom_a <--> $virt_port_n1mm_rigctlcom_b"


# Physical local foot PTT switch  to remote virtual PORT (CTS --> RTS):
./foot_switch_remote_PTT.sh "$ptt_serial_device" $remote_IP $remote_port_PTT &
echo "local foot PTT switch forwarding CTS to remote"


ln -sf "$virt_port_cat" "$wine_port_cat"
ln -sf "$virt_port_flrig_hrd_a" "$HOME/.wine/dosdevices/${virt_port_flrig_hrd_a#*virtual}"
ln -sf "$virt_port_flrig_hrd_b" "$HOME/.wine/dosdevices/${virt_port_flrig_hrd_b#*virtual}"

# Start sonobus

sonobus -g andrej_remote -n S57ATF_home -p radio -c $remote_IP:10999 &
echo "Sonobus started"

# Run HAM Radio Deluxe:
export WINEDEBUG=-all
"$HRD_PROG_EXE" &
# "$HRD_PROG_EXE" 2>&1 | logger -t HRD &

sleep 2

# COM ports symlink for wine. Set after short delay after starting HRD as wine may
# overwrite links at start due to "smart" probing or something
ln -sf "$virt_port_cat" "$wine_port_cat"
ln -sf "$virt_port_flrig_hrd_a" "$HOME/.wine/dosdevices/${virt_port_flrig_hrd_a#*virtual}"
ln -sf "$virt_port_flrig_hrd_b" "$HOME/.wine/dosdevices/${virt_port_flrig_hrd_b#*virtual}"

ln -sf "$virt_port_n1mm_rigctlcom_a" "$HOME/$LOGGER_WINE_PREFIX/dosdevices/${virt_port_n1mm_rigctlcom_a#*virtual}"
ln -sf "$virt_port_n1mm_rigctlcom_b" "$HOME/$LOGGER_WINE_PREFIX/dosdevices/${virt_port_n1mm_rigctlcom_b#*virtual}"

echo "HRD started"

echo "Press any key once HRD has fully started and powered on the radio ..."
read -n 1 -s
echo

# Start flrig connecting to virt com port pair for flrig <--> HRD sync:
# TODO
echo "flrig. Rig TS-2000 (HRD) via $virt_port_flrig_hrd_a"
flrig &

# Start rigctld connecting flrig
rigctld -m 4 -r localhost:12345 &
echo "rigctld started. Rig flrig"

# alternative: rigctld directly to FTDX10:
#rigctld -m 1042 -r "$virt_port_cat" -s 38400 &
#echo "rigctld started. Rig FTDX10 via $virt_port_cat" &

sleep 5

# Start rigctlcom model=4 (flrig) connecting to virt com port pair for N1MM <--> rigctlcom sync
rigctlcom -m 4 -R "$virt_port_n1mm_rigctlcom_b" -S 38400 -C stop_bits=1 &
echo "rigctlcom started. Rig 'flrig' sync to N1MM via $virt_port_n1mm_rigctlcom_b"

sleep 4

# Start cat-relay
cd $(dirname "$CAT_RELAY_PROG")
"$CAT_RELAY_PROG" &


wait
