effect.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package rgb
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/spf13/cobra"
  6. intdevice "github.com/wobkey/rgb/internal/device"
  7. "github.com/wobkey/rgb/internal/rgb"
  8. "github.com/wobkey/rgb/internal/via"
  9. )
  10. var effectName string
  11. func NewEffectCmd() *cobra.Command {
  12. return &cobra.Command{
  13. Use: "effect <name>",
  14. Short: "Set RGB effect",
  15. Long: "Set the RGB lighting effect on the connected keyboard.",
  16. Args: cobra.ExactArgs(1),
  17. Run: func(cmd *cobra.Command, args []string) {
  18. proto, kb, err := OpenDevice()
  19. if err != nil {
  20. fmt.Fprintf(os.Stderr, "Error: %v\n", err)
  21. os.Exit(1)
  22. }
  23. defer proto.Close()
  24. e, err := rgb.ParseEffect(args[0])
  25. if err != nil {
  26. fmt.Fprintf(os.Stderr, "Error: %v\n", err)
  27. os.Exit(1)
  28. }
  29. availEffects := GetAvailableEffects(kb)
  30. if availEffects != nil {
  31. found := false
  32. for _, ef := range availEffects {
  33. if ef == e {
  34. found = true
  35. break
  36. }
  37. }
  38. if !found {
  39. fmt.Fprintf(os.Stderr, "Warning: effect %q may not be supported by %s\n", args[0], kb.Name)
  40. }
  41. }
  42. if err := proto.SetValue(via.RGBLight, uint8(rgb.EffectID), uint8(e)); err != nil {
  43. fmt.Fprintf(os.Stderr, "Error setting effect: %v\n", err)
  44. os.Exit(1)
  45. }
  46. fmt.Printf("Effect set to %q\n", args[0])
  47. },
  48. }
  49. }
  50. func GetAvailableEffects(kb intdevice.Keyboard) []rgb.Effect {
  51. if kb.Name == "Wobkey Impact 80" {
  52. return []rgb.Effect{
  53. rgb.Static, rgb.Breathing, rgb.Rainbow, rgb.RainbowWave,
  54. rgb.Snake, rgb.Tail, rgb.Gradient,
  55. }
  56. }
  57. return nil
  58. }