QortalOS Brooklyn for Raspberry Pi 4
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.7 KiB

#!/bin/bash
# frame repeater service
# TODO
# [X] way to send stderr to log file
# [ ] way to set freq at start up
# [ ] way to set Rs and M at start up
# [ ] way to start as frame repeater or beacon
TERM_ADDR=0x2
RS=10000
DATA_BITS_PER_FRAME=256
CODE=H_${DATA_BITS_PER_FRAME}_512_4
TR_SWITCH_GPIO=21
PIRIP_PATH=/home/pi/pirip
NAME=frame_repeater
PIDFILE=/var/run/${NAME}.pid
LOGFILE=/var/log/${NAME}.log
PATH=${PIRIP_PATH}/tx:${PIRIP_PATH}/librtlsdr/build_rtlsdr/src:${PATH}
GAIN="${GAIN:-49}"
function tx_burst_rpitx {
num_bursts=$1
rpitx_fsk /dev/zero --code H_256_512_4 -r ${RS} -s ${RS} --testframes 3 --bursts ${num_bursts} --delay 2000 -g 21 -m 2
#rpitx_fsk -c
}
function start_rx {
rtl_fsk -g ${GAIN} -f 144490000 - -a 200000 -r ${RS} --code H_256_512_4 --mask ${RS} -L $1 > /dev/null &
echo $!>${PIDFILE}
}
function stop_service {
echo "service stopping - bye!" 1>&2
parent=$(cat ${PIDFILE})
kill ${parent}
rm ${PIDFILE}
}
case "$1" in
start)
( rtl_fsk -g 49 -f 144490000 - -a 200000 -r ${RS} --code ${CODE} --mask ${RS} --filter ${TERM_ADDR} -q -b | \
frame_repeater ${DATA_BITS_PER_FRAME} ${TERM_ADDR} | \
rpitx_fsk - --code ${CODE} -r ${RS} -s ${RS} -g ${TR_SWITCH_GPIO} --packed -- ) >>${LOGFILE} 2>&1 &
echo $!>${PIDFILE}
;;
start_verbose)
# run in the foreground and log to stderr instead of a logfile
rtl_fsk -g 49 -f 144490000 - -a 200000 -r ${RS} --code ${CODE} --mask ${RS} --filter ${TERM_ADDR} -q -b -v | \
frame_repeater ${DATA_BITS_PER_FRAME} ${TERM_ADDR} | \
rpitx_fsk - --code ${CODE} -r ${RS} -s ${RS} -g ${TR_SWITCH_GPIO} --packed --
;;
start_loopback)
# Send packets from Pi to RTLSDR on this machine (no filtering of packets or frame repeater)
set -x
verbose=1
start_rx
sleep 1
if ! ps -p $(cat ${PIDFILE}); then
echo "rtl_fsk failed to start!"
rm ${PIDFILE}
exit 1
fi
tx_burst_rpitx $2
stop_service
;;
stop)
stop_service
;;
restart)
$0 stop
$0 start
;;
status)
if [ -e ${PIDFILE} ]; then
echo ${NAME} is running, pid=`cat ${PIDFILE}`
else
echo$ {NAME} is NOT running
exit 1
fi
;;
*)
echo "Usage: sudo $0 {start|stop|status|restart}"
echo ""
echo "start - Start frame repeater service, logfile is ${LOGFILE}"
echo "start_verbose - Start frame repeater in foreground, no logfile"
echo "start_loopback numBursts - Local loopback test, tx/rx numBursts"
esac
exit 0