From edb3b29cf7e3d289a054a36ff37e9f8381bddac3 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 13 Feb 2011 18:48:36 +0000 Subject: [PATCH] gui: gamepad dead spot logic etc, can set direction --- hostside/gui | 63 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/hostside/gui b/hostside/gui index 47a0e87..b88cf8c 100755 --- a/hostside/gui +++ b/hostside/gui @@ -858,24 +858,65 @@ proc ib-evcmd/wheelmouse {devid target} { proc ib-create/gamepad {devid wunique desc} { ib-speedw-new $devid $wunique $desc upvar #0 input/$devid in - set in(tractbrake_deadzone) 0.2 + set in(main_deadzone_y) 0.2 + set in(main_deadzone_x) 0.5 + set in(main_x) 0 + set in(main_y) 0 + set in(main_active) {} } -proc ib-ev/tractbrake/init {devid} { - upvar #0 input-params/$devid pa +proc ib-ev/gamepad/EV_ABS/ABS_THROTTLE {devid value} { + ib-gamepad-main $devid y $value +} +proc ib-ev/gamepad/EV_ABS/ABS_RUDDER {devid value} { + ib-gamepad-main $devid x $value } -proc ib-ev/gamepad/EV_ABS/ABS_THROTTLE {devid value} { +proc ib-gamepad-main {devid xy value} { upvar #0 input/$devid in - if {abs($value) < $in(tractbrake_deadzone)} { - speedw-userinput-tractbrake $in(speedw) 0 0 - return + if { abs($value) < $in(main_deadzone_$xy) } { set value 0 } + set last $in(main_$xy) + set in(main_$xy) $value + + set active {} + foreach txy {x y} { + if { $in(main_$txy) } { + if {[string length $active]} return + set active $txy + } } - if {$value < 0} { - speedw-userinput-tractbrake $in(speedw) [expr {-$value}] 0 - } { - speedw-userinput-tractbrake $in(speedw) 0 $value + debug [format "ib-gamepad-main %s %s %6.4f,%6.4f %s %s" \ + $devid $xy $in(main_x) $in(main_y) $in(main_active) $active] + if {![string length $active]} { + if {[string length $in(main_active)]} { + speedw-userinput-tractbrake $in(speedw) 0 0 + } + } else { + if {[string length $in(main_active)] && + [string compare $active $in(main_active)]} { + return + } + set value $in(main_$active) + switch -exact $active { + y { + if {$value < 0} { + speedw-userinput-tractbrake $in(speedw) [expr {-$value}] 0 + } { + speedw-userinput-tractbrake $in(speedw) 0 $value + } + } + x { + if { abs($value) < 0.75 } return + if {[string length $in(main_active)]} return + speedw-train-direction $in(speedw) \ + [expr { $value < 0 ? "backwards" : "forwards" }] + } + default { + error "$active ?" + } + } } + set in(main_active) $active } #----- ebuyer wireless keyboard -- 2.30.2