#!/bin/sh
-#Serial line tester, should work in busybox ash
+#
+#Serial line tester v0.3
#(c) Tomas Mudrunka 2022-2024
+#
+#Tested in: busybox ash, bash
+function serial_loopback_test() {
+
+port_tx=
+port_rx=
trylimit=0
seconds=0
baudrate=115200
s) seconds=$OPTARG;;
w) workaround_rs485=true;;
- '?') echo "Usage: $0 -t /dev/ttyTX [-r /dev/ttyRX] [-b 9600] [-l 10] [-s 10] [-w]" >&2; exit 250;;
- ':') echo "Missing option argument for -$OPTARG" >&2; exit 251;;
- * ) echo "Unimplemented option: -$OPT" >&2; exit 252;;
+ '?') echo "Usage: $0 -t /dev/ttyTX [-r /dev/ttyRX] [-b 9600] [-l 10] [-s 10] [-w]" >&2; return 250;;
+ ':') echo "Missing option argument for -$OPTARG" >&2; return 251;;
+ * ) echo "Unimplemented option: -$OPT" >&2; return 252;;
esac
done
[ -z "$port_tx" ] && port_tx="$port_rx"
[ -z "$port_rx" ] && port_rx="$port_tx"
-[ -z "$port_rx" ] && { echo Port not specified; exit 253; }
+[ -z "$port_rx" ] && { echo Port not specified; return 253; }
testdata="${RANDOM}d82b2ae45432e7c80699852ab557b279c42180a379711aae85487bda0cc58602f65c0ab5af0d510d6ac1606c52f887f3332052f67c45212dbbf2730${RANDOM}"
unset line
read -rst 1 -u 6 line
#echo "LINE: $line"
- [ "$line" != "$testdata" ] && {
+ [ "$line" != "$testdata" ] && errcnt=$((errcnt+1)) &&
echo -e "$(date +'%D %T')\t$errcnt\tError receiving data $port_tx -> $port_rx"
- } && errcnt=$((errcnt+1))
trycnt=$((trycnt+1))
#echo "try $trycnt err $errcnt lim $trylimit"
[ $trylimit -gt 0 -a $trycnt -gt $trylimit ] && break
exec 6<&-
echo TRANSMITTED: $trycnt, ERRORS: $errcnt, SECONDS: $(($(date +%s)-$datestart))
-[ "$errcnt" = "0" -a "$trycnt" -gt 0 ] && exit 0
-exit 255
+[ "$errcnt" = "0" -a "$trycnt" -gt 0 ] && return 0
+return 255
+
+}
+
+serial_loopback_test "$@"