chiark / gitweb /
initial ebuyer kbd code
authorian <ian>
Sun, 13 Jul 2008 23:09:14 +0000 (23:09 +0000)
committerian <ian>
Sun, 13 Jul 2008 23:09:14 +0000 (23:09 +0000)
hostside/gui

index 731f7514f0fc60eda72e36f0636833a2eea20c34..d731723cacaeb66c29b6c95f4ab1cda088f2929c 100755 (executable)
@@ -491,6 +491,8 @@ register-event &train_*_signalling-problem {train problem} \
 
 #---------- concrete input bindings ----------
 
+#----- wheelmouse
+
 proc ib-wheelmouse-stepmap {offset oldspeed} {
     upvar #0 ib_wheelmouse_stepmap map
     set ixabove 0
@@ -525,12 +527,86 @@ proc ib-create/wheelmouse {devid wunique desc} {
     set in(speedw) $w
 }
 
+proc ib-suppressions {args} {
+    set l {}
+    foreach supp $args {
+       set l [concat $l --redaction $supp --suppress]
+    }
+    return $l
+}
+
+proc ib-wheelmouse-redactions {} {
+    return [ib-suppressions  \
+           {EV REL REL X} \
+           {EV REL REL Y}]
+}
+
 proc ib-evcmd/wheelmouse {devid target} {
-    return [ib-evcmd-construct $devid $target {
-       --grab
-       --redaction EV REL REL X --suppress
-       --redaction EV REL REL Y --suppress
-    }]
+    return [ib-evcmd-construct $devid $target [concat \
+           [list --grab] [ib-wheelmouse-redactions]]]
+}
+
+#----- ebuyer wireless keyboard
+
+proc ib-create/ebwikeb {devid wunique} {
+    upvar #0 input/$devid in
+    set in(desc) "main keyboard"
+    ib-create/wheelmouse $devid $wunique $desc
+    set in(modifiers) 0
+}
+
+proc ib-evcmd/ebwikeb {devid target} {
+    return [concat \
+           [list ./evdev-manip --redact --stdin-monitor] \
+           [ib-wheelmouse-redactions] \
+           [ib-suppressions \
+               {0x01 02} \
+               {EV MSC} \
+               {0x0c 01} \
+               {0xffbc 88 0xffbc 00}] \
+           [list --evdev /dev/input/event2 \
+                 --evdev /dev/input/event3 \
+                 --hiddev /dev/hiddev0]]
+}
+
+proc ib-ev/ebwikeb/EV_REL/REL_WHEEL {devid value} {
+    ib-ev/wheelmouse/EV_REL/REL_WHEEL $devid $value
+}
+
+proc ib-ebwikeb-modifier {devid value bitval} {
+    upvar #0 input/${devid}(modifiers) mod
+    if {$value} {
+       set mod [expr {$mod | $bitval}]
+    } else {
+       set mod [expr {$mod & ~$bitval}]
+    }
+}
+proc ib-ev/ebwikeb/EV_KEY/KEY_LEFTSHIFT {devid value} {
+    ib-ebwikeb-modifier $devid $value 0x0001
+}
+proc ib-ev/ebwikeb/EV_KEY/KEY_RIGHTSHIFT {devid value} {
+    ib-ebwikeb-modifier $devid $value 0x0002
+}
+proc ib-ev/ebwikeb/EV_KEY/KEY_LEFTCTRL {devid value} {
+    ib-ebwikeb-modifier $devid $value 0x0100
+}
+proc ib-ev/ebwikeb/EV_KEY/KEY_RIGHTCTRL {devid value} {
+    ib-ebwikeb-modifier $devid $value 0x0200
+}
+proc ib-ev/ebwikeb/EV_KEY/KEY_CAPSLOCK {devid value} {
+    ib-ebwikeb-modifier $devid $value 0x0400
+}
+
+proc ib-ev/ebwikeb/EV_KEY/KEY_BOOKMARKS {devid value} {
+    upvar #0 input/$devid in
+    if {!$value} return
+    if {!($in(mod) & 0xff00)} return
+    if {$in(mod) & 0x00ff} {
+       set how stop
+    } else {
+       set how auto
+    }
+    scmd routinecmd $in(desc) "!realtime $how"
 }
 
 #---------- input device evdev binding ----------