-#!/usr/bin/tclsh8.2
+#!/usr/bin/tclsh8.3
# used like this:
# liberator:hostside> ssh bessar 'cd things/trains-bessar/hostside && ./stopgap-controller' | ./gui-displayer -
set ch(minint) 5000
-set pointprobs {0 0x010 0x080 0x0f0 0x100}
+set pointprobs {0 0x020 0x080 0x0e0 0x100}
set pointprobix 0
set pointabs 1 ;# 0 or 1
set segsasgot {xx yy}
set pq {} ;# unset: cdu charged and waiting
set speeddirn ff7f
-#unset askspeedix
-set askspeeds {10 30 50 80 100 126}
+set askspeedix -1
+set askspeeds {1 30 50 80 100 126}
#set speeddirn ffff80c3fbcced7f
#set speeddirn_fixed {speed126 2 80 0}
set speeddirn_fixed {}
}
proc newspeeddirn {} {
- global loco
+ global loco askspeedix
+ set maxspeed [expr {$askspeedix == -1 ? 126.0 : 50.0}]
+ set minspeed 26.0
set b1 0x[randbyte]
- set speed [expr {round(($b1 * $b1) / 65535.0 * 100.0 + 26.0)}]
+ set speed [expr {
+ round(($b1 * $b1) / 65535.0 * ($maxspeed - $minspeed) + $minspeed)
+ }]
set b2 0x[randbyte]
set dirn [expr {$b2 / 128}]
set dirn 0
}
proc ask_speed {updown} {
- global speeddirn_fixed loco
+ global speeddirn_fixed loco askspeedix
+ if {$askspeedix < 0} { unset askspeedix }
set speed [updownfromlist askspeeds askspeedix $updown]
set speeddirn_fixed [list speed126 $loco $speed 0]
maybechange speeddirn 1
proc ask_randspeed {} {
global speeddirn_fixed askspeedix
+ set askspeedix [expr {$askspeedix == -1 ? -2 : -1}]
catch { unset speeddirn_fixed }
- catch { unset askspeedix }
maybechange speeddirn 1
}
global loco stateshowpipe pointprob pointabs askspeedix
upvar #0 funcsr$loco fr
upvar #0 funcsl$loco fl
- if {[info exists askspeedix]} { set spd $askspeedix } { set spd r }
puts -nonewline $stateshowpipe [format \
"\nL$loco P%03x%s F%03x S%s" \
$pointprob [lindex {R A} $pointabs] \
[expr {[lindex $fr 0] | [lindex $fl 0]}] \
- $spd]
+ $askspeedix]
}
setup