persist.conv.old
persist.conv
persist.conv.new
+shinkansen-motor.cv-s
%.speeds.ps %.speeds.record: ./analyse-speeds
./$^ $*
+%: %.gen
+ ./$^ $o
+
hostside: hostside.o serialio.o client.o obc.o commands.o utils.o \
nmra.o encode.o retransmit.o output.o auproto-pic.o \
parseutils.o \
die unless m/^\s*(\d+)\s+([0-9.]+)\s/;
($step,$speed) = ($1,$2);
die "$step $nxt" unless $step==$nxt;
+ if ($speed < $max) { push @decreases, $step; $speed= $max; }
$speed[$step]= $speed;
- die "decrease $step $nxt $max" if $speed < $max;
$max= $speed;
$nxt++;
END {
+ warn "warning: '$train': decreases at steps @decreases\n"
+ if @decreases;
$steps= $nxt-1;
warn "warning: '$train': expected 126 steps, found $steps\n"
unless $steps==126;
case "$filename" in
*/*) ;;
-*) filename="$filename.cv-s";;
+*) filename="$filename.cv-s"
+ make "$filename"
+ ;;
esac
exec <"$filename"
value=$(( $value + 0 ))
cvlist="$cvlist $cv=$value"
;;
- '#'*)
+ '#'*|'')
;;
*)
- fail 'invalid syntax'
+ fail "invalid syntax: $cv $value"
;;
esac
done
--- /dev/null
+#!/usr/bin/perl
+
+$nmax= 126;
+
+#$max= 117;
+#$max= 50;
+$max= 108.9;
+
+@steps= 67..94;
+
+$doublings= 0;
+$vmin= 40;
+$vmax= 255;
+
+for ($i=0; $i<@steps; $i++) {
+ push @vals, $i + @steps * (exp($i/@steps * log(2) * $doublings) - 1.0);
+}
+$maxval= $vals[$#val];
+grep { $_ *= ($vmax-$vmin)/$maxval * $max/$nmax; $_ += $vmin; } @vals;
+
+printf "# autogenerated!\n" or die $!;
+while (<DATA>) { print or die $!; }
+
+for ($i=0; $i<@steps; $i++) {
+ printf "%d %d\n", $steps[$i], $vals[$i]
+ or die $!;
+}
+
+__END__
+addr 1
+#2 1
+29 0x16
+51 0x07
+57 0x06
+
+# speed curve: