diff --git a/src/main/java/info/istlab/IoTP/JTAConsole.java b/src/main/java/info/istlab/IoTP/JTAConsole.java index ef0856f..5492e57 100644 --- a/src/main/java/info/istlab/IoTP/JTAConsole.java +++ b/src/main/java/info/istlab/IoTP/JTAConsole.java @@ -116,7 +116,7 @@ System.out.println(e.getLocalizedMessage()); } - Systemoutprintln("=== end ==="); + // Systemoutprintln("=== end ==="); // thread = new Thread(this); // thread.start(); @@ -133,7 +133,7 @@ e.printStackTrace(); } - Systemoutprintln("=== end ==="); + // Systemoutprintln("=== end ==="); } // public static void main(String[] arg) { diff --git a/src/main/java/info/istlab/IoTP/Launcher.java b/src/main/java/info/istlab/IoTP/Launcher.java index f2b2be2..6f865e6 100644 --- a/src/main/java/info/istlab/IoTP/Launcher.java +++ b/src/main/java/info/istlab/IoTP/Launcher.java @@ -71,15 +71,8 @@ JMenu menu = new JMenu("App"); /**************************************************** */ menuBar.add(menu); - JMenuItem mi = new JMenuItem("シリアルモニタを開く"); - mi.addActionListener(ae -> SerialWindow.invoke() ); - menu.add(mi); - - mi = new JMenuItem("サンプルコードのフォルダを開く"); - mi.addActionListener(ae -> openExecPath()); - menu.add(mi); - - + JMenuItem mi; + mi = new JMenuItem("IoTPのバージョン確認"); mi.addActionListener(ae -> JOptionPane.showMessageDialog(this, "IoTP Launcher v" + version)); menu.add(mi); @@ -92,52 +85,43 @@ mi.addActionListener(ae -> openURL(App.downloadurl)); menu.add(mi); - mi = new JMenuItem("終了"); mi.addActionListener(ae -> System.exit(0)); menu.add(mi); + + menu = new JMenu("Serial"); /**************************************************** */ + menuBar.add(menu); + + mi = new JMenuItem("シリアルモニタを開く"); + mi.addActionListener(ae -> SerialWindow.invoke() ); + menu.add(mi); + menu = new JMenu("File"); /**************************************************** */ menuBar.add(menu); - // jcbmi = new JCheckBoxMenuItem("exclude class files from filetree"); - // jcbmi.addItemListener(ae -> reloadFiles()); - // menu.add(jcbmi); - mi = new JMenuItem("reload filetree"); mi.addActionListener(ae -> reloadFiles()); menu.add(mi); - menu.addSeparator(); + mi = new JMenuItem("サンプルコードのフォルダを開く"); + mi.addActionListener(ae -> openExecPath()); + menu.add(mi); - // mi = new JMenuItem("rename/delete NWP folder"); - // mi.addActionListener(ae -> renameOrDeleteNWPFolder()); - // menu.add(mi); - - // mi = new JMenuItem("get NWP folder"); - // mi.addActionListener(ae -> App.getNWPifnotexist(true)); - // menu.add(mi); + // menu.addSeparator(); boolean isEnglish = false; - menu = new JMenu(isEnglish ? "Process" : "プロセス"); /**************************************************** */ - menuBar.add(menu); + // menu = new JMenu(isEnglish ? "Process" : "プロセス"); /**************************************************** */ + // menuBar.add(menu); - // mi = new JMenuItem("stop alive"); - // mi.addActionListener(ae -> stopProcess(false)); + // mi = new JMenuItem("jps (Javaのプロセス確認)"); + // mi.addActionListener(ae -> runCommand(ae.getActionCommand(), null)); // menu.add(mi); - // mi = new JMenuItem("stop all"); - // mi.addActionListener(ae -> stopProcess(true)); + // mi = new JMenuItem("killall java (Javaプロセスをすべて強制終了)"); + // mi.addActionListener(ae -> runCommand(ae.getActionCommand(), null)); // menu.add(mi); - mi = new JMenuItem("jps (Javaのプロセス確認)"); - mi.addActionListener(ae -> runCommand(ae.getActionCommand(), null)); - menu.add(mi); - - mi = new JMenuItem("killall java (Javaプロセスをすべて強制終了)"); - mi.addActionListener(ae -> runCommand(ae.getActionCommand(), null)); - menu.add(mi); - menu = new JMenu(isEnglish ? "Help" : "ヘルプ"); /**************************************************** */ menuBar.add(menu); diff --git a/src/main/java/info/istlab/IoTP/SerialSelector.java b/src/main/java/info/istlab/IoTP/SerialSelector.java new file mode 100644 index 0000000..5a11987 --- /dev/null +++ b/src/main/java/info/istlab/IoTP/SerialSelector.java @@ -0,0 +1,51 @@ +package info.istlab.IoTP; + +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; + +import com.fazecast.jSerialComm.SerialPort; + +public class SerialSelector extends JPanel implements ActionListener { + SerialPort[] options; + public static JFrame frame; + + public static void show(SerialPort[] opts) { + JFrame jf = frame = new JFrame("Select SerialPort"); + jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + jf.getContentPane().add(new SerialSelector(opts)); + jf.pack(); // 内容物でサイズを自動設定する + + Dimension winSize = jf.getSize(); + jf.setLocation(SerialWindow.centerOfScreen(winSize)); + jf.setVisible(true); + } + + public SerialSelector(SerialPort[] opts) { + options = opts; + + setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + + for (SerialPort str : options) { + JButton b = new JButton(str.getSystemPortName()); + b.addActionListener(this); + add(b); + } + } + + @Override + public void actionPerformed(ActionEvent e) { + SerialPort selectedsp = SerialPort.getCommPort(e.getActionCommand()); + SerialWindow sw = new SerialWindow(selectedsp); + SerialWindow.hash.put(selectedsp.getSystemPortName(), sw); + + frame.setVisible(false); + } + +} diff --git a/src/main/java/info/istlab/IoTP/SerialWindow.java b/src/main/java/info/istlab/IoTP/SerialWindow.java index a0222d6..f7a49d9 100644 --- a/src/main/java/info/istlab/IoTP/SerialWindow.java +++ b/src/main/java/info/istlab/IoTP/SerialWindow.java @@ -11,6 +11,8 @@ import java.awt.event.FocusListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; +import java.util.ArrayList; +import java.util.Hashtable; import javax.swing.JFrame; import javax.swing.JOptionPane; @@ -28,16 +30,30 @@ JTextField jtf; JTextArea jta; Thread thread; - // JButton compileB; + + public static Hashtable hash; + static { + hash = new Hashtable(); + } public static void invoke() { SerialPort[] ports = SerialPort.getCommPorts(); + ArrayList splist_valid = new ArrayList(); for (SerialPort sp : ports) { String name = sp.getSystemPortName(); - if (name.startsWith("cu.usbserial")) { - new SerialWindow(sp); + if (name.startsWith("cu.usbserial") || name.startsWith("COM")) { + splist_valid.add(sp); } } + if (splist_valid.size()==1){ + SerialPort sp = splist_valid.get(0); + SerialWindow sw = new SerialWindow(sp); + hash.put(sp.getSystemPortName(), sw); + } else if (splist_valid.size()==0){ + JOptionPane.showMessageDialog(null, "No available serial ports."); + } else { + SerialSelector.show(splist_valid.toArray(new SerialPort[]{})); + } } public SerialWindow(SerialPort _sp) {