aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-05-21 21:14:50 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-05-21 21:14:50 +0200
commited682fbbf35a2aa9df5eedce29bea0cf37f4782b (patch)
tree2e18eccebc69f4ec3699f9bed0d5c070fcf05d57
parentc75830c3931bfe1338788d186cd3f1e00ef2abd6 (diff)
Add command launcher
-rw-r--r--runcmd/main.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/runcmd/main.go b/runcmd/main.go
new file mode 100644
index 0000000..2d99125
--- /dev/null
+++ b/runcmd/main.go
@@ -0,0 +1,63 @@
+package main
+
+import (
+ "flag"
+ "log"
+ "os/exec"
+ "strings"
+
+ "dim13.org/redbutton"
+)
+
+var cmd = flag.String("cmd", "echo ok", "cmd to run")
+
+type StateFn func(redbutton.Button) StateFn
+
+func Init(b redbutton.Button) StateFn {
+ if b == redbutton.Armed {
+ log.Println("Ready...")
+ return Armed
+ }
+ return Init
+}
+
+func Armed(b redbutton.Button) StateFn {
+ if b == redbutton.Pressed {
+ log.Println("Go!")
+ Exec(*cmd)
+ return Reset
+ }
+ return Init
+}
+
+func Reset(b redbutton.Button) StateFn {
+ if b == redbutton.Closed {
+ return Init
+ }
+ return Reset
+}
+
+func Exec(s string) {
+ parts := strings.Fields(s)
+ cmd := exec.Command(parts[0], parts[1:]...)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ log.Fatal(err)
+ }
+ log.Println(string(out))
+}
+
+func main() {
+ flag.Parse()
+
+ dev, err := redbutton.Open()
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer dev.Close()
+
+ state := redbutton.Poll(dev)
+ for stateFn := Init; stateFn != nil; {
+ stateFn = stateFn(<-state)
+ }
+}