main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package main
  2. import (
  3. "embed"
  4. "flag"
  5. "io/fs"
  6. "log"
  7. "net/http"
  8. "os"
  9. )
  10. const (
  11. defaultDevMode = true
  12. configPath = "./config"
  13. usbKvmConfigPath = configPath + "/usbkvm.json"
  14. )
  15. var (
  16. developent = flag.Bool("dev", defaultDevMode, "Enable development mode with local static files")
  17. mode = flag.String("mode", "usbkvm", "Mode of operation: usbkvm, ipkvm or debug")
  18. tool = flag.String("tool", "", "Run debug tool, must be used with -mode=debug")
  19. )
  20. /* Web Server Static Files */
  21. //go:embed www
  22. var embeddedFiles embed.FS
  23. var webfs http.FileSystem
  24. func init() {
  25. // Initiate the web server static files
  26. if *developent {
  27. webfs = http.Dir("./www")
  28. } else {
  29. // Embed the ./www folder and trim the prefix
  30. subFS, err := fs.Sub(embeddedFiles, "www")
  31. if err != nil {
  32. log.Fatal(err)
  33. }
  34. webfs = http.FS(subFS)
  35. }
  36. // Initiate the config folder if not exists
  37. err := os.MkdirAll("./config", 0755)
  38. if err != nil {
  39. log.Fatal("Failed to create config folder:", err)
  40. }
  41. }
  42. func main() {
  43. flag.Parse()
  44. switch *mode {
  45. case "cfgchip":
  46. //Load config file or create default one
  47. kvmCfg, err := loadUsbKvmConfig()
  48. if err != nil {
  49. log.Fatal("Failed to load or create USB KVM config:", err)
  50. }
  51. //Override the baudrate to 9600 for chip configuration
  52. kvmCfg.USBKVMBaudrate = 9600
  53. err = SetupHIDCommunication(kvmCfg)
  54. if err != nil {
  55. log.Fatal(err)
  56. }
  57. case "debug":
  58. err := handle_debug_tool()
  59. if err != nil {
  60. log.Fatal(err)
  61. }
  62. case "ipkvm":
  63. //Check runtime dependencies
  64. err := run_dependency_precheck()
  65. if err != nil {
  66. log.Fatal(err)
  67. }
  68. //Start IP-KVM mode
  69. err = init_ipkvm_mode()
  70. if err != nil {
  71. log.Fatal(err)
  72. }
  73. case "usbkvm":
  74. //Check runtime dependencies
  75. err := run_dependency_precheck()
  76. if err != nil {
  77. log.Fatal(err)
  78. }
  79. //Load config file or create default one
  80. kvmCfg, err := loadUsbKvmConfig()
  81. if err != nil {
  82. log.Fatal("Failed to load or create USB KVM config:", err)
  83. }
  84. //Start USB KVM mode
  85. err = startUsbKvmMode(kvmCfg)
  86. if err != nil {
  87. log.Fatal(err)
  88. }
  89. default:
  90. log.Fatalf("Unknown mode: %s. Supported modes are: usbkvm, capture", *mode)
  91. }
  92. }