From fbc5d30ad7860f3f3a09dd74ba39a8c432ab0bb6 Mon Sep 17 00:00:00 2001 From: Zach Eveland Date: Sat, 7 Apr 2012 22:47:07 -0400 Subject: [PATCH] for Leonardo don't return from uploading until the bootloader port disconnects and the sketch port reconnects meant to save users from accidentally opening the bootloader port in Serial Monitor when it is still open immediately after an upload. this is bad for the user because the port dies without notice immediately afterward. --- .../processing/app/debug/AvrdudeUploader.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/processing/app/debug/AvrdudeUploader.java b/app/src/processing/app/debug/AvrdudeUploader.java index 1992e130e..213e17896 100755 --- a/app/src/processing/app/debug/AvrdudeUploader.java +++ b/app/src/processing/app/debug/AvrdudeUploader.java @@ -172,7 +172,29 @@ public class AvrdudeUploader extends Uploader { flushSerialBuffer(); } - return avrdude(commandDownloader); + boolean avrdudeResult = avrdude(commandDownloader); + + // For Leonardo wait until the bootloader serial port disconnects and the sketch serial + // port reconnects (or timeout after a few seconds if the sketch port never comes back). + // Doing this saves users from accidentally opening Serial Monitor on the soon-to-be-orphaned + // bootloader port. + if (true == avrdudeResult && boardPreferences.get("bootloader.path").equals("caterina")) { + try { + Thread.sleep(500); + } catch (InterruptedException ex) { } + long timeout = System.currentTimeMillis() + 2000; + while (timeout > System.currentTimeMillis()) { + List portList = Serial.list(); + if (portList.contains(Preferences.get("serial.port"))) { + break; + } + try { + Thread.sleep(100); + } catch (InterruptedException ex) { } + } + } + + return avrdudeResult; } public boolean burnBootloader() throws RunnerException {