chiark / gitweb /
gui: gamepad supports uninhibit
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 13 Feb 2011 19:01:04 +0000 (19:01 +0000)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 13 Feb 2011 19:01:04 +0000 (19:01 +0000)
hostside/gui

index b88cf8c34487837cb00d369752f0d7cf847dae81..f18b218358a54581b184b1b7aa5c389b388d9c5d 100755 (executable)
@@ -572,6 +572,13 @@ proc speedw-userinput-tractbrake {w tract brake} {
     tractbrake-userinput $s(train) $tract $brake $w
 }
 
+proc speedw-uninhibit-tractbrake {w} {
+    upvar #0 speed/$w s
+    speedw-uninhibit $w 2
+    if {![string length $s(train)]} return
+    tractbrake-reset-speed $s(train)
+}
+
 proc speedws-train-problem {train} {
     speedws-fortrain $train speedw-inhibit
 }
@@ -652,14 +659,19 @@ proc tractbrake-queue-update {train} {
                        [list tractbrake-update $train]]
 }
 
+proc tractbrake-reset-speed {train} {
+    upvar #0 tractbrake/$train tb
+    if {![info exists tb]} return
+    upvar #0 speedcurve/$train sc
+    upvar #0 train_commanded($train) gcommanded
+    setexpr tb(v) {[lindex $sc $gcommanded] / [lindex $sc 126]}
+}    
 proc tractbrake-attach {train speedw} {
     # can safely be called when already attached
     upvar #0 tractbrake/$train tb
-    upvar #0 speedcurve/$train sc
     set tb(speedw) $speedw
     if {[info exists tb(queued)]} return
-    upvar #0 train_commanded($train) gcommanded
-    setexpr tb(v) {[lindex $sc $gcommanded] / [lindex $sc 126]}
+    tractbrake-reset-speed $train
     tractbrake-queue-update $train
 }
 proc tractbrake-detach {train} {
@@ -919,6 +931,13 @@ proc ib-gamepad-main {devid xy value} {
     set in(main_active) $active
 }
 
+proc ib-ev/gamepad/EV_KEY/BTN_TOP2 {devid value} {
+    upvar #0 input/$devid in
+    if {!$value} return
+    if {[string length $in(main_active)]} return
+    speedw-uninhibit-tractbrake $in(speedw)
+}
+
 #----- ebuyer wireless keyboard
 
 proc ib-create/ebwikeb {devid wunique} {