Files
qrun/cmd/decktest/main.go

98 lines
2.0 KiB
Go
Raw Normal View History

package main
import (
"fmt"
"image/color"
"os"
"os/signal"
"syscall"
"qrun/lib/streamdeck"
)
var palette = []color.RGBA{
{220, 50, 50, 255},
{50, 180, 50, 255},
{50, 100, 220, 255},
{220, 160, 30, 255},
{180, 50, 180, 255},
{50, 180, 180, 255},
{220, 120, 50, 255},
{100, 100, 200, 255},
}
func labelForKey(key int) string {
row := key / streamdeck.KeyCols()
col := key % streamdeck.KeyCols()
switch row {
case 0:
return fmt.Sprintf("Ch %d\nSelect", col+1)
case 1:
return fmt.Sprintf("Ch %d\nMute", col+1)
case 2:
return fmt.Sprintf("Ch %d\nSolo", col+1)
case 3:
return fmt.Sprintf("Ch %d\nRec", col+1)
}
return fmt.Sprintf("Key %d", key)
}
func drawKey(dev *streamdeck.Device, key int, bg color.RGBA) {
dim := color.RGBA{bg.R / 3, bg.G / 3, bg.B / 3, 255}
dev.SetKeyText(key, dim, color.White, labelForKey(key))
}
func drawKeyActive(dev *streamdeck.Device, key int, bg color.RGBA) {
dev.SetKeyText(key, bg, color.White, labelForKey(key))
}
func main() {
dev, err := streamdeck.Open()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
defer dev.Close()
fmt.Printf("Connected to: %s (serial: %s)\n", dev.Product(), dev.SerialNumber())
dev.SetBrightness(80)
for i := 0; i < streamdeck.KeyCount(); i++ {
col := i % streamdeck.KeyCols()
drawKey(dev, i, palette[col])
}
active := make([]bool, streamdeck.KeyCount())
keys := make(chan streamdeck.KeyEvent, 64)
go func() {
if err := dev.ReadKeys(keys); err != nil {
fmt.Fprintf(os.Stderr, "Read error: %v\n", err)
}
}()
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
for {
select {
case ev := <-keys:
if !ev.Pressed {
continue
}
col := ev.Key % streamdeck.KeyCols()
active[ev.Key] = !active[ev.Key]
if active[ev.Key] {
drawKeyActive(dev, ev.Key, palette[col])
} else {
drawKey(dev, ev.Key, palette[col])
}
fmt.Printf("Key %d toggled %v\n", ev.Key, active[ev.Key])
case <-sig:
fmt.Println()
return
}
}
}