|
@@ -11,6 +11,7 @@ import (
|
|
|
"syscall"
|
|
|
"time"
|
|
|
|
|
|
+ "imuslab.com/remdeskvm/remdeskd/mod/remdesaux"
|
|
|
"imuslab.com/remdeskvm/remdeskd/mod/remdeshid"
|
|
|
"imuslab.com/remdeskvm/remdeskd/mod/usbcapture"
|
|
|
)
|
|
@@ -18,13 +19,18 @@ import (
|
|
|
const defaultDevMode = true
|
|
|
|
|
|
var (
|
|
|
- developent = flag.Bool("dev", defaultDevMode, "Enable development mode with local static files")
|
|
|
- mode = flag.String("mode", "usbkvm", "Mode of operation: kvm or capture")
|
|
|
- usbKVMDeviceName = flag.String("usbkvm", "/dev/ttyUSB0", "USB KVM device file path")
|
|
|
- usbKVMBaudRate = flag.Int("baudrate", 115200, "USB KVM baud rate")
|
|
|
- captureDeviceName = flag.String("capture", "/dev/video0", "Video capture device file path")
|
|
|
- usbKVM *remdeshid.Controller
|
|
|
- videoCapture *usbcapture.Instance
|
|
|
+ developent = flag.Bool("dev", defaultDevMode, "Enable development mode with local static files")
|
|
|
+ mode = flag.String("mode", "usbkvm", "Mode of operation: kvm or capture")
|
|
|
+ usbKVMDeviceName = flag.String("usbhid", "/dev/ttyUSB0", "USB KVM device file path")
|
|
|
+ usbAuxilaryDeviceName = flag.String("auxmcu", "/dev/ttyACM0", "USB Auxiliary MCU device file path")
|
|
|
+ usbKVMBaudRate = flag.Int("baudrate", 115200, "USB KVM baud rate")
|
|
|
+ usbAuxBaudRate = flag.Int("auxbaudrate", 115200, "USB Auxiliary MCU baud rate")
|
|
|
+ captureDeviceName = flag.String("capture", "/dev/video0", "Video capture device file path")
|
|
|
+
|
|
|
+ /* Internal Modules */
|
|
|
+ usbKVM *remdeshid.Controller
|
|
|
+ auxMCU *remdesaux.AuxMcu
|
|
|
+ videoCapture *usbcapture.Instance
|
|
|
)
|
|
|
|
|
|
/* Web Server Static Files */
|
|
@@ -91,6 +97,20 @@ func main() {
|
|
|
log.Fatal(err)
|
|
|
}
|
|
|
|
|
|
+ //Start auxiliary MCU connections
|
|
|
+ auxMCU, err = remdesaux.NewAuxOutbandController(*usbAuxilaryDeviceName, *usbAuxBaudRate)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //Try get the UUID from the auxiliary MCU
|
|
|
+ uuid, err := auxMCU.GetUUID()
|
|
|
+ if err != nil {
|
|
|
+ log.Println("Get UUID failed:", err)
|
|
|
+ } else {
|
|
|
+ log.Println("Auxiliary MCU UUID:", uuid)
|
|
|
+ }
|
|
|
+
|
|
|
// Initiate the video capture device
|
|
|
videoCapture, err = usbcapture.NewInstance(&usbcapture.Config{
|
|
|
DeviceName: *captureDeviceName,
|
|
@@ -121,9 +141,17 @@ func main() {
|
|
|
go func() {
|
|
|
<-c
|
|
|
log.Println("Shutting down usbKVM...")
|
|
|
- //usbKVM.Close() //To fix close stuck layer
|
|
|
+ if usbKVM != nil {
|
|
|
+ //usbKVM.Close()
|
|
|
+ }
|
|
|
+
|
|
|
+ if auxMCU != nil {
|
|
|
+ auxMCU.Close()
|
|
|
+ }
|
|
|
log.Println("Shutting down capture device...")
|
|
|
- videoCapture.Close()
|
|
|
+ if videoCapture != nil {
|
|
|
+ videoCapture.Close()
|
|
|
+ }
|
|
|
os.Exit(0)
|
|
|
}()
|
|
|
|
|
@@ -132,6 +160,15 @@ func main() {
|
|
|
http.HandleFunc("/hid", usbKVM.HIDWebSocketHandler)
|
|
|
http.HandleFunc("/audio", videoCapture.AudioStreamingHandler)
|
|
|
http.HandleFunc("/stream", videoCapture.ServeVideoStream)
|
|
|
+
|
|
|
+ http.HandleFunc("/aux/switchusbkvm", auxMCU.HandleSwitchUSBToKVM)
|
|
|
+ http.HandleFunc("/aux/switchusbremote", auxMCU.HandleSwitchUSBToRemote)
|
|
|
+ http.HandleFunc("/aux/presspower", auxMCU.HandlePressPowerButton)
|
|
|
+ http.HandleFunc("/aux/releasepower", auxMCU.HandleReleasePowerButton)
|
|
|
+ http.HandleFunc("/aux/pressreset", auxMCU.HandlePressResetButton)
|
|
|
+ http.HandleFunc("/aux/releasereset", auxMCU.HandleReleaseResetButton)
|
|
|
+ http.HandleFunc("/aux/getuuid", auxMCU.HandleGetUUID)
|
|
|
+
|
|
|
addr := ":9000"
|
|
|
log.Printf("Serving on http://localhost%s\n", addr)
|
|
|
log.Fatal(http.ListenAndServe(addr, nil))
|