From 54b7b94464aed137e7c16d8570dc0583b5d957db Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 31 Aug 2023 09:59:42 +0200 Subject: [PATCH 1/4] If the upload port-detector fails detection, fallback to the user-provided port This will ensure that a port is always returned. --- commands/upload/upload.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commands/upload/upload.go b/commands/upload/upload.go index 75f8aae9238..2552a02258b 100644 --- a/commands/upload/upload.go +++ b/commands/upload/upload.go @@ -514,7 +514,8 @@ func runProgramAction(pme *packagemanager.Explorer, updatedPort := updatedUploadPort.Await() if updatedPort == nil { - return nil, nil + // If the algorithms can not detect the new port, fallback to the user-provided port. + return userPort, nil } return updatedPort.ToRPC(), nil } From b4c02b901f57a9863f7fade396470ebc0b4e0194 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 31 Aug 2023 10:42:47 +0200 Subject: [PATCH 2/4] Increased debug level --- commands/upload/upload.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/commands/upload/upload.go b/commands/upload/upload.go index 2552a02258b..5fe21089848 100644 --- a/commands/upload/upload.go +++ b/commands/upload/upload.go @@ -527,7 +527,7 @@ func detectUploadPort( result f.Future[*discovery.Port], ) { log := logrus.WithField("task", "port_detection") - log.Tracef("Detecting new board port after upload") + log.Debugf("Detecting new board port after upload") candidate := uploadPort.Clone() defer func() { @@ -543,11 +543,11 @@ func detectUploadPort( return } if candidate != nil && ev.Type == "remove" && ev.Port.Equals(candidate) { - log.WithField("event", ev).Trace("User-specified port has been disconnected, forcing wait for upload port") + log.WithField("event", ev).Debug("User-specified port has been disconnected, forcing wait for upload port") waitForUploadPort = true candidate = nil } else { - log.WithField("event", ev).Trace("Ignored watcher event before upload") + log.WithField("event", ev).Debug("Ignored watcher event before upload") } continue case <-uploadCtx.Done(): @@ -569,17 +569,17 @@ func detectUploadPort( return } if candidate != nil && ev.Type == "remove" && candidate.Equals(ev.Port) { - log.WithField("event", ev).Trace("Candidate port is no longer available") + log.WithField("event", ev).Debug("Candidate port is no longer available") candidate = nil if !waitForUploadPort { waitForUploadPort = true timeout = time.After(5 * time.Second) - log.Trace("User-specified port has been disconnected, now waiting for upload port, timeout extended by 5 seconds") + log.Debug("User-specified port has been disconnected, now waiting for upload port, timeout extended by 5 seconds") } continue } if ev.Type != "add" { - log.WithField("event", ev).Trace("Ignored non-add event") + log.WithField("event", ev).Debug("Ignored non-add event") continue } @@ -602,21 +602,21 @@ func detectUploadPort( evPortPriority := portPriority(ev.Port) candidatePriority := portPriority(candidate) if evPortPriority <= candidatePriority { - log.WithField("event", ev).Tracef("New upload port candidate is worse than the current one (prio=%d)", evPortPriority) + log.WithField("event", ev).Debugf("New upload port candidate is worse than the current one (prio=%d)", evPortPriority) continue } - log.WithField("event", ev).Tracef("Found new upload port candidate (prio=%d)", evPortPriority) + log.WithField("event", ev).Debugf("Found new upload port candidate (prio=%d)", evPortPriority) candidate = ev.Port // If the current candidate have the desired HW-ID return it quickly. if candidate.HardwareID == ev.Port.HardwareID { timeout = time.After(time.Second) - log.Trace("New candidate port match the desired HW ID, timeout reduced to 1 second.") + log.Debug("New candidate port match the desired HW ID, timeout reduced to 1 second.") continue } case <-timeout: - log.WithField("selected_port", candidate).Trace("Timeout waiting for candidate port") + log.WithField("selected_port", candidate).Debug("Timeout waiting for candidate port") return } } From 7c77ed242383e416ff8748884a64474f73932911 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 31 Aug 2023 10:45:02 +0200 Subject: [PATCH 3/4] Extend timeout if candidate port is lost in any case Even if `waitForUploadPort` is true, we should extend the timeout to allow USB enumeration to complete. In this case we extend by only 1 second instead of 5. --- commands/upload/upload.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/commands/upload/upload.go b/commands/upload/upload.go index 5fe21089848..bc7aafe2067 100644 --- a/commands/upload/upload.go +++ b/commands/upload/upload.go @@ -575,6 +575,9 @@ func detectUploadPort( waitForUploadPort = true timeout = time.After(5 * time.Second) log.Debug("User-specified port has been disconnected, now waiting for upload port, timeout extended by 5 seconds") + } else { + timeout = time.After(time.Second) + log.Debug("Candidate port has been disconnected, timeout extended by 1 second") } continue } From 0ff1377aced6a59fa3c583718585194773ed9219 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 31 Aug 2023 11:37:37 +0200 Subject: [PATCH 4/4] Revert "Extend timeout if candidate port is lost in any case" This reverts commit 7c77ed242383e416ff8748884a64474f73932911. The latest commit is not necessary since the detector has already 5 seconds of timeout. --- commands/upload/upload.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/commands/upload/upload.go b/commands/upload/upload.go index bc7aafe2067..5fe21089848 100644 --- a/commands/upload/upload.go +++ b/commands/upload/upload.go @@ -575,9 +575,6 @@ func detectUploadPort( waitForUploadPort = true timeout = time.After(5 * time.Second) log.Debug("User-specified port has been disconnected, now waiting for upload port, timeout extended by 5 seconds") - } else { - timeout = time.After(time.Second) - log.Debug("Candidate port has been disconnected, timeout extended by 1 second") } continue }