/** * KKMulticopterFlashTool, a avrdude GUI for flashing KK boards and other * equipment. * Copyright (C) 2011 Christian Moll * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.lazyzero.kkMulticopterFlashTool.gui; import static lu.tudor.santec.i18n.Translatrix._; import gnu.io.PortInUseException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Iterator; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.border.TitledBorder; import avr8_burn_o_mat.AVR; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import de.lazyzero.kkMulticopterFlashTool.KKMulticopterFlashTool; import de.lazyzero.kkMulticopterFlashTool.utils.Icons; import de.lazyzero.kkMulticopterFlashTool.utils.PortScanner; import de.lazyzero.kkMulticopterFlashTool.utils.SerialReader; public class TestControllPanel extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private Logger logger = KKMulticopterFlashTool.getLogger(); private Vector<AVR> avrs; private Vector<String> ports = new Vector<String>(); private CellConstraints cc; private JLabel portLabel; private JLabel controllerLabel; private JComboBox portComboBox; private JComboBox controllerComboBox; private JButton startButton; private JButton stopButton; private int baud = 9600; private SerialReader serialReader; private TestPanel parent; public TestControllPanel(TestPanel parent) { this.parent = parent; init(); intiGUI(); updateSerialPorts(); } private void intiGUI() { // create the CellContraints cc = new CellConstraints(); // create the Layout for Panel this String panelColumns = "3dlu,pref, 3dlu, fill:pref:grow,3dlu, pref, 3dlu,pref,3dlu"; String panelRows = "3dlu,pref,3dlu,pref,3dlu"; FormLayout panelLayout = new FormLayout(panelColumns, panelRows); this.setLayout(panelLayout); this.setBorder(new TitledBorder(_("controller.settings"))); portLabel = new JLabel(_("port")); controllerLabel = new JLabel(_("controller")); portComboBox = new JComboBox(ports); controllerComboBox = new JComboBox(avrs); startButton = new JButton(_("start"), Icons.getIcon16(Icons.RUN)); stopButton = new JButton(_("stop"), Icons.getIcon16(Icons.STOP)); startButton.addActionListener(this); stopButton.addActionListener(this); this.add(controllerLabel, cc.xy(2, 2)); this.add(portLabel, cc.xy(2, 4)); this.add(controllerComboBox, cc.xyw(4, 2, 5)); this.add(portComboBox, cc.xy(4, 4)); this.add(startButton, cc.xy(6, 4)); this.add(stopButton, cc.xy(8, 4)); stopButton.setEnabled(false); startButton.setEnabled(true); } private void init() { avrs = KKMulticopterFlashTool.getControllers(); ports = PortScanner.listSerialPorts(); } @Override public void actionPerformed(ActionEvent event) { if (event.getSource().equals(startButton)) { try { startAction(); } catch (PortInUseException e) { JOptionPane.showMessageDialog(this, _("serialPort.portInUseException")); logger.log(Level.WARNING, e.getMessage()); } } else if (event.getSource().equals(stopButton)) { stopAction(); } } private void stopAction() { logger.info("stop serialReader"); stopButton.setEnabled(false); startButton.setEnabled(true); serialReader.interrupt(); } private void startAction() throws PortInUseException { logger.info("start serialReader"); stopButton.setEnabled(true); startButton.setEnabled(false); serialReader = new SerialReader(baud, (String)portComboBox.getSelectedItem(), parent.getEvaluationPanel()); serialReader.start(); } private void updateSerialPorts() { Thread t = new Thread() { public void run() { String selectedItem; Vector<String> list; while(true) { selectedItem = (String)portComboBox.getSelectedItem(); list = PortScanner.listSerialPorts(); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String port = iterator.next(); if (!ports.contains(port)) { System.out.println("add port to list: " + port); ports.add(port); portComboBox.setModel(new DefaultComboBoxModel(ports)); portComboBox.setSelectedItem(selectedItem); } } try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }; t.start(); } }