forked from Qortal/Brooklyn
91 lines
2.7 KiB
Plaintext
91 lines
2.7 KiB
Plaintext
|
#!/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
|