forked from Qortal/Brooklyn
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.
90 lines
2.7 KiB
90 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
|
|
|