chiark / gitweb /
new eventrun machinery for bessar
authorian <ian>
Mon, 16 Jun 2008 02:15:48 +0000 (02:15 +0000)
committerian <ian>
Mon, 16 Jun 2008 02:15:48 +0000 (02:15 +0000)
hostside/Makefile
hostside/bessar-root.eventrun [new file with mode: 0644]
hostside/evdev-manip-bessar
hostside/eventrun

index d53e16f0f54bdf1fa6f21735f1cae9b45fc4f533..257b1dd7aafe17b40b351899826db03aef1fcbe2 100644 (file)
@@ -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 (file)
index 0000000..f80ee12
--- /dev/null
@@ -0,0 +1,4 @@
+CONFIG         exec chvt 3
+PLAYPAUSE      exec chvt 4
+MUTE           exec /etc/scratch 2>@ stderr
+PROPS          exec chvt 5
index 583c66affdce7ad2a2912bc5d0b389cfa3486787..c71257bdc29b8600ddb92cac88a05f79b804b721 100755 (executable)
@@ -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
index 0914fbbcb7b472a9af69b87caddb776bbf341cd6..34ff5b755bcbe66c498e764b0d709a1c2fe34319 100755 (executable)
@@ -1,83 +1,37 @@
 #!/usr/bin/tclsh8.3
 # usage:
-#   eventrun <config filename> <command to run evdev-manip>
+#   eventrun [<options>] <config filename> <command to run evdev-manip>
 
-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