package main import ( "fmt" "os" ) func runOTA(sp *serialPort, args []string) error { if len(args) < 1 { return fmt.Errorf("usage: ota ") } data, err := os.ReadFile(args[0]) if err != nil { return err } sp.mu.Lock() defer sp.mu.Unlock() m := &managedSerial{quiet: false, sp: sp} return runOTAOnPortUnlocked(m, data, func(p OTAProgress) { switch p.Phase { case "preparing", "ready": fmt.Println(p.Message) case "uploading": if p.Percent%10 == 0 { fmt.Printf(" %s (%d%%)\n", p.Message, p.Percent) } case "done", "error": fmt.Println(p.Message) } }) }