device.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package core
  2. import (
  3. "fmt"
  4. "github.com/charmbracelet/log"
  5. "github.com/sstallion/go-hid"
  6. "strings"
  7. )
  8. var Devs []*hid.DeviceInfo
  9. // DeviceEnumerate enumerates HID devices and founds supported device by VID and PID
  10. func DeviceEnumerate() {
  11. readConfig()
  12. err := hid.Enumerate(0x0cf2, 0xa100, func(info *hid.DeviceInfo) error {
  13. log.Infof("Found a %s", info.ProductStr)
  14. Devs = append(Devs, info)
  15. setConfigLightMode(*info)
  16. return nil
  17. })
  18. if err != nil {
  19. log.Fatalf("Error during enumerating HID devices: %v", err)
  20. return
  21. }
  22. }
  23. // Write a packet to USB HID device
  24. func hidWrite(vid uint16, pid uint16, serial string, packet []byte) {
  25. open, err := hid.Open(vid, pid, serial)
  26. if err != nil {
  27. if strings.Contains(fmt.Sprintf("%v", err), "Permission denied") {
  28. log.Fatalf("Please run lianlinux with elevated permissions")
  29. return
  30. }
  31. log.Fatal(fmt.Sprintf("Error during writing to device %x:%x (%s)", vid, pid, serial), "error", err)
  32. return
  33. }
  34. open.Write(packet)
  35. }
  36. // DeviceWrite Write a packet to supported Lian Li device
  37. func DeviceWrite(device hid.DeviceInfo, packet []byte) {
  38. log.Debugf("Packet: %x", packet)
  39. hidWrite(device.VendorID, device.ProductID, device.SerialNbr, packet)
  40. }
  41. func DeviceInitialize() {
  42. if len(Devs) == 0 {
  43. log.Error("No supported devices found")
  44. return
  45. }
  46. log.Info(fmt.Sprintf("Found and configured %d device(s)", len(Devs)))
  47. }