Skip to content

Commit d7cd5a5

Browse files
author
Federico Fissore
committed
LoadVIDPIDSpecificPreferences was giving for granted that the attached board provided VID & PID. This is not always true, especially with counterfeits. Fixes #3738
1 parent dc4b3fe commit d7cd5a5

File tree

4 files changed

+20
-20
lines changed

4 files changed

+20
-20
lines changed

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

+8-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
package cc.arduino;
3131

3232
import cc.arduino.packages.BoardPort;
33+
import org.apache.commons.lang3.StringUtils;
3334
import processing.app.BaseNoGui;
3435
import processing.app.PreferencesData;
3536
import processing.app.helpers.PreferencesMap;
@@ -45,7 +46,13 @@ public void load(PreferencesMap prefs) {
4546
return;
4647
}
4748

48-
int VIDPIDIndex = findVIDPIDIndex(prefs, boardPort.getPrefs().get("vid").toUpperCase(), boardPort.getPrefs().get("pid").toUpperCase());
49+
String vid = boardPort.getPrefs().get("vid");
50+
String pid = boardPort.getPrefs().get("pid");
51+
if (StringUtils.isEmpty(vid) || StringUtils.isEmpty(pid)) {
52+
return;
53+
}
54+
55+
int VIDPIDIndex = findVIDPIDIndex(prefs, vid.toUpperCase(), pid.toUpperCase());
4956
if (VIDPIDIndex < 0) {
5057
return;
5158
}

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ public class BoardPort {
3737
private String protocol;
3838
private String boardName;
3939
private String label;
40-
private PreferencesMap prefs;
40+
private final PreferencesMap prefs;
41+
42+
public BoardPort() {
43+
this.prefs = new PreferencesMap();
44+
}
4145

4246
public String getAddress() {
4347
return address;
@@ -63,10 +67,6 @@ public void setBoardName(String boardName) {
6367
this.boardName = boardName;
6468
}
6569

66-
public void setPrefs(PreferencesMap prefs) {
67-
this.prefs = prefs;
68-
}
69-
7070
public PreferencesMap getPrefs() {
7171
return prefs;
7272
}

arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import cc.arduino.packages.discoverers.network.NetworkChecker;
3636
import org.apache.commons.compress.utils.IOUtils;
3737
import processing.app.BaseNoGui;
38-
import processing.app.helpers.PreferencesMap;
3938
import processing.app.zeroconf.jmdns.ArduinoDNSTaskStarter;
4039

4140
import javax.jmdns.*;
@@ -139,14 +138,14 @@ public void serviceResolved(ServiceEvent serviceEvent) {
139138
String address = inetAddress.getHostAddress();
140139
String name = serviceEvent.getName();
141140

142-
PreferencesMap prefs = null;
141+
BoardPort port = new BoardPort();
142+
143143
String board = null;
144144
if (info.hasData()) {
145-
prefs = new PreferencesMap();
146145
board = info.getPropertyString("board");
147-
prefs.put("board", board);
148-
prefs.put("distro_version", info.getPropertyString("distro_version"));
149-
prefs.put("port", "" + info.getPort());
146+
port.getPrefs().put("board", board);
147+
port.getPrefs().put("distro_version", info.getPropertyString("distro_version"));
148+
port.getPrefs().put("port", "" + info.getPort());
150149
}
151150

152151
String label = name + " at " + address;
@@ -157,11 +156,9 @@ public void serviceResolved(ServiceEvent serviceEvent) {
157156
}
158157
}
159158

160-
BoardPort port = new BoardPort();
161159
port.setAddress(address);
162160
port.setBoardName(name);
163161
port.setProtocol("network");
164-
port.setPrefs(prefs);
165162
port.setLabel(label);
166163

167164
synchronized (boardPortsDiscoveredWithJmDNS) {

arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java

+2-6
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import processing.app.Platform;
3636
import processing.app.Serial;
3737
import processing.app.debug.TargetBoard;
38-
import processing.app.helpers.PreferencesMap;
3938

4039
import java.util.*;
4140

@@ -84,11 +83,9 @@ public void run() {
8483

8584
String label = port;
8685

87-
PreferencesMap prefs = new PreferencesMap();
88-
8986
if (boardData != null) {
90-
prefs.put("vid", boardData.get("vid").toString());
91-
prefs.put("pid", boardData.get("pid").toString());
87+
boardPort.getPrefs().put("vid", boardData.get("vid").toString());
88+
boardPort.getPrefs().put("pid", boardData.get("pid").toString());
9289

9390
TargetBoard board = (TargetBoard) boardData.get("board");
9491
if (board != null) {
@@ -101,7 +98,6 @@ public void run() {
10198
}
10299

103100
boardPort.setLabel(label);
104-
boardPort.setPrefs(prefs);
105101

106102
boardPorts.add(boardPort);
107103
}

0 commit comments

Comments
 (0)