chiark / gitweb /
can do reverse; better dsp handling
authorian <ian>
Tue, 22 Jan 2008 21:53:25 +0000 (21:53 +0000)
committerian <ian>
Tue, 22 Jan 2008 21:53:25 +0000 (21:53 +0000)
hostside/measure-speeds

index 085384fef1b3a3815f047b0721c743518f136131..c4d0e013445d3bbe79d2efb324403d03abbaa9f5 100755 (executable)
@@ -1,7 +1,8 @@
 #!/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
 
@@ -26,7 +27,8 @@ proc startup {} {
     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 {} {
@@ -83,8 +85,8 @@ proc proc-msg {msg} {
 #
 
 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} {
@@ -148,15 +150,8 @@ proc now-ms {} {
 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
 }
 
@@ -237,10 +232,11 @@ proc speed-test {speed} {
 
 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