main: use auto-retry (up to 10 seconds) to locate MSD for UF2 and HEX flashing

Signed-off-by: deadprogram <ron@hybridgroup.com>
Этот коммит содержится в:
deadprogram 2020-05-23 08:34:47 +02:00 коммит произвёл Ayke
родитель b92fad8da6
коммит 5e2a8024a3

22
main.go
Просмотреть файл

@ -491,6 +491,8 @@ func touchSerialPortAt1200bps(port string) (err error) {
return fmt.Errorf("opening port: %s", err) return fmt.Errorf("opening port: %s", err)
} }
const maxMSDRetries = 10
func flashUF2UsingMSD(volume, tmppath string) error { func flashUF2UsingMSD(volume, tmppath string) error {
// find standard UF2 info path // find standard UF2 info path
var infoPath string var infoPath string
@ -507,10 +509,18 @@ func flashUF2UsingMSD(volume, tmppath string) error {
infoPath = path + "/INFO_UF2.TXT" infoPath = path + "/INFO_UF2.TXT"
} }
d, err := filepath.Glob(infoPath) var d []string
var err error
for i := 0; i < maxMSDRetries; i++ {
d, err = filepath.Glob(infoPath)
if err != nil { if err != nil {
return err return err
} }
if d != nil {
break
}
time.Sleep(1 * time.Second)
}
if d == nil { if d == nil {
return errors.New("unable to locate UF2 device: " + volume) return errors.New("unable to locate UF2 device: " + volume)
} }
@ -534,10 +544,18 @@ func flashHexUsingMSD(volume, tmppath string) error {
destPath = path + "/" destPath = path + "/"
} }
d, err := filepath.Glob(destPath) var d []string
var err error
for i := 0; i < maxMSDRetries; i++ {
d, err = filepath.Glob(destPath)
if err != nil { if err != nil {
return err return err
} }
if d != nil {
break
}
time.Sleep(1 * time.Second)
}
if d == nil { if d == nil {
return errors.New("unable to locate device: " + volume) return errors.New("unable to locate device: " + volume)
} }