From: ian Date: Mon, 16 Jun 2008 02:15:48 +0000 (+0000) Subject: new eventrun machinery for bessar X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=25f98fc75dcf59e878e031449a032d330334382a;p=trains.git new eventrun machinery for bessar --- diff --git a/hostside/Makefile b/hostside/Makefile index d53e16f..257b1dd 100644 --- a/hostside/Makefile +++ b/hostside/Makefile @@ -97,6 +97,15 @@ clean: tidy rm -f auproto-pic.h *~ core proto-expanded rm -f record-[yl].[ch] +#---------- installing things as root bessar ---------- + +BESSAR_PROGRAMS= evdev-manip eventrun +BESSAR_ETC_FILES= bessar-root.eventrun evdev-manip-bessar + +install-bessar-root: $(BESSAR_PROGRAMS) $(BESSAR_ETC_FILES) + rsync -vP $(BESSAR_PROGRAMS) davenant:/usr/local/bin/ + rsync -vP $(BESSAR_ETC_FILES) davenant:/u/ian/things/Bessar/etc/ + #---------- copying things to bessar (obsolete?) ---------- BESSAR=bessar:things/trains-bessar/hostside/. diff --git a/hostside/bessar-root.eventrun b/hostside/bessar-root.eventrun new file mode 100644 index 0000000..f80ee12 --- /dev/null +++ b/hostside/bessar-root.eventrun @@ -0,0 +1,4 @@ +CONFIG exec chvt 3 +PLAYPAUSE exec chvt 4 +MUTE exec /etc/scratch 2>@ stderr +PROPS exec chvt 5 diff --git a/hostside/evdev-manip-bessar b/hostside/evdev-manip-bessar index 583c66a..c71257b 100755 --- a/hostside/evdev-manip-bessar +++ b/hostside/evdev-manip-bessar @@ -10,6 +10,6 @@ supp EV MSC supp 0x0c 01 supp 0xffbc 88 0xffbc 00 -./evdev-manip --redact $s \ +evdev-manip --redact $s "$@" \ --evdev /dev/input/event3 \ - --hiddev /dev/hiddev0 + --hiddev /dev/hiddev0 diff --git a/hostside/eventrun b/hostside/eventrun index 0914fbb..34ff5b7 100755 --- a/hostside/eventrun +++ b/hostside/eventrun @@ -1,83 +1,37 @@ #!/usr/bin/tclsh8.3 # usage: -# eventrun +# eventrun [] -wip wip - -proc do_scancode {sc} { - upvar #0 evmap($sc) em +proc do_key {key} { + upvar #0 evmap($key) em if {[info exists em]} { - puts "=$sc $em" + puts "+ $key $em" uplevel #0 $em } else { - puts "=$sc ???" + puts "- $key" } } -proc onevtest {} { - global evtest evmap state scancode - if {[gets $evtest l] < 0} { - if {![eof $evtest]} return +proc onevgen {} { + global evgen evmap state scancode + if {[gets $evgen l] < 0} { + if {![eof $evgen]} return exit 0 } - set sl $state-$l - if {[regexp {^I-Testing.*interrupt to exit} $sl]} { - puts "* $sl" - set state 0 - upvar #0 evmap(INIT) em - if {[info exists em]} { - uplevel #0 $em - } + if {[regexp {^\S+ (?:opened|0) } $l]} return + if {![regexp {^\S+ 1 (.*)$} $l dummy key]} { + puts stderr "unknown >$l<" return } - if {[regexp {^I.*} $sl]} { - puts " $sl" - return - } - if {![regexp {^Event\: time \d+\.\d+,( .*)} $l dummy r]} { - puts " $sl" - return - } - set sr [string trimright $state-$r] - if {[regexp {^[01]- type 4 \(Misc\)\, code 4 \(ScanCode\), value (\w+)$} \ - $sr dummy scancode]} { - puts ">$scancode $sl" - set state 1 - } elseif {[regexp {^1- type 1 \(Key\), code \d+ \(\w+\), value (\w+)$}\ - $sr dummy updown]} { - if {[regexp {[^0]} $updown]} { - do_scancode $scancode - } else { - puts "!$scancode $sl" - } - set scancode ?? - set state 0 - } elseif {[regexp {^0- type 20 \(Repeat\),} $sr]} { - puts " $sl" - return - } elseif {[regexp {^0\- \-\-+ Report Sync \-\-+$} $sr]} { - puts " $sl" - return - } elseif {[regexp {^1\- \-\-+ Report Sync \-\-+$} $sr]} { - if {![regexp {0000$} $scancode]} { do_scancode _$scancode } - puts "_ $sl" - set scancode ?? - set state 0 - } else { - puts stderr "unknown >$sl|$sr<" - } + do_key $key } -proc setup {} { - global evtest state scancode - set kbdinput [exec /etc/find-kbd-event < /proc/bus/input/devices] - set cmdl [list /u/ian/things/Bessar/evtest /dev/input/$kbdinput] - lappend cmdl 2>@ stderr - set evtest [open |$cmdl r] - set state I - set scancode ?? - fconfigure $evtest -blocking no - fileevent $evtest readable onevtest +proc setup {cmdl} { + global evgen state + lappend cmdl 2>@ stderr --stdin-monitor + set evgen [open |$cmdl r+] + fconfigure $evgen -blocking no + fileevent $evgen readable onevgen } proc bgerror {m} { @@ -95,18 +49,39 @@ proc parsespecinput {fn} { set f [open $fn r] while {[gets $f l] >= 0} { set l [string trim $l] - if {[regexp {^_?(\w+)\s+(.*)$} $l dummy scancode action]} { - set evmap($scancode) $action - -wip wip - } elseif {[regexp {^\#} $l] || ![regexp {\S} $l]} { - } else { + if {[regexp {^\#} $l]} { + continue + } elseif {![regexp {\S} $l]} { + continue + } elseif {![regexp {^(\S+)\s*(.*)$} $l dummy k action]} { error "bad spec line $l" } + if {[regexp {^([A-Z][A-Z0-9_]+)$} $k dummy key]} { + set key "EV KEY KEY $key" + } elseif {[regexp {^([A-Z]+)\-([A-Z][A-Z0-9_]+)} $k dummy type key]} { + set key "EV KEY $type $key" + } elseif {[regexp {^([0-9a-f]+)-(\w+)-(\w*)-(\w+)} $k dummy \ + ap au fp fu]} { + if {![string length $fp]} { set fp $ap } + set key "0x$ap $au 0x$fp $fu" + } elseif {[regexp {^0x|^[A-Z]} $k] && [llength [split $k -]] > 2} { + set key [join [split $k -] " "] + } elseif {[regexp {^\@init$} $k]} { + uplevel #0 $action + continue + } else { + error "unknown key syntax $l" + } + set evmap($key) $action } } -parsespecinput [lindex $argv 0] -setup +set specfile [lindex $argv 0] +if {[string match -* $specfile]} { error "no options understood" } +set evgenerator [lrange $argv 1 end] +if {![llength $evgenerator]} { error "no event generator specified" } + +parsespecinput $specfile +setup $evgenerator vwait end