nyni je funkce
[mirrors/Programs.git] / bash / serial_loopback_test.sh
CommitLineData
4eb6c240 1#!/bin/sh
cab857a9 2#
4257d52f 3#Serial line tester v0.3
4eb6c240 4#(c) Tomas Mudrunka 2022-2024
cab857a9
TM
5#
6#Tested in: busybox ash, bash
55d43182 7
052685bd
TM
8function serial_loopback_test() {
9
4eb6c240
TM
10trylimit=0
11seconds=0
12baudrate=115200
13workaround_rs485=false
14
15while getopts ":t:r:b:l:s:w" OPT; do
16 #echo "$OPT ==> $OPTARG";
17 case $OPT in
18 t) port_tx=$OPTARG;;
19 r) port_rx=$OPTARG;;
20 b) baudrate=$OPTARG;;
21 l) trylimit=$OPTARG;;
22 s) seconds=$OPTARG;;
23 w) workaround_rs485=true;;
24
25 '?') echo "Usage: $0 -t /dev/ttyTX [-r /dev/ttyRX] [-b 9600] [-l 10] [-s 10] [-w]" >&2; exit 250;;
26 ':') echo "Missing option argument for -$OPTARG" >&2; exit 251;;
27 * ) echo "Unimplemented option: -$OPT" >&2; exit 252;;
28 esac
29done
30
31[ -z "$port_tx" ] && port_tx="$port_rx"
32[ -z "$port_rx" ] && port_rx="$port_tx"
33[ -z "$port_rx" ] && { echo Port not specified; exit 253; }
55d43182 34
55d43182
TM
35
36testdata="${RANDOM}d82b2ae45432e7c80699852ab557b279c42180a379711aae85487bda0cc58602f65c0ab5af0d510d6ac1606c52f887f3332052f67c45212dbbf2730${RANDOM}"
37
4eb6c240
TM
38echo "Running $baudrate baud loopback test on $port_tx -> $port_rx"
39echo "Limiting to $trylimit iterations and $seconds seconds (0 = no limit)"
55d43182 40
4eb6c240
TM
41stty -F "$port_tx" raw -echo "$baudrate"
42stty -F "$port_rx" raw -echo "$baudrate"
55d43182
TM
43
44exec 5>"$port_tx"
45exec 6<"$port_rx"
46
4eb6c240
TM
47$workaround_rs485 && {
48 echo "Deasserting RTS on buggy RS485 drivers by writing to RX port"
49 echo>"$port_rx"
50 read -rst 1 -u 6
51}
52
55d43182 53errcnt=0
4eb6c240
TM
54trycnt=0
55datestart="$(date +%s)"
56dateend="$(($datestart+$seconds))"
55d43182
TM
57while true; do
58 echo "$testdata" >&5
59 unset line
60 read -rst 1 -u 6 line
61 #echo "LINE: $line"
4257d52f 62 [ "$line" != "$testdata" ] && errcnt=$((errcnt+1)) &&
55d43182 63 echo -e "$(date +'%D %T')\t$errcnt\tError receiving data $port_tx -> $port_rx"
4eb6c240
TM
64 trycnt=$((trycnt+1))
65 #echo "try $trycnt err $errcnt lim $trylimit"
66 [ $trylimit -gt 0 -a $trycnt -gt $trylimit ] && break
67 [ $seconds -gt 0 ] && [ $(date +%s) -gt $dateend ] && break
55d43182
TM
68done
69
70exec 5>&-
71exec 6<&-
4eb6c240
TM
72
73echo TRANSMITTED: $trycnt, ERRORS: $errcnt, SECONDS: $(($(date +%s)-$datestart))
74[ "$errcnt" = "0" -a "$trycnt" -gt 0 ] && exit 0
75exit 255
052685bd
TM
76
77}
78
79serial_loopback_test "$@"
This page took 0.301676 seconds and 4 git commands to generate.