package main import ( "flag" "fmt" "log" "os" ) const defaultBaud = 921600 func usage() { fmt.Fprintf(os.Stderr, "usage: gotool [-port /dev/ttyUSB0] \n") fmt.Fprintf(os.Stderr, " test uses uart.master from bench config when -port is omitted\n\n") fmt.Fprintf(os.Stderr, "commands:\n") fmt.Fprintf(os.Stderr, " version firmware version and git hash\n") fmt.Fprintf(os.Stderr, " clients registered ESP-NOW slaves on the master\n") fmt.Fprintf(os.Stderr, " deadzone get/set accelerometer deadzone (LSB)\n") fmt.Fprintf(os.Stderr, " unicast-test send ESP-NOW unicast test to one slave\n") fmt.Fprintf(os.Stderr, " test run automated scenario (see testdata/)\n\n") flag.PrintDefaults() } func main() { portName := flag.String("port", "", "serial port (e.g. /dev/ttyUSB0)") baud := flag.Int("baud", defaultBaud, "UART baud rate") flag.Parse() if flag.NArg() < 1 { usage() os.Exit(2) } cmd := flag.Arg(0) var runErr error switch cmd { case "test", "autotest": runErr = runTest(*portName, *baud, flag.Args()[1:]) case "version", "clients", "client-info", "deadzone", "accel-deadzone", "unicast-test", "unicast_test": if *portName == "" { fmt.Fprintf(os.Stderr, "command %q requires -port\n\n", cmd) usage() os.Exit(2) } sp, err := openSerial(*portName, *baud) if err != nil { log.Fatalf("open serial: %v", err) } defer sp.Close() switch cmd { case "version": runErr = runVersion(sp) case "clients", "client-info": runErr = runClients(sp) case "deadzone", "accel-deadzone": runErr = runDeadzone(sp, flag.Args()[1:]) case "unicast-test", "unicast_test": runErr = runUnicastTest(sp, flag.Args()[1:]) } default: fmt.Fprintf(os.Stderr, "unknown command %q\n\n", cmd) usage() os.Exit(2) } if runErr != nil { log.Fatal(runErr) } }