From de412656ec8116af3c9b252c3bb12325a6a177ef Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Mon, 1 Feb 2016 15:53:09 -0500 Subject: [PATCH 1/3] Increase wait for upload port timeout to 5s on all platforms OS X 10.11 seems to be slower, increasing timeout to 5s on all platforms to keep things simple. --- .../cc/arduino/packages/uploaders/SerialUploader.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java index 971bfb8c6..4ad990fa9 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java @@ -247,11 +247,10 @@ public class SerialUploader extends Uploader { Thread.sleep(250); elapsed += 250; - // On Windows, it can take a long time for the port to disappear and - // come back, so use a longer time out before assuming that the - // selected - // port is the bootloader (not the sketch). - if (((!OSUtils.isWindows() && elapsed >= 500) || elapsed >= 5000) && now.contains(uploadPort)) { + // On Windows and OS X, it can take a few seconds for the port to disappear and + // come back, so use a time out before assuming that the selected port is the + // bootloader (not the sketch). + if (elapsed >= 5000 && now.contains(uploadPort)) { if (verbose) System.out.println("Uploading using selected port: " + uploadPort); return uploadPort; From 7a535d9c40e3b58c6ed2fb3babd598df9ec92838 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Mon, 29 Feb 2016 13:01:11 -0500 Subject: [PATCH 2/3] Add OS X specific delay after waiting for upload port, to prevent "Resource busy" errors on open --- .../src/cc/arduino/packages/uploaders/SerialUploader.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java index 4ad990fa9..30f6fbdf3 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java @@ -136,6 +136,12 @@ public class SerialUploader extends Uploader { // it happened within 250 ms. So we wait until the reset should // have already occured before we start scanning. actualUploadPort = waitForUploadPort(userSelectedUploadPort, before); + + if (OSUtils.isMacOS()) { + // on OS X, if the port is opened too quickly after it is detected, + // a "Resource busy" error occurs, add a delay to workaround this + Thread.sleep(250); + } } } catch (SerialException e) { throw new RunnerException(e); From 7cb1399381219952f752f3ea43ad1d83f2139fee Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Thu, 10 Mar 2016 09:44:24 -0500 Subject: [PATCH 3/3] Apply extra 250ms after waitForUploadPort to all platforms --- .../cc/arduino/packages/uploaders/SerialUploader.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java index 30f6fbdf3..38ea95784 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java @@ -136,12 +136,11 @@ public class SerialUploader extends Uploader { // it happened within 250 ms. So we wait until the reset should // have already occured before we start scanning. actualUploadPort = waitForUploadPort(userSelectedUploadPort, before); - - if (OSUtils.isMacOS()) { - // on OS X, if the port is opened too quickly after it is detected, - // a "Resource busy" error occurs, add a delay to workaround this - Thread.sleep(250); - } + + // on OS X, if the port is opened too quickly after it is detected, + // a "Resource busy" error occurs, add a delay to workaround this, + // apply to other platforms as well. + Thread.sleep(250); } } catch (SerialException e) { throw new RunnerException(e);