chiark / gitweb /
Merge and end branch-hostside-wip-2008-01-25 PROPERLY; cvs up -j branch-hostside...
[trains.git] / hostside / reprogram
1 #!/bin/bash
2
3 set -e
4
5 fail () { echo >&2 "$0: error: $*"; exit 1; }
6
7 if [ $# != 2 ]; then cat >&2 <<END; exit 1; fi
8  usage:
9   ./reprogram /dev/ttyS0 LOCO|FILENAME
10   where LOCO means ./LOCO.cv-s
11   and FILENAME must contain a slash
12 END
13
14 port="$1"; shift
15 filename="$1"; shift
16
17 case "$filename" in
18 */*)    ;;
19 *)      filename="$filename.cv-s"
20         make "$filename"
21         ;;
22 esac
23 exec <"$filename"
24
25 while read cv value; do
26         case "$cv" in
27         addr)
28                 [ x$addr = x ] || fail 'addr twice'
29                 addr=$(( $value + 0 ))
30                 ;;
31         [0-9]*)
32                 cv=$(( $cv + 0 ))
33                 value=$(( $value + 0 ))
34                 cvlist="$cvlist $cv=$value"
35                 ;;
36         '#'*|'')
37                 ;;
38         *)
39                 fail "invalid syntax: $cv $value"
40                 ;;
41         esac
42 done
43
44 echo "Factory reset"
45 ./factory-reset-svc "$port"
46
47 echo "Setting address to $addr"
48 ./program-cv-svc "$port" 1 $addr
49
50 for cvv in $cvlist; do
51         sleep 1
52         cv=${cvv%=*}
53         value=${cvv#*=}
54         echo "Setting CV $cv = $value"
55         ./program-cv "$port" $addr $cv $value
56 done