local ping test working

pull/4/head
David Rowe 2020-11-22 09:28:19 +00:00
parent ad8f95576d
commit dc9c61353e
2 changed files with 54 additions and 16 deletions

View File

@ -1,4 +1,4 @@
#!/bin/bash -x
#!/bin/bash
# frame repeater service
# TODO
@ -18,20 +18,50 @@ PIDFILE=/var/run/${NAME}.pid
LOGFILE=/var/log/${NAME}.log
PATH=${PIRIP_PATH}/tx:${PIRIP_PATH}/librtlsdr/build_rtlsdr/src:${PATH}
function tx_burst_rpitx {
num_bursts=$1
pause_between_bursts=$2
tmp=$(mktemp)
for (( i=1; i<=$num_bursts; i++ ))
do
printf "%d Tx burst %d from RPiTx...\n" `date +%s` ${i} 1>&2
rpitx_fsk /dev/zero --code H_256_512_4 -r ${RS} -s ${RS} --testframes 1 -g 21 -m 2
sleep $pause_between_bursts
done
}
function start_rx {
rtl_fsk -g 49 -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} -- ) >>${LOGFILE} 2>&1 &
RETVAL=$?
rpitx_fsk - --code ${CODE} -r ${RS} -s ${RS} -g ${TR_SWITCH_GPIO} --packed -- ) >>${LOGFILE} 2>&1 &
echo $!>${PIDFILE}
[ $RETVAL = 0 ] && echo -ne '\t\t\t\t\t[ \033[32mOK\033[0m ]\n'
;;
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)
verbose=1
start_rx && sleep 1 && tx_burst_rpitx 1 1 && stop_service
;;
stop)
parent=$(cat ${PIDFILE})
children=$(ps -o pid= --ppid ${parent})
kill ${children}
rm ${PIDFILE}
stop_service
;;
restart)
$0 stop
@ -46,7 +76,11 @@ case "$1" in
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
echo "Usage: $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 - local loopback test, tx/rx a single packet"
esac
exit 0

View File

@ -41,12 +41,17 @@ void freedv_unpack(unsigned char *bits, unsigned char *bytes, int nbits);
bool running=true;
static int terminate_calls = 0;
ngfmdmasync *fmmod = NULL;
static void terminate(int num) {
terminate_calls++;
running=false;
fprintf(stderr,"Caught signal %d - Terminating\n", num);
if (terminate_calls >= 5) exit(1);
if (terminate_calls >= 5) {
// make sure TX is off if we have to abort
if (fmmod) delete fmmod;
exit(1);
}
}
@ -109,7 +114,6 @@ int main(int argc, char **argv)
int m = 2;
int log2m;
float shiftHz = -1;
ngfmdmasync *fmmod = NULL;
struct freedv *freedv = NULL;
struct freedv_advanced adv;
int fsk_ldpc = 0;
@ -217,7 +221,7 @@ int main(int argc, char **argv)
}
testframes = 1;
Nframes = atoi(optarg);
fprintf(stderr, "Sending %d testframes...\n", Nframes);
fprintf(stderr, "rpitx_fsk: Sending %d testframe(s)...\n", Nframes);
break;
case 'g':
strcpy(ant_switch_gpio, optarg);
@ -266,7 +270,7 @@ int main(int argc, char **argv)
assert(freedv != NULL);
data_bits_per_frame = freedv_get_bits_per_modem_frame(freedv);
bits_per_frame = freedv_tx_fsk_ldpc_bits_per_frame(freedv);
fprintf(stderr, "FSK LDPC mode code: %s data_bits_per_frame: %d\n", adv.codename, data_bits_per_frame);
fprintf(stderr, "rpitx_fsk: FSK LDPC mode code: %s data_bits_per_frame: %d\n", adv.codename, data_bits_per_frame);
/* set up preamble */
/* TODO: this should be a freeDV API function */
@ -290,8 +294,8 @@ int main(int argc, char **argv)
//fmmod = new ngfmdmasync(frequency,SymbolRate,14,FIFO_SIZE);
//fmmod->clkgpio::disableclk(4);
fprintf(stderr, "Frequency: %4.1f MHz Rs: %4.1f kHz Shift: %4.1f kHz M: %d \n", frequency/1E6, SymbolRate/1E3, shiftHz/1E3, m);
fprintf(stderr, "data_bits_per_frame: %d bits_per_frame: %d\n", data_bits_per_frame, bits_per_frame);
fprintf(stderr, "rpitx_fsk: Frequency: %4.1f MHz Rs: %4.1f kHz Shift: %4.1f kHz M: %d \n", frequency/1E6, SymbolRate/1E3, shiftHz/1E3, m);
fprintf(stderr, "rpitx_fsk: data_bits_per_frame: %d bits_per_frame: %d\n", data_bits_per_frame, bits_per_frame);
if ((carrier_test == 0) && (one_zero_test == 0)) {
// FSK Tx --------------------------------------------------------------------
@ -343,7 +347,7 @@ int main(int argc, char **argv)
float tdelay = (float)bufferSamples/SymbolRate;
usleep((int)(tdelay*1E6));
printf("End of this burst\n");
printf("rpitx_fsk: End of this burst\n");
// transmitter carrier off between bursts
delete fmmod;