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 --- redbutton.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 redbutton.go (limited to 'redbutton.go') 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