123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package main
- import (
- "embed"
- "flag"
- "io/fs"
- "log"
- "net/http"
- "imuslab.com/remdeskvm/remdeskd/mod/remdesaux"
- "imuslab.com/remdeskvm/remdeskd/mod/remdeshid"
- "imuslab.com/remdeskvm/remdeskd/mod/usbcapture"
- )
- 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("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 */
- //go:embed www
- var embeddedFiles embed.FS
- var webfs http.FileSystem
- func init() {
- // Initiate the web server static files
- if *developent {
- webfs = http.Dir("./www")
- } else {
- // Embed the ./www folder and trim the prefix
- subFS, err := fs.Sub(embeddedFiles, "www")
- if err != nil {
- log.Fatal(err)
- }
- webfs = http.FS(subFS)
- }
- }
- func main() {
- flag.Parse()
- // Initiate the HID controller
- usbKVM = remdeshid.NewHIDController(&remdeshid.Config{
- PortName: *usbKVMDeviceName,
- BaudRate: *usbKVMBaudRate,
- ScrollSensitivity: 0x01, // Set mouse scroll sensitivity
- })
- switch *mode {
- case "cfgchip":
- err := SetupHIDCommunication()
- if err != nil {
- log.Fatal(err)
- }
- case "debug":
- result, err := discoverUsbKvmSubtree()
- if err != nil {
- log.Fatal(err)
- }
- for i, dev := range result {
- log.Printf("Device %d:\n", i)
- log.Printf(" - USB KVM Device: %s\n", dev.USBKVMDevicePath)
- log.Printf(" - Aux MCU Device: %s\n", dev.AuxMCUDevicePath)
- for _, cap := range dev.CaptureDevicePaths {
- log.Printf(" - Capture Device: %s\n", cap)
- }
- for _, snd := range dev.AlsaDevicePaths {
- log.Printf(" - ALSA Device: %s\n", snd)
- }
- }
- case "usbkvm":
- err := startUsbKvmMode()
- if err != nil {
- log.Fatal(err)
- }
- case "list-audio-devices":
- log.Println("Starting in List Audio Devices mode...")
- //Get the audio devices
- path, err := usbcapture.FindHDMICapturePCMPath()
- if err != nil {
- log.Fatalf("Failed to find HDMI capture PCM path: %v", err)
- }
- log.Printf("Found HDMI capture PCM path: %s\n", path)
- //List all audio capture devices
- captureDevs, err := usbcapture.ListCaptureDevices()
- if err != nil {
- log.Fatalf("Failed to list capture devices: %v", err)
- }
- log.Println("Available audio capture devices:")
- for _, dev := range captureDevs {
- log.Printf(" - %s\n", dev)
- }
- default:
- log.Fatalf("Unknown mode: %s. Supported modes are: usbkvm, capture", *mode)
- }
- }
|