| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package rgb
- import (
- "fmt"
- "os"
- "github.com/spf13/cobra"
- intdevice "github.com/wobkey/rgb/internal/device"
- "github.com/wobkey/rgb/internal/rgb"
- "github.com/wobkey/rgb/internal/via"
- )
- var effectName string
- func NewEffectCmd() *cobra.Command {
- return &cobra.Command{
- Use: "effect <name>",
- Short: "Set RGB effect",
- Long: "Set the RGB lighting effect on the connected keyboard.",
- Args: cobra.ExactArgs(1),
- Run: func(cmd *cobra.Command, args []string) {
- proto, kb, err := OpenDevice()
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %v\n", err)
- os.Exit(1)
- }
- defer proto.Close()
- if err := proto.EnableHandshake(); err != nil {
- fmt.Fprintf(os.Stderr, "Handshake failed: %v\n", err)
- os.Exit(1)
- }
- e, err := rgb.ParseEffect(args[0])
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %v\n", err)
- os.Exit(1)
- }
- availEffects := GetAvailableEffects(kb)
- if availEffects != nil {
- found := false
- for _, ef := range availEffects {
- if ef == e {
- found = true
- break
- }
- }
- if !found {
- fmt.Fprintf(os.Stderr, "Warning: effect %q may not be supported by %s\n", args[0], kb.Name)
- }
- }
- if err := proto.SetValue(via.RGBLight, uint8(rgb.Mode), uint8(e)); err != nil {
- fmt.Fprintf(os.Stderr, "Error setting effect: %v\n", err)
- os.Exit(1)
- }
- fmt.Printf("Effect set to %q\n", args[0])
- },
- }
- }
- func GetAvailableEffects(kb intdevice.Keyboard) []rgb.Effect {
- if kb.Name == "Wobkey Impact 80" {
- return []rgb.Effect{
- rgb.Static, rgb.Breathing, rgb.Rainbow, rgb.RainbowWave,
- rgb.Snake, rgb.Tail, rgb.Gradient,
- }
- }
- return nil
- }
|