Skip to content

Commit 5dda7b4

Browse files
committed
Handle suspend/resume if serial port disappears
Similar to minicom behaviour. Automatically reopens the port only if it takes the same name (could be improved based on vid/pid)
1 parent c79d42c commit 5dda7b4

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

Diff for: app/src/processing/app/AbstractMonitor.java

+28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package processing.app;
22

33
import cc.arduino.packages.BoardPort;
4+
import cc.arduino.packages.DiscoveryManager;
45
import processing.app.legacy.PApplet;
56

67
import javax.swing.*;
@@ -9,6 +10,7 @@
910
import java.awt.event.ActionListener;
1011
import java.awt.event.WindowAdapter;
1112
import java.awt.event.WindowEvent;
13+
import java.util.List;
1214

1315
@SuppressWarnings("serial")
1416
public abstract class AbstractMonitor extends JFrame implements ActionListener {
@@ -17,6 +19,7 @@ public abstract class AbstractMonitor extends JFrame implements ActionListener {
1719

1820
private StringBuffer updateBuffer;
1921
private Timer updateTimer;
22+
private Timer portExistsTimer;
2023

2124
private BoardPort boardPort;
2225

@@ -71,6 +74,26 @@ public void actionPerformed(ActionEvent event) {
7174
updateTimer = new Timer(33, this); // redraw serial monitor at 30 Hz
7275
updateTimer.start();
7376

77+
ActionListener portExists = new ActionListener() {
78+
@Override
79+
public void actionPerformed(ActionEvent ae) {
80+
try {
81+
if (!Base.getDiscoveryManager().discovery().contains(boardPort)) {
82+
if (!closed) {
83+
suspend();
84+
}
85+
} else {
86+
if (closed) {
87+
resume(boardPort);
88+
}
89+
}
90+
} catch (Exception e) {}
91+
}
92+
};
93+
94+
portExistsTimer = new Timer(1000, portExists); // check if the port is still there every second
95+
portExistsTimer.start();
96+
7497
closed = false;
7598
}
7699

@@ -90,6 +113,11 @@ public void suspend() throws Exception {
90113
close();
91114
}
92115

116+
public void dispose() {
117+
super.dispose();
118+
portExistsTimer.stop();
119+
}
120+
93121
public void resume(BoardPort boardPort) throws Exception {
94122
setBoardPort(boardPort);
95123

0 commit comments

Comments
 (0)