package main import ( "flag" "fmt" "log" "net/http" "os" cfgpkg "github.com/jan/fm-rds-tx/internal/config" ctrlpkg "github.com/jan/fm-rds-tx/internal/control" drypkg "github.com/jan/fm-rds-tx/internal/dryrun" ) func main() { configPath := flag.String("config", "", "path to JSON config") printConfig := flag.Bool("print-config", false, "print effective config and exit") dryRun := flag.Bool("dry-run", false, "run no-hardware dry-run output") dryOutput := flag.String("dry-output", "-", "dry-run output path or - for stdout") flag.Parse() cfg, err := cfgpkg.Load(*configPath) if err != nil { log.Fatalf("load config: %v", err) } if *printConfig { fmt.Printf("backend=%s freq=%.1fMHz stereo=%t rds=%t listen=%s\n", cfg.Backend.Kind, cfg.FM.FrequencyMHz, cfg.FM.StereoEnabled, cfg.RDS.Enabled, cfg.Control.ListenAddress) return } if *dryRun { frame := drypkg.Generate(cfg) if err := drypkg.WriteJSON(*dryOutput, frame); err != nil { log.Fatalf("dry-run failed: %v", err) } if *dryOutput != "" && *dryOutput != "-" { fmt.Fprintf(os.Stderr, "dry run frame written to %s\n", *dryOutput) } return } srv := ctrlpkg.NewServer(cfg) log.Printf("fm-rds-tx listening on %s", cfg.Control.ListenAddress) log.Fatal(http.ListenAndServe(cfg.Control.ListenAddress, srv.Handler())) }