diff --git a/firmwares/NINA/FirmwareUpdater.nano_33_iot.ino.bin b/firmwares/NINA/FirmwareUpdater.nano_33_iot.ino.bin new file mode 100755 index 00000000..b3a01ef7 Binary files /dev/null and b/firmwares/NINA/FirmwareUpdater.nano_33_iot.ino.bin differ diff --git a/modules/nina/flasher.go b/modules/nina/flasher.go index c1c4a904..8d85dc07 100644 --- a/modules/nina/flasher.go +++ b/modules/nina/flasher.go @@ -249,18 +249,11 @@ func (flasher *Flasher) Md5sum(data []byte) error { } func OpenFlasher(portName string) (*Flasher, error) { - port, err := utils.OpenSerial(portName) - if err != nil { return nil, &FlasherError{err: "Error opening serial port. " + err.Error()} } - flasher := &Flasher{ - port: port, - } - time.Sleep(2 * time.Second) - - return flasher, err + return &Flasher{port: port}, err } diff --git a/utils/flasher.go b/utils/flasher.go index b02e34f8..c109df17 100644 --- a/utils/flasher.go +++ b/utils/flasher.go @@ -17,13 +17,12 @@ var baudRates = []int{ } func OpenSerial(portName string) (serial.Port, error) { - var err error + var lastError error + for _, baudRate := range baudRates { - mode := &serial.Mode{ - BaudRate: baudRate, - } - port, err := serial.Open(portName, mode) + port, err := serial.Open(portName, &serial.Mode{BaudRate: baudRate}) if err != nil { + lastError = err // try another baudrate continue } @@ -33,8 +32,9 @@ func OpenSerial(portName string) (serial.Port, error) { log.Fatalf("Could not set timeout on serial port: %s", err) return nil, err } + return port, nil } - return nil, err + return nil, lastError } diff --git a/utils/utils.go b/utils/utils.go index e37572dd..d32cc465 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -40,10 +40,10 @@ func GetCompatibleWith(name string) map[string][]firmware { knownBoards := make(map[string]combo) knownBoards["mkr1000"] = combo{match: "(WINC1500)*(3a0)", loader: "WINC1500/Firmware*"} - knownBoards["mkrwifi1010"] = combo{match: "(NINA)", loader: "NINA/Firmware*(mkrwifi)*", avoid: "uno"} - knownBoards["nano_33_iot"] = combo{match: "(NINA)", loader: "NINA/Firmware*(mkrwifi)*", avoid: "uno"} - knownBoards["mkrvidor4000"] = combo{match: "(NINA)", loader: "NINA/Firmware*(mkrvidor)*", avoid: "uno"} - knownBoards["uno2018"] = combo{match: "(NINA)", loader: "NINA/Firmware*(unowifi)*", prefer: "uno", avoid: "mkr"} + knownBoards["mkrwifi1010"] = combo{match: "(NINA)", loader: "NINA/Firmware.*mkrwifi1010.*", avoid: "uno"} + knownBoards["nano_33_iot"] = combo{match: "(NINA)", loader: "NINA/Firmware.*nano_33_iot.*", avoid: "uno"} + knownBoards["mkrvidor4000"] = combo{match: "(NINA)", loader: "NINA/Firmware.*mkrvidor.*", avoid: "uno"} + knownBoards["uno2018"] = combo{match: "(NINA)", loader: "NINA/Firmware.*unowifi.*", prefer: "uno", avoid: "mkr"} knownBoards["mkrnb1500"] = combo{match: "SARA", loader: "SARA/SerialSARAPassthrough*"} listAll := false @@ -55,25 +55,28 @@ func GetCompatibleWith(name string) map[string][]firmware { exePath, _ := os.Executable() root := filepath.Dir(exePath) root = filepath.Join(root, "firmwares") + loader := regexp.MustCompile(knownBoards[name].loader) + fw := regexp.MustCompile(knownBoards[name].match) err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if info.IsDir() { + return nil + } unixPath := filepath.ToSlash(path) parts := strings.Split(unixPath, "/") fancyName := parts[len(parts)-3] + " " + parts[len(parts)-2] - loader := regexp.MustCompile(knownBoards[name].loader) - fw := regexp.MustCompile(knownBoards[name].match) f := firmware{ Path: path, Name: fancyName, IsLoader: loader.MatchString(path) && !listAll, } - if info.IsDir() { - return nil - } folder := filepath.Dir(path) lowerPath, _ := filepath.Rel(root, path) lowerPath = strings.ToLower(lowerPath) _, alreadyPopulated := files[folder] + if strings.HasPrefix(f.Name, "firmwares") && !f.IsLoader { + return nil + } if listAll && !strings.HasPrefix(f.Name, "firmwares") { files[folder] = append(files[folder], f) }