diff --git a/pom.xml b/pom.xml
index f592f5b..c57e4f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
info.istlab.IoTP
IoTP
jar
- 0.33
+ 0.34
IoTP
http://maven.apache.org
diff --git a/src/main/java/info/istlab/IoTP/Launcher.java b/src/main/java/info/istlab/IoTP/Launcher.java
index 4429010..09dcfaf 100644
--- a/src/main/java/info/istlab/IoTP/Launcher.java
+++ b/src/main/java/info/istlab/IoTP/Launcher.java
@@ -28,7 +28,7 @@
public class Launcher extends JFrame implements MouseInputListener, KeyListener, Runnable {
public static Launcher theapp;
- public static String version = "0.33";
+ public static String version = "0.34";
static int reboot_msec = 2000;
// JPanel mainP;
File root;
diff --git a/src/main/java/info/istlab/IoTP/MqttWindow.java b/src/main/java/info/istlab/IoTP/MqttWindow.java
index 44d871a..cea5fe6 100644
--- a/src/main/java/info/istlab/IoTP/MqttWindow.java
+++ b/src/main/java/info/istlab/IoTP/MqttWindow.java
@@ -9,6 +9,8 @@
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
@@ -27,7 +29,7 @@
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
-public class MqttWindow extends JFrame implements ActionListener, WindowListener, MqttCallback, Runnable {
+public class MqttWindow extends JFrame implements ActionListener, WindowListener, MqttCallback, Runnable, KeyListener {
static MqttWindow theMqttWindow;
JTextField jtf;
JTextArea jta;
@@ -119,6 +121,7 @@
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
jtf.addActionListener(this);
addWindowListener(this); // Xをおしたらserial closeする
+ addKeyListener(this);
// フォーカスをあえて外す
// jta.requestFocus();
@@ -319,4 +322,23 @@
throw new UnsupportedOperationException("Unimplemented method 'deliveryComplete'");
}
+
+ @Override
+ public void keyTyped(KeyEvent e) {
+ }
+
+ @Override
+ public void keyPressed(KeyEvent e) {
+ if (e.isControlDown() || e.isAltDown() || e.isAltGraphDown() || e.isMetaDown()) {
+ if (e.getKeyCode() == 87) { // W
+ closeWin();
+ }
+ }
+ }
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ }
+
+
}
diff --git a/src/main/java/info/istlab/IoTP/SerialChecker.java b/src/main/java/info/istlab/IoTP/SerialChecker.java
index 03edeb8..fd663fd 100644
--- a/src/main/java/info/istlab/IoTP/SerialChecker.java
+++ b/src/main/java/info/istlab/IoTP/SerialChecker.java
@@ -1,6 +1,7 @@
package info.istlab.IoTP;
import java.util.ArrayList;
+import java.util.Hashtable;
import com.fazecast.jSerialComm.SerialPort;
@@ -11,12 +12,14 @@
String last_connections;
ArrayList validSerialNames;
+ Hashtable portHash;
public SerialChecker(Launcher _launcher) {
launcher = _launcher;
last_connections = "";
validSerialNames = new ArrayList();
+ portHash = new Hashtable();
thread = new Thread(this);
thread.start();
@@ -69,11 +72,13 @@
}
void updateSerialNames(){
validSerialNames.clear();
+ portHash.clear();
SerialPort[] ports = SerialPort.getCommPorts();
for (SerialPort sp : ports) {
String name = sp.getSystemPortName();
if (name.startsWith("cu.usbserial") || name.startsWith("COM")) {
validSerialNames.add(name);
+ portHash.put(name, sp);
}
}
}
diff --git a/src/main/java/info/istlab/IoTP/SerialWindow.java b/src/main/java/info/istlab/IoTP/SerialWindow.java
index 61c73b8..5c3e796 100644
--- a/src/main/java/info/istlab/IoTP/SerialWindow.java
+++ b/src/main/java/info/istlab/IoTP/SerialWindow.java
@@ -26,22 +26,23 @@
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;
-public class SerialWindow extends JFrame implements SerialPortDataListener, ActionListener, Runnable, WindowListener, KeyListener {
+public class SerialWindow extends JFrame
+ implements SerialPortDataListener, ActionListener, Runnable, WindowListener, KeyListener {
SerialPort sp;
JTextField jtf;
JTextArea jta;
Thread thread;
-
+
public static Hashtable hash;
static {
- hash = new Hashtable();
+ hash = new Hashtable();
}
/**
* チェックして、App.serialName にポート名をセットするだけ。
*/
- public static void check(boolean popup_if_zero){
+ public static void check(boolean popup_if_zero) {
SerialPort[] ports = SerialPort.getCommPorts();
ArrayList splist_valid = new ArrayList();
for (SerialPort sp : ports) {
@@ -50,14 +51,15 @@
splist_valid.add(sp);
}
}
- if (splist_valid.size()==1){
+ if (splist_valid.size() == 1) {
SerialPort sp = splist_valid.get(0);
App.serialName = sp.getSystemPortName();
-
- } else if (splist_valid.size()==0){
- if (popup_if_zero) JOptionPane.showMessageDialog(Launcher.theapp, "No available serial ports.");
+
+ } else if (splist_valid.size() == 0) {
+ if (popup_if_zero)
+ JOptionPane.showMessageDialog(Launcher.theapp, "No available serial ports.");
} else {
- SerialSelector.show(splist_valid.toArray(new SerialPort[]{}));
+ if (App.serialName == null) SerialSelector.show(splist_valid.toArray(new SerialPort[] {}));
}
}
@@ -70,28 +72,30 @@
splist_valid.add(sp);
}
}
- if (splist_valid.size()==1){
+ if (splist_valid.size() == 1) {
SerialPort sp = splist_valid.get(0);
new SerialWindow(sp);
- } else if (splist_valid.size()==0){
+ } else if (splist_valid.size() == 0) {
JOptionPane.showMessageDialog(Launcher.theapp, "No available serial ports.");
} else {
- SerialSelector.show(splist_valid.toArray(new SerialPort[]{}));
+ if (App.serialName == null) SerialSelector.show(splist_valid.toArray(new SerialPort[] {}));
+ SerialPort sp = Launcher.theapp.serialChecker.portHash.get(App.serialName);
+ new SerialWindow(sp);
}
}
public SerialWindow(SerialPort _sp) {
- super("SerialMonitor " + _sp.getSystemPortName()+" (ボーレート:115200)");
+ super("SerialMonitor " + _sp.getSystemPortName() + " (ボーレート:115200)");
sp = _sp;
sp.setBaudRate(115200);
sp.addDataListener(this);
System.out.println(sp.getSystemPortName());
if (!sp.openPort()) {
- JOptionPane.showMessageDialog(Launcher.theapp, "他のプログラムがシリアルポート "+sp.getSystemPortName()+" を使用しています。");
+ JOptionPane.showMessageDialog(Launcher.theapp, "他のウィンドウまたはプログラムがシリアルポート " + sp.getSystemPortName() + " を使用しています。");
System.out.println("Unable to open the port.");
return;
}
- hash.put(sp.getSystemPortName(), this);
+ hash.put(sp.getSystemPortName(), this);
jtf = new JTextField("(ここをクリックして、入力して、Enterを押すと、シリアル送信します)");
jtf.setForeground(Color.GRAY);
@@ -112,37 +116,30 @@
}
}
});
- jtf.setBackground(new Color(210,255,255));
+ jtf.setBackground(new Color(210, 255, 255));
getContentPane().add(jtf, BorderLayout.NORTH);
jta = new JTextArea();
getContentPane().add(new JScrollPane(jta), BorderLayout.CENTER);
// compileB = new JButton("compile");
// compileB.addActionListener(e -> {
- // compile(e.getActionCommand());
+ // compile(e.getActionCommand());
// });
// getContentPane().add(compileB, BorderLayout.SOUTH);
setSize(500, 400);
setLocation(centerOfScreen(getSize()));
setVisible(true);
- setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+ setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // この下のWindowListenerで処理する
jtf.addActionListener(this);
addWindowListener(this); // Xをおしたらserial closeする
- //フォーカスをあえて外す
+ // フォーカスをあえて外す
jta.requestFocus();
jtf.addKeyListener(this);
jta.addKeyListener(this);
}
- /**
- * 再接続
- */
- public void reconnect() {
- sp.openPort();
- jta.setBackground(Color.white);
- }
@Override
public int getListeningEvents() {
@@ -168,7 +165,7 @@
sp.readBytes(newData, bytesToRead);
String s = new String(newData, "UTF8");
appendToJTA(s);
- } else if (evt == SerialPort.LISTENING_EVENT_PORT_DISCONNECTED){
+ } else if (evt == SerialPort.LISTENING_EVENT_PORT_DISCONNECTED) {
System.out.println("Port disconnected.");
// System.out.println(event.toString());
SerialWindow.closeAll("切断されました");
@@ -184,7 +181,7 @@
if (jta == null)
return;
if (s.contains("waiting for download")) {
- closeSerialPort(null); //切断のみ。再接続はしない
+ closeSerialPort(null); // 切断のみ。再接続はしない
}
jta.append(s);
int len = jta.getDocument().getLength();
@@ -192,26 +189,12 @@
jta.setCaretPosition(len);
}
- void closeSerialPort(String mes) {
- if (sp != null) {
- if (sp.isOpen()) {
- System.out.println("close Serial Port");
- sp.closePort();
- jta.setBackground(Color.lightGray);
- if (mes == null) appendToJTA("Uploadに備えて、切断しました。");
- else appendToJTA(mes);
- // thread = new Thread(this);
- // thread.start();
- }
- // sp = null;
- }
- }
-
// ここで、画面中心にウィンドウ表示するため、いろいろ計算する
public static Point centerOfScreen(Dimension winSize) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
return new Point((screenSize.width - winSize.width) / 2, (screenSize.height - winSize.height) / 2);
}
+
// ここで、画面中心にウィンドウ表示するため、いろいろ計算する
public static Point leftOfScreen(Dimension winSize) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
@@ -259,40 +242,39 @@
}
}
- @Override
- public void windowOpened(WindowEvent e) {
- }
+ @Override
+ public void windowOpened(WindowEvent e) {
+ }
- @Override
- public void windowClosing(WindowEvent e) {
- disposeWin();
- // closeSerialPort("シリアルモニタウィンドウを閉じます");
- }
-
- @Override
- public void windowClosed(WindowEvent e) {
+ @Override
+ public void windowClosing(WindowEvent e) {
// closeSerialPort("シリアルモニタウィンドウを閉じます");
disposeWin();
- }
+ }
- @Override
- public void windowIconified(WindowEvent e) {
- }
+ @Override
+ public void windowClosed(WindowEvent e) {
+ disposeWin();
+ }
- @Override
- public void windowDeiconified(WindowEvent e) {
- }
+ @Override
+ public void windowIconified(WindowEvent e) {
+ }
- @Override
- public void windowActivated(WindowEvent e) {
- }
+ @Override
+ public void windowDeiconified(WindowEvent e) {
+ }
- @Override
- public void windowDeactivated(WindowEvent e) {
- }
+ @Override
+ public void windowActivated(WindowEvent e) {
+ }
+
+ @Override
+ public void windowDeactivated(WindowEvent e) {
+ }
public static void disposeAll() {
- for(String key : SerialWindow.hash.keySet()){
+ for (String key : SerialWindow.hash.keySet()) {
SerialWindow swin = SerialWindow.hash.get(key);
if (swin != null) {
swin.disposeWin();
@@ -300,16 +282,52 @@
}
SerialWindow.hash.clear();
}
+
public static void closeAll(String mes) {
- for(String key : SerialWindow.hash.keySet()){
+ for (String key : SerialWindow.hash.keySet()) {
SerialWindow swin = SerialWindow.hash.get(key);
if (swin != null) {
- if (mes == null) mes = "Uploadに備え、切断しました";
+ if (mes == null)
+ mes = "Uploadに備え、切断しました";
swin.closeSerialPort(mes);
}
}
}
- public void disposeWin(){
+
+ /**
+ * シリアルポート接続を閉じる
+ *
+ * @param mes
+ */
+ void closeSerialPort(String mes) {
+ if (sp != null) {
+ if (sp.isOpen()) {
+ System.out.println("close Serial Port");
+ sp.closePort();
+ jta.setBackground(Color.lightGray);
+ if (mes == null)
+ appendToJTA("Uploadに備えて、切断しました。");
+ else
+ appendToJTA(mes);
+ }
+ }
+ // 再接続に備えて、sp = null はしない
+ }
+
+ /**
+ * 再接続
+ */
+ public void reconnect() {
+ sp.openPort();
+ jta.setBackground(Color.white);
+ }
+
+ /**
+ * ウィンドウを閉じる前に、シリアルポート接続を閉じる
+ */
+ public void disposeWin() {
+ closeSerialPort("シリアルモニタウィンドウを閉じます");
+
SerialWindow.hash.remove(this.sp.getSystemPortName());
dispose();
}