usbkvm.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package dezukvm
  2. import (
  3. "errors"
  4. "github.com/google/uuid"
  5. "imuslab.com/dezukvm/dezukvmd/mod/kvmaux"
  6. "imuslab.com/dezukvm/dezukvmd/mod/kvmhid"
  7. "imuslab.com/dezukvm/dezukvmd/mod/usbcapture"
  8. )
  9. func (i *UsbKvmDeviceInstance) UUID() string {
  10. return i.uuid
  11. }
  12. func (i *UsbKvmDeviceInstance) Start() error {
  13. if i.Config.USBKVMDevicePath == "" {
  14. return errors.New("USB KVM device path is not specified")
  15. }
  16. if i.Config.USBKVMBaudrate == 0 {
  17. //Use default baudrate if not specified
  18. i.Config.USBKVMBaudrate = 115200
  19. }
  20. /* --------- Start HID Controller --------- */
  21. usbKVM := kvmhid.NewHIDController(&kvmhid.Config{
  22. PortName: i.Config.USBKVMDevicePath,
  23. BaudRate: i.Config.USBKVMBaudrate,
  24. ScrollSensitivity: 0x01, // Set mouse scroll sensitivity
  25. })
  26. //Start the HID controller
  27. err := usbKVM.Connect()
  28. if err != nil {
  29. return err
  30. }
  31. i.usbKVMController = usbKVM
  32. /* --------- Start AuxMCU Controller --------- */
  33. //Check if AuxMCU is configured, if so, start the connection
  34. if i.Config.AuxMCUDevicePath != "" {
  35. if i.Config.AuxMCUBaudrate == 0 {
  36. //Use default baudrate if not specified
  37. i.Config.AuxMCUBaudrate = 115200
  38. }
  39. auxMCU, err := kvmaux.NewAuxOutbandController(i.Config.AuxMCUDevicePath, i.Config.AuxMCUBaudrate)
  40. if err != nil {
  41. return err
  42. }
  43. i.auxMCUController = auxMCU
  44. //Try to get the UUID from the AuxMCU
  45. uuid, err := auxMCU.GetUUID()
  46. if err != nil {
  47. return err
  48. }
  49. i.uuid = uuid
  50. } else {
  51. // Randomly generate a UUIDv4 if AuxMCU is not present
  52. uuid, err := uuid.NewRandom()
  53. if err != nil {
  54. return err
  55. }
  56. i.uuid = uuid.String()
  57. }
  58. /* --------- Start USB Capture Device --------- */
  59. usbCaptureDevice, err := usbcapture.NewInstance(i.captureConfig)
  60. if err != nil {
  61. return err
  62. }
  63. err = usbCaptureDevice.StartVideoCapture(i.videoResoltuionConfig)
  64. if err != nil {
  65. usbCaptureDevice.Close()
  66. return err
  67. }
  68. i.usbCaptureDevice = usbCaptureDevice
  69. return nil
  70. }
  71. func (i *UsbKvmDeviceInstance) Stop() error {
  72. if i.usbKVMController != nil {
  73. i.usbKVMController.Close()
  74. i.usbKVMController = nil
  75. }
  76. if i.auxMCUController != nil {
  77. i.auxMCUController.Close()
  78. i.auxMCUController = nil
  79. }
  80. if i.usbCaptureDevice != nil {
  81. i.usbCaptureDevice.Close()
  82. i.usbCaptureDevice = nil
  83. }
  84. return nil
  85. }
  86. // Remove removes the USB KVM device instance from its parent DezukVM manager.
  87. func (i *UsbKvmDeviceInstance) Remove() error {
  88. return i.parent.RemoveUsbKvmDevice(i.UUID())
  89. }