#!/usr/bin/tclsh8.3
# Put loco on track segment X5 ish, facing anticlockwise
-# ./measure-speeds /dev/ttyUSB1 2 `seq 1 126` |tee santafe.speeds
+# ./measure-speeds /dev/ttyUSB1 2 0 `seq 1 126` |tee santafe.speeds
+# ^reverse
load chiark_tcl_hbytes-1.so
fileevent $rwy readable readable
set buf {}
set last_fast_speed 0
- set noise [hbytes random 256]
+ set noise {}
+ for {set i 0} {$i < 256} {incr i} { append noise \\x [hbytes random 1] }
}
proc readable {} {
#
proc speed-msg {speed} {
- global loco
- list speed126 $loco [expr {abs($speed)}] [expr {$speed<0}]
+ global loco reverse
+ list speed126 $loco [expr {abs($speed)}] [expr {$speed<0 != $reverse}]
}
proc run-until {speed new_detend} {
proc now-ms-click {} {
global noise
set now [now-ms]
- if {[catch {
- set dsp [open /dev/dsp w]
- fconfigure $dsp -encoding binary -translation binary
- puts -nonewline $dsp [hbytes h2raw $noise]
- close $dsp
- } emsg]} {
- debug "noise: $emsg"
- catch { close $dsp }
- }
+ set f [open |[list sh -c {"$@" >/dev/dsp} x printf $noise]]
+ fileevent $f readable [list close $f]
return $now
}
set port [lindex $argv 0]
set loco [lindex $argv 1]
+set reverse [lindex $argv 2]
startup
-foreach s [lrange $argv 2 end] {
+foreach s [lrange $argv 3 end] {
speed-test $s
}
instruct-stop-for 500