1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-17 22:23:10 +03:00

SerialMonitor suspend/resume: dealing with boards that change serial port

between uploads. Fixes #3255
Fixed a missing status management, leading IDE to believe Serial Monitor
was opened while it was not. See #3268
This commit is contained in:
Federico Fissore
2015-06-01 11:27:52 +02:00
parent 740a14e638
commit e55d4145d0
7 changed files with 114 additions and 96 deletions

View File

@ -110,8 +110,9 @@ public class SerialUploader extends Uploader {
t = prefs.get("upload.wait_for_upload_port");
boolean waitForUploadPort = (t != null) && t.equals("true");
String uploadPort = prefs.getOrExcept("serial.port");
if (doTouch) {
String uploadPort = prefs.getOrExcept("serial.port");
try {
// Toggle 1200 bps on selected serial port to force board reset.
List<String> before = Serial.list();
@ -135,26 +136,23 @@ public class SerialUploader extends Uploader {
throw new RunnerException(e.getMessage());
}
prefs.put("serial.port", uploadPort);
if (uploadPort.startsWith("/dev/"))
if (uploadPort.startsWith("/dev/")) {
prefs.put("serial.port.file", uploadPort.substring(5));
else
} else {
prefs.put("serial.port.file", uploadPort);
}
}
prefs.put("build.path", buildPath);
prefs.put("build.project_name", className);
if (verbose)
if (verbose) {
prefs.put("upload.verbose", prefs.getOrExcept("upload.params.verbose"));
else
} else {
prefs.put("upload.verbose", prefs.getOrExcept("upload.params.quiet"));
}
boolean uploadResult;
try {
// if (prefs.get("upload.disable_flushing") == null
// || prefs.get("upload.disable_flushing").toLowerCase().equals("false")) {
// flushSerialBuffer();
// }
String pattern = prefs.getOrExcept("upload.pattern");
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
uploadResult = executeUploadCommand(cmd);
@ -164,9 +162,9 @@ public class SerialUploader extends Uploader {
throw new RunnerException(e);
}
try {
if (uploadResult && doTouch) {
String uploadPort = PreferencesData.get("serial.port");
if (uploadResult && doTouch) {
try {
String previousUploadPort = PreferencesData.get("serial.port");
if (waitForUploadPort) {
// For Due/Leonardo wait until the bootloader serial port disconnects and the
// sketch serial port reconnects (or timeout after a few seconds if the
@ -176,15 +174,18 @@ public class SerialUploader extends Uploader {
long started = System.currentTimeMillis();
while (System.currentTimeMillis() - started < 2000) {
List<String> portList = Serial.list();
if (portList.contains(uploadPort))
if (portList.contains(previousUploadPort)) {
break;
}
Thread.sleep(250);
}
}
} catch (InterruptedException ex) {
// noop
}
} catch (InterruptedException ex) {
// noop
}
BaseNoGui.selectSerialPort(uploadPort);
return uploadResult;
}

View File

@ -1082,10 +1082,11 @@ public class BaseNoGui {
public static void selectSerialPort(String port) {
PreferencesData.set("serial.port", port);
if (port.startsWith("/dev/"))
PreferencesData.set("serial.port.file", port.substring(5));
else
PreferencesData.set("serial.port.file", port);
String portFile = port;
if (port.startsWith("/dev/")) {
portFile = portFile.substring(5);
}
PreferencesData.set("serial.port.file", portFile);
}
public static void setBuildFolder(File newBuildFolder) {