aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-05-21 18:50:45 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-05-21 18:50:45 +0200
commit1cb19c68d8ef3f525c0c051f60240b07054477a1 (patch)
tree9fc4f459358f17d6656fd549d92fc8bb9bee518f
parentbbf61b753c77c76eb2b1afcd441bdb31c6fe19de (diff)
Convert into package
-rw-r--r--poll/main.go21
-rw-r--r--redbutton.go (renamed from main.go)39
2 files changed, 37 insertions, 23 deletions
diff --git a/poll/main.go b/poll/main.go
new file mode 100644
index 0000000..135215f
--- /dev/null
+++ b/poll/main.go
@@ -0,0 +1,21 @@
+package main
+
+import (
+ "fmt"
+ "log"
+
+ "dim13.org/redbutton"
+)
+
+func main() {
+ dev, err := redbutton.Open()
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer dev.Close()
+
+ state := redbutton.PollState(dev)
+ for {
+ fmt.Println(<-state)
+ }
+}
diff --git a/main.go b/redbutton.go
index 68e8705..549ed9d 100644
--- a/main.go
+++ b/redbutton.go
@@ -1,8 +1,7 @@
-package main
+package redbutton
import (
- "fmt"
- "log"
+ "errors"
"time"
"github.com/GeertJohan/go.hid"
@@ -13,50 +12,44 @@ type Button struct {
Lid bool
}
-func GetState(dev *hid.Device) Button {
+func GetState(dev *hid.Device) (Button, error) {
buf := make([]byte, 8)
buf[0] = 0x01
buf[7] = 0x02
if _, err := dev.Write(buf); err != nil {
- log.Fatal(err)
+ return Button{}, err
}
if _, err := dev.ReadTimeout(buf, 200); err != nil {
- log.Fatal(err)
+ return Button{}, err
}
if buf[7] != 0x03 {
- log.Fatal("bad magic")
+ return Button{}, errors.New("bad magic")
}
return Button{
buf[0]&(1<<0) == 0,
buf[0]&(1<<1) == 0,
- }
+ }, nil
}
func PollState(dev *hid.Device) <-chan Button {
- state := make(chan Button)
+ ch := make(chan Button)
go func() {
for {
- state <- GetState(dev)
+ state, err := GetState(dev)
+ if err != nil {
+ panic(err)
+ }
+ ch <- state
time.Sleep(100 * time.Millisecond)
}
}()
- return state
+ return ch
}
-func main() {
- dev, err := hid.Open(0x1D34, 0x000D, "")
- if err != nil {
- log.Fatal(err)
- }
- defer dev.Close()
-
- state := PollState(dev)
-
- for {
- fmt.Println(<-state)
- }
+func Open() (*hid.Device, error) {
+ return hid.Open(0x1D34, 0x000D, "")
}