#!/bin/bash # KiwiSDR Antenna Switch Backend for RAAS-4a USB (debug logging) TTY="/dev/ttyUSB0" # Or use /dev/serial/by-id/... for robustness BAUD=9600 # Your working baud rate EOL="\r" # Set to "" if no EOL, "\n" for newline, "\r" for carriage return SIM=1 MEM="/tmp/raas4a-mem" VERSION="1.0" N_CH="4" MIX="nomix" ADDR="$TTY" log_debug() { echo "$(date '+%F %T') $*" >> /tmp/raas4a-debug.log } configure_port() { log_debug "configure_port called" if [ $SIM == 1 ] ; then AntSW_GroundAll else stty -F "$TTY" "$BAUD" cs8 -cstopb -parenb -ixon -ixoff -echo fi } send_cmd() { log_debug "send_cmd: $1 (EOL=${EOL@Q})" if [ $SIM == 1 ] ; then if [ $1 != "A?" ] ; then echo -n "${1:1}" > ${MEM} fi else printf "%s%s" "$1" "$EOL" > "$TTY" fi } recv_resp() { log_debug "recv_resp called" sleep 0.1 if [ $SIM == 1 ] ; then resp="A"`cat ${MEM}` else IFS= read -r -n16 resp < "$TTY" fi log_debug "recv_resp got: $resp" echo "$resp" } AntSW_ShowBackend() { log_debug "AntSW_ShowBackend $*" echo "raas4a-usb v$VERSION ${N_CH}ch $MIX $ADDR" } AntSW_GetAddress() { log_debug "AntSW_GetAddress $*"; echo "$ADDR"; } AntSW_SetAddress() { log_debug "AntSW_SetAddress $*"; [[ -n "$1" ]] && ADDR="$1"; echo "$ADDR"; } AntSW_Initialize() { log_debug "AntSW_Initialize $*"; configure_port; } AntSW_GroundAll() { log_debug "AntSW_GroundAll $*"; send_cmd "A1"; } AntSW_SelectAntenna() { log_debug "AntSW_SelectAntenna $*" if [[ "$1" =~ ^[1-4]$ ]]; then send_cmd "A$1" else log_debug "AntSW_SelectAntenna: invalid input '$1'" fi } AntSW_AddAntenna() { log_debug "AntSW_AddAntenna $*"; AntSW_SelectAntenna "$1"; } AntSW_RemoveAntenna() { log_debug "AntSW_RemoveAntenna $*"; AntSW_GroundAll; } AntSW_ToggleAntenna() { log_debug "AntSW_ToggleAntenna $*" send_cmd "A?" reply=$(recv_resp) cur=${reply:1:1} log_debug "AntSW_ToggleAntenna: reply=$reply cur=$cur" if [[ "$cur" == "$1" ]]; then AntSW_GroundAll else AntSW_SelectAntenna "$1" fi } AntSW_ReportSelected() { log_debug "AntSW_ReportSelected $*" send_cmd "A?" reply=$(recv_resp) sel=${reply:1:1} log_debug "AntSW_ReportSelected: reply=$reply sel=$sel" echo "Selected antennas: $sel" } AntSW_ShowSelected() { log_debug "AntSW_ShowSelected $*" AntSW_ReportSelected }