123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package dezukvm
- import (
- "errors"
- "github.com/google/uuid"
- "imuslab.com/dezukvm/dezukvmd/mod/kvmaux"
- "imuslab.com/dezukvm/dezukvmd/mod/kvmhid"
- "imuslab.com/dezukvm/dezukvmd/mod/usbcapture"
- )
- func (i *UsbKvmDeviceInstance) UUID() string {
- return i.uuid
- }
- func (i *UsbKvmDeviceInstance) Start() error {
- if i.Config.USBKVMDevicePath == "" {
- return errors.New("USB KVM device path is not specified")
- }
- if i.Config.USBKVMBaudrate == 0 {
- //Use default baudrate if not specified
- i.Config.USBKVMBaudrate = 115200
- }
- /* --------- Start HID Controller --------- */
- usbKVM := kvmhid.NewHIDController(&kvmhid.Config{
- PortName: i.Config.USBKVMDevicePath,
- BaudRate: i.Config.USBKVMBaudrate,
- ScrollSensitivity: 0x01, // Set mouse scroll sensitivity
- })
- //Start the HID controller
- err := usbKVM.Connect()
- if err != nil {
- return err
- }
- i.usbKVMController = usbKVM
- /* --------- Start AuxMCU Controller --------- */
- //Check if AuxMCU is configured, if so, start the connection
- if i.Config.AuxMCUDevicePath != "" {
- if i.Config.AuxMCUBaudrate == 0 {
- //Use default baudrate if not specified
- i.Config.AuxMCUBaudrate = 115200
- }
- auxMCU, err := kvmaux.NewAuxOutbandController(i.Config.AuxMCUDevicePath, i.Config.AuxMCUBaudrate)
- if err != nil {
- return err
- }
- i.auxMCUController = auxMCU
- //Try to get the UUID from the AuxMCU
- uuid, err := auxMCU.GetUUID()
- if err != nil {
- return err
- }
- i.uuid = uuid
- } else {
- // Randomly generate a UUIDv4 if AuxMCU is not present
- uuid, err := uuid.NewRandom()
- if err != nil {
- return err
- }
- i.uuid = uuid.String()
- }
- /* --------- Start USB Capture Device --------- */
- usbCaptureDevice, err := usbcapture.NewInstance(i.captureConfig)
- if err != nil {
- return err
- }
- err = usbCaptureDevice.StartVideoCapture(i.videoResoltuionConfig)
- if err != nil {
- usbCaptureDevice.Close()
- return err
- }
- i.usbCaptureDevice = usbCaptureDevice
- return nil
- }
- func (i *UsbKvmDeviceInstance) Stop() error {
- if i.usbKVMController != nil {
- i.usbKVMController.Close()
- i.usbKVMController = nil
- }
- if i.auxMCUController != nil {
- i.auxMCUController.Close()
- i.auxMCUController = nil
- }
- if i.usbCaptureDevice != nil {
- i.usbCaptureDevice.Close()
- i.usbCaptureDevice = nil
- }
- return nil
- }
- // Remove removes the USB KVM device instance from its parent DezukVM manager.
- func (i *UsbKvmDeviceInstance) Remove() error {
- return i.parent.RemoveUsbKvmDevice(i.UUID())
- }
|