main.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. err := SetupHIDCommunication()
  47. if err != nil {
  48. log.Fatal(err)
  49. }
  50. case "debug":
  51. err := handle_debug_tool()
  52. if err != nil {
  53. log.Fatal(err)
  54. }
  55. case "ipkvm":
  56. //Check runtime dependencies
  57. err := run_dependency_precheck()
  58. if err != nil {
  59. log.Fatal(err)
  60. }
  61. //Start IP-KVM mode
  62. err = init_ipkvm_mode()
  63. if err != nil {
  64. log.Fatal(err)
  65. }
  66. case "usbkvm":
  67. //Check runtime dependencies
  68. err := run_dependency_precheck()
  69. if err != nil {
  70. log.Fatal(err)
  71. }
  72. //Load config file or create default one
  73. kvmCfg, err := loadUsbKvmConfig()
  74. if err != nil {
  75. log.Fatal("Failed to load or create USB KVM config:", err)
  76. }
  77. //Start USB KVM mode
  78. err = startUsbKvmMode(kvmCfg)
  79. if err != nil {
  80. log.Fatal(err)
  81. }
  82. default:
  83. log.Fatalf("Unknown mode: %s. Supported modes are: usbkvm, capture", *mode)
  84. }
  85. }