aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-05-21 23:42:09 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-05-21 23:42:09 +0200
commitc6d0083a853f00cd8f0df5567752478ff66eefab (patch)
treee6ebc3131886779970c989a6fab247764ba6438f
parented682fbbf35a2aa9df5eedce29bea0cf37f4782b (diff)
Simplify
-rw-r--r--redbutton.go23
-rw-r--r--runcmd/main.go16
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], " <command>")
+ }
dev, err := redbutton.Open()
if err != nil {