From 1cb19c68d8ef3f525c0c051f60240b07054477a1 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 21 May 2015 18:50:45 +0200 Subject: Convert into package --- main.go | 62 ------------------------------------------------------------ poll/main.go | 21 ++++++++++++++++++++ redbutton.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 62 deletions(-) delete mode 100644 main.go create mode 100644 poll/main.go create mode 100644 redbutton.go diff --git a/main.go b/main.go deleted file mode 100644 index 68e8705..0000000 --- a/main.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "fmt" - "log" - "time" - - "github.com/GeertJohan/go.hid" -) - -type Button struct { - Button bool - Lid bool -} - -func GetState(dev *hid.Device) Button { - buf := make([]byte, 8) - buf[0] = 0x01 - buf[7] = 0x02 - - if _, err := dev.Write(buf); err != nil { - log.Fatal(err) - } - - if _, err := dev.ReadTimeout(buf, 200); err != nil { - log.Fatal(err) - } - - if buf[7] != 0x03 { - log.Fatal("bad magic") - } - - return Button{ - buf[0]&(1<<0) == 0, - buf[0]&(1<<1) == 0, - } -} - -func PollState(dev *hid.Device) <-chan Button { - state := make(chan Button) - go func() { - for { - state <- GetState(dev) - time.Sleep(100 * time.Millisecond) - } - }() - return state -} - -func main() { - dev, err := hid.Open(0x1D34, 0x000D, "") - if err != nil { - log.Fatal(err) - } - defer dev.Close() - - state := PollState(dev) - - for { - fmt.Println(<-state) - } -} 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/redbutton.go b/redbutton.go new file mode 100644 index 0000000..549ed9d --- /dev/null +++ b/redbutton.go @@ -0,0 +1,55 @@ +package redbutton + +import ( + "errors" + "time" + + "github.com/GeertJohan/go.hid" +) + +type Button struct { + Button bool + Lid bool +} + +func GetState(dev *hid.Device) (Button, error) { + buf := make([]byte, 8) + buf[0] = 0x01 + buf[7] = 0x02 + + if _, err := dev.Write(buf); err != nil { + return Button{}, err + } + + if _, err := dev.ReadTimeout(buf, 200); err != nil { + return Button{}, err + } + + if buf[7] != 0x03 { + 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 { + ch := make(chan Button) + go func() { + for { + state, err := GetState(dev) + if err != nil { + panic(err) + } + ch <- state + time.Sleep(100 * time.Millisecond) + } + }() + return ch +} + +func Open() (*hid.Device, error) { + return hid.Open(0x1D34, 0x000D, "") +} -- cgit v1.2.3