From c6d0083a853f00cd8f0df5567752478ff66eefab Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 21 May 2015 23:42:09 +0200 Subject: Simplify --- redbutton.go | 23 ++++++++++------------- runcmd/main.go | 16 +++++++--------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/redbutton.go b/redbutton.go index 452d09c..15b1a4e 100644 --- a/redbutton.go +++ b/redbutton.go @@ -1,7 +1,6 @@ package redbutton import ( - "errors" "time" "github.com/GeertJohan/go.hid" @@ -32,24 +31,24 @@ func (b Button) String() string { return state[b] } -func State(dev *hid.Device) (Button, error) { +func State(dev *hid.Device) (Button, bool) { buf := make([]byte, 8) buf[0] = 0x01 buf[7] = 0x02 if _, err := dev.Write(buf); err != nil { - return Unknown, err + return Unknown, false } if _, err := dev.ReadTimeout(buf, 10); err != nil { - return Unknown, err + return Unknown, false } if buf[7] != 0x03 { - return Unknown, errors.New("bad magic") + return Unknown, false } - return Button(buf[0] & 0x03), nil + return Button(buf[0] & 0x03), true } func Poll(dev *hid.Device) <-chan Button { @@ -57,14 +56,12 @@ func Poll(dev *hid.Device) <-chan Button { go func() { prev := Unknown for { - state, err := State(dev) - if err != nil { - panic(err) + if state, ok := State(dev); ok { + if state != prev { + ch <- state + } + prev = state } - if state != prev { - ch <- state - } - prev = state time.Sleep(100 * time.Millisecond) } }() diff --git a/runcmd/main.go b/runcmd/main.go index 2d99125..0cb92a8 100644 --- a/runcmd/main.go +++ b/runcmd/main.go @@ -1,16 +1,13 @@ package main import ( - "flag" "log" + "os" "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 { @@ -24,7 +21,7 @@ func Init(b redbutton.Button) StateFn { func Armed(b redbutton.Button) StateFn { if b == redbutton.Pressed { log.Println("Go!") - Exec(*cmd) + Exec(os.Args[1:]) return Reset } return Init @@ -37,9 +34,8 @@ func Reset(b redbutton.Button) StateFn { return Reset } -func Exec(s string) { - parts := strings.Fields(s) - cmd := exec.Command(parts[0], parts[1:]...) +func Exec(args []string) { + cmd := exec.Command(args[0], args[1:]...) out, err := cmd.CombinedOutput() if err != nil { log.Fatal(err) @@ -48,7 +44,9 @@ func Exec(s string) { } func main() { - flag.Parse() + if len(os.Args) < 2 { + log.Fatal("Usage: ", os.Args[0], " ") + } dev, err := redbutton.Open() if err != nil { -- cgit v1.2.3