aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-09-28 23:22:36 +0200
committerDimitri Sokolyuk <demon@dim13.org>2018-09-28 23:22:36 +0200
commit728d02790d3c961083ea23cb8cd3d44e465a720c (patch)
tree2a189655e66e76663521804b9e28054c9ff42762
parent6a060981504cc5e433145a06ce218d5810e915c2 (diff)
remove frame type
-rw-r--r--blinkstick.go62
-rw-r--r--cmd/blinkstick/main.go10
-rw-r--r--progress.go10
3 files changed, 45 insertions, 37 deletions
diff --git a/blinkstick.go b/blinkstick.go
index c321683..34adede 100644
--- a/blinkstick.go
+++ b/blinkstick.go
@@ -1,9 +1,7 @@
// Package blinckstick implements BlinkStick Stripe HID interface
-
-package blinkstick // import "dim13.org/blinkstick"
+package blinkstick
import (
- "bytes"
"image/color"
"io"
)
@@ -20,41 +18,51 @@ import (
9: LED Frame [Channel, [G, R, B][0..63]]
*/
-// Frame colors
-type Frame [8]color.Color
-
-func rgb(c color.Color) (uint8, uint8, uint8) {
+// SetIndex sets color by index
+func SetIndex(w io.Writer, i int, c color.Color) {
if c == nil {
- return 0, 0, 0
+ c = color.Black
}
r, g, b, _ := c.RGBA()
- return uint8(r >> 8), uint8(g >> 8), uint8(b >> 8)
+ w.Write([]byte{5, 0, uint8(i), uint8(r >> 8), uint8(g >> 8), uint8(b >> 8)})
}
-// SetIndex sets color by index
-func SetIndex(w io.Writer, i int, c color.Color) {
- buf := bytes.NewBuffer([]byte{5, 0, byte(i)})
- r, g, b := rgb(c)
- buf.Write([]byte{r, g, b})
- io.Copy(w, buf)
-}
-
-// Set sets color as frame
-func Set(w io.Writer, frame Frame) {
- buf := bytes.NewBuffer([]byte{6, 0})
- for _, c := range frame {
- r, g, b := rgb(c)
- buf.Write([]byte{g, r, b})
+func Set(w io.Writer, colors ...color.Color) {
+ var buf []byte
+ switch {
+ case len(colors) <= 8:
+ buf = make([]byte, 3*8+2)
+ buf[0] = 6
+ case len(colors) <= 16:
+ buf = make([]byte, 3*16+2)
+ buf[0] = 7
+ case len(colors) <= 32:
+ buf = make([]byte, 3*32+2)
+ buf[0] = 8
+ case len(colors) <= 64:
+ buf = make([]byte, 3*64+2)
+ buf[0] = 9
+ default:
+ panic("too many colors")
+ }
+ for i, c := range colors {
+ if c == nil {
+ c = color.Black
+ }
+ r, g, b, _ := c.RGBA()
+ buf[3*i+2] = uint8(g >> 8)
+ buf[3*i+3] = uint8(r >> 8)
+ buf[3*i+4] = uint8(b >> 8)
}
- io.Copy(w, buf)
+ w.Write(buf)
}
-// SetAll sets all LEDs to same color
+// SetAll sets all (8) LEDs to same color
func SetAll(w io.Writer, c color.Color) {
- Set(w, Frame{c, c, c, c, c, c, c, c})
+ Set(w, c, c, c, c, c, c, c, c)
}
// Off all LEDs
func Off(w io.Writer) {
- Set(w, Frame{})
+ SetAll(w, color.Black)
}
diff --git a/cmd/blinkstick/main.go b/cmd/blinkstick/main.go
index 86939e0..ad80246 100644
--- a/cmd/blinkstick/main.go
+++ b/cmd/blinkstick/main.go
@@ -9,8 +9,8 @@ import (
"dim13.org/blinkstick"
)
-func newBinary(n int, c color.Color) blinkstick.Frame {
- var s blinkstick.Frame
+func newBinary(n int, c color.Color) []color.Color {
+ s := make([]color.Color, 8)
for i := 0; i < 8; i++ {
if n&(1<<uint(i)) != 0 {
s[i] = c
@@ -19,8 +19,8 @@ func newBinary(n int, c color.Color) blinkstick.Frame {
return s
}
-func newTwiddle(n int, c color.Color) blinkstick.Frame {
- var s blinkstick.Frame
+func newTwiddle(n int, c color.Color) []color.Color {
+ s := make([]color.Color, 8)
n %= 14
if n < 8 {
s[n] = c
@@ -57,7 +57,7 @@ func main() {
for i := 0; ; i++ {
c := palette.Plan9[i%256]
f := newTwiddle(i, c)
- blinkstick.Set(dev, f)
+ blinkstick.Set(dev, f...)
time.Sleep(time.Second / 14)
}
}
diff --git a/progress.go b/progress.go
index f15e2ea..76374b6 100644
--- a/progress.go
+++ b/progress.go
@@ -15,7 +15,7 @@ var (
)
type Progress struct {
- f Frame
+ //f Frame
start time.Time
soft time.Duration
hard time.Duration
@@ -36,12 +36,12 @@ func (p *Progress) Update(w io.Writer) {
done := time.Since(p.start)
switch {
case p.hard < done:
- p.f[p.n] = red
+ //p.f[p.n] = red
case p.soft < done:
- p.f[p.n] = yellow
+ //p.f[p.n] = yellow
default:
- p.f[p.n] = green
+ //p.f[p.n] = green
}
- Set(w, p.f)
+ //Set(w, p.f)
p.n = (p.n + 1) % 8
}