Poll for BOOTSEL readiness instead of fixed sleep, load with -x
This commit is contained in:
@@ -116,7 +116,19 @@ func run(buildDir string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
time.Sleep(2 * time.Second)
|
for i := range 2 {
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
errs[i] = picotool.WaitForBootsel(serials[i], 10*time.Second)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
for i, err := range errs {
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("wait %s: %w", serials[i], err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uf2s := []string{
|
uf2s := []string{
|
||||||
filepath.Join(buildDir, "picomap.uf2"),
|
filepath.Join(buildDir, "picomap.uf2"),
|
||||||
@@ -138,21 +150,6 @@ func run(buildDir string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("Rebooting...")
|
|
||||||
for i := range 2 {
|
|
||||||
wg.Add(1)
|
|
||||||
go func() {
|
|
||||||
defer wg.Done()
|
|
||||||
errs[i] = picotool.Reboot(serials[i])
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
wg.Wait()
|
|
||||||
for i, err := range errs {
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("reboot %s: %w", serials[i], err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Done.")
|
fmt.Println("Done.")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,23 @@ package picotool
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func WaitForBootsel(serial string, timeout time.Duration) error {
|
||||||
|
deadline := time.Now().Add(timeout)
|
||||||
|
for time.Now().Before(deadline) {
|
||||||
|
cmd := exec.Command("picotool", "info", "--ser", serial)
|
||||||
|
if err := cmd.Run(); err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("device %s not found in BOOTSEL after %v", serial, timeout)
|
||||||
|
}
|
||||||
|
|
||||||
func Load(uf2Path string, serial string) error {
|
func Load(uf2Path string, serial string) error {
|
||||||
cmd := exec.Command("picotool", "load", uf2Path, "--ser", serial)
|
cmd := exec.Command("picotool", "load", uf2Path, "-x", "--ser", serial)
|
||||||
out, err := cmd.CombinedOutput()
|
out, err := cmd.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("picotool load: %w\n%s", err, out)
|
return fmt.Errorf("picotool load: %w\n%s", err, out)
|
||||||
|
|||||||
Reference in New Issue
Block a user