Skip to content

Commit 18820b3

Browse files
committed
Fail on missing port only if necessary
Should fix arduino#8052
1 parent b7728be commit 18820b3

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

app/src/processing/app/SketchController.java

+4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import cc.arduino.CompilerProgressListener;
2828
import cc.arduino.UploaderUtils;
2929
import cc.arduino.packages.Uploader;
30+
import cc.arduino.packages.uploaders.MissingSerialPortException;
3031
import processing.app.debug.RunnerException;
3132
import processing.app.forms.PasswordAuthorizationDialog;
3233
import processing.app.helpers.FileUtils;
@@ -734,6 +735,9 @@ private boolean upload(String suggestedClassName, boolean usingProgrammer) throw
734735
List<String> warningsAccumulator = new LinkedList<>();
735736
try {
736737
success = uploaderInstance.upload(sketch, uploader, suggestedClassName, usingProgrammer, false, warningsAccumulator);
738+
} catch (MissingSerialPortException e) {
739+
editor.statusError(tr("Please select a Port before Upload"));
740+
return false;
737741
} finally {
738742
if (uploader.requiresAuthorization() && !success) {
739743
PreferencesData.remove(uploader.getAuthorizationKey());

arduino-core/src/cc/arduino/UploaderUtils.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,9 @@ public Uploader getUploaderByPreferences(boolean noUploadPort) {
5151
BoardPort boardPort = null;
5252
if (!noUploadPort) {
5353
String port = PreferencesData.get("serial.port");
54-
if (port == null || port.isEmpty()) {
55-
return null;
54+
if (port != null && !port.isEmpty()) {
55+
boardPort = BaseNoGui.getDiscoveryManager().find(port);
5656
}
57-
boardPort = BaseNoGui.getDiscoveryManager().find(port);
5857
}
5958

6059
return new UploaderFactory().newUploader(target.getBoards().get(board), boardPort, noUploadPort);

arduino-core/src/cc/arduino/packages/UploaderFactory.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class UploaderFactory {
3838

3939
public Uploader newUploader(TargetBoard board, BoardPort port, boolean noUploadPort) {
4040
if (noUploadPort) {
41-
return new SerialUploader(true);
41+
return new SerialUploader(port, true);
4242
}
4343

4444
if (port != null && "network".equals(port.getProtocol())) {
@@ -48,7 +48,7 @@ public Uploader newUploader(TargetBoard board, BoardPort port, boolean noUploadP
4848
return new SSHUploader(port);
4949
}
5050

51-
return new SerialUploader();
51+
return new SerialUploader(port);
5252
}
5353

5454
}

arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java

+24-3
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,24 @@
5151

5252
public class SerialUploader extends Uploader {
5353

54+
private BoardPort boardPort;
55+
5456
public SerialUploader()
5557
{
5658
super();
59+
this.boardPort = BaseNoGui.getDiscoveryManager().find(PreferencesData.get("serial.port"));
5760
}
5861

59-
public SerialUploader(boolean noUploadPort)
62+
public SerialUploader(BoardPort port)
63+
{
64+
super();
65+
this.boardPort = port;
66+
}
67+
68+
public SerialUploader(BoardPort port, boolean noUploadPort)
6069
{
6170
super(noUploadPort);
71+
this.boardPort = port;
6272
}
6373

6474
@Override
@@ -108,6 +118,7 @@ public boolean uploadUsingPreferences(File sourcePath, String buildPath, String
108118
boolean uploadResult;
109119
try {
110120
String pattern = prefs.getOrExcept("upload.pattern");
121+
validatePattern(pattern, prefs);
111122
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
112123
uploadResult = executeUploadCommand(cmd);
113124
} catch (Exception e) {
@@ -178,9 +189,9 @@ public boolean uploadUsingPreferences(File sourcePath, String buildPath, String
178189
Thread.sleep(100);
179190
BaseNoGui.getDiscoveryManager().getSerialDiscoverer().forceRefresh();
180191
Thread.sleep(100);
192+
boardPort = BaseNoGui.getDiscoveryManager().find(PreferencesData.get("serial.port"));
181193
}
182194

183-
BoardPort boardPort = BaseNoGui.getDiscoveryManager().find(PreferencesData.get("serial.port"));
184195
try {
185196
prefs.put("serial.port.iserial", boardPort.getPrefs().getOrExcept("iserial"));
186197
} catch (Exception e) {
@@ -203,6 +214,7 @@ public boolean uploadUsingPreferences(File sourcePath, String buildPath, String
203214
boolean uploadResult;
204215
try {
205216
String pattern = prefs.getOrExcept("upload.pattern");
217+
validatePattern(pattern, prefs);
206218
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
207219
uploadResult = executeUploadCommand(cmd);
208220
} catch (RunnerException e) {
@@ -251,7 +263,13 @@ public boolean uploadUsingPreferences(File sourcePath, String buildPath, String
251263
return uploadResult;
252264
}
253265

254-
private String waitForUploadPort(String uploadPort, List<String> before) throws InterruptedException, RunnerException {
266+
private void validatePattern(String pattern, PreferencesMap prefs) throws MissingSerialPortException {
267+
if (pattern.contains("serial.port") && boardPort == null) {
268+
throw new MissingSerialPortException();
269+
}
270+
}
271+
272+
private String waitForUploadPort(String uploadPort, List<String> before) throws InterruptedException, RunnerException {
255273
// Wait for a port to appear on the list
256274
int elapsed = 0;
257275
while (elapsed < 10000) {
@@ -339,6 +357,7 @@ private boolean uploadUsingProgrammer(String buildPath, String className) throws
339357
// }
340358

341359
String pattern = prefs.getOrExcept("program.pattern");
360+
validatePattern(pattern, prefs);
342361
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
343362
return executeUploadCommand(cmd);
344363
} catch (RunnerException e) {
@@ -403,11 +422,13 @@ public boolean burnBootloader() throws Exception {
403422
new LoadVIDPIDSpecificPreferences().load(prefs);
404423

405424
String pattern = prefs.getOrExcept("erase.pattern");
425+
validatePattern(pattern, prefs);
406426
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
407427
if (!executeUploadCommand(cmd))
408428
return false;
409429

410430
pattern = prefs.getOrExcept("bootloader.pattern");
431+
validatePattern(pattern, prefs);
411432
cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
412433
return executeUploadCommand(cmd);
413434
}

0 commit comments

Comments
 (0)