Go to most recent revision | Blame | Last modification | View Log | Download
/*
AVRcamVIEW: A PC application to test out the functionallity of the
AVRcam real-time image processing engine.
Copyright (C) 2004 Brent A. Taylor
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 2 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, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
For more information on the AVRcamVIEW, please contact:
taylorba@comcast.net
or go to www.jrobot.net for more details regarding the system.
*/
package avr.swing;
import javax.comm.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import avr.connection.*;
public class JSerialPanel extends JPanel {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
int option = new JSerialPanel().showDialog(null, null);
System.out.println(option);
}
private static final Integer[] BAUD_RATES = {
new Integer(115200),
new Integer(57600),
new Integer(38400),
new Integer(19200),
new Integer(9600),
new Integer(4800)
};
private static final Integer[] DATA_BITS = {
new Integer(8),
new Integer(7),
new Integer(6),
new Integer(5)
};
private static final String[] PARITY = {
"None",
"Odd",
"Even",
"Mark",
"Space"
};
private static final Number[] STOP_BITS = {
new Integer(1),
new Double(1.5),
new Integer(2)
};
public static final String[] FLOW_CONTROL = {
"None",
"Hardware",
"Xon / Xoff"
};
private static final int UNKNOWN_OPTION = 0x00;
public static final int OK_OPTION = 0x01;
public static final int CANCEL_OPTION = 0x02;
private JComboBox baudRateCB;
private JComboBox dataBitsCB;
private JComboBox stopBitsCB;
private JComboBox parityCB;
private JComboBox flowControlCB;
private JDialog dialog;
private int option;
public JSerialPanel() {
super(new GridLayout(5, 2, 10, 10));
setBorder(new EmptyBorder(5, 5, 5, 5));
baudRateCB = new JComboBox(BAUD_RATES);
dataBitsCB = new JComboBox(DATA_BITS);
stopBitsCB = new JComboBox(STOP_BITS);
parityCB = new JComboBox(PARITY);
flowControlCB = new JComboBox(FLOW_CONTROL);
add(new JLabel("Baud Rate:", JLabel.RIGHT));
add(baudRateCB);
add(new JLabel("Data Bits:", JLabel.RIGHT));
add(dataBitsCB);
add(new JLabel("Stop Bits:", JLabel.RIGHT));
add(stopBitsCB);
add(new JLabel("Parity:", JLabel.RIGHT));
add(parityCB);
add(new JLabel("Flow Control:", JLabel.RIGHT));
add(flowControlCB);
}
public void setSerialParameters(SerialParams params) {
if(params != null) {
baudRateCB.setSelectedItem(new Integer(params.getBaudRate()));
dataBitsCB.setSelectedItem(new Integer(params.getDataBits()));
parityCB.setSelectedIndex(params.getParity());
switch(params.getStopBits()) {
case 1:
stopBitsCB.setSelectedIndex(0);
break;
case 2:
stopBitsCB.setSelectedIndex(2);
break;
case 3:
stopBitsCB.setSelectedIndex(1);
break;
}
if(params.getFlowControl() == SerialPort.FLOWCONTROL_NONE) {
flowControlCB.setSelectedIndex(0);
} else if(params.getFlowControl() == (SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT)) {
flowControlCB.setSelectedIndex(1);
} else if(params.getFlowControl() == (SerialPort.FLOWCONTROL_XONXOFF_IN | SerialPort.FLOWCONTROL_XONXOFF_OUT)) {
flowControlCB.setSelectedIndex(2);
}
}
}
public SerialParams getSerialParameters() {
int baudRate = ((Integer)baudRateCB.getSelectedItem()).intValue();
int dataBits = ((Integer)dataBitsCB.getSelectedItem()).intValue();
int parity = parityCB.getSelectedIndex();
int stopBits = 0;
int flowControl = 0;
switch(stopBitsCB.getSelectedIndex()) {
case 0:
stopBits = 1;
break;
case 1:
stopBits = 3;
break;
case 2:
stopBits = 2;
break;
}
switch(flowControlCB.getSelectedIndex()) {
case 0:
flowControl = SerialPort.FLOWCONTROL_NONE;
break;
case 1:
flowControl = SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT;
break;
case 2:
flowControl = SerialPort.FLOWCONTROL_XONXOFF_IN | SerialPort.FLOWCONTROL_XONXOFF_OUT;
break;
}
return new SerialParams(baudRate, dataBits, stopBits, parity, flowControl);
}
public void ok() {
option = OK_OPTION;
dialog.setVisible(false);
}
public void cancel() {
option = CANCEL_OPTION;
dialog.setVisible(false);
}
public int showDialog(Frame owner, SerialParams params) {
if(dialog == null) {
dialog = new JDialog(owner, "Serial Port Parameters", true);
dialog.getContentPane().add(this, BorderLayout.CENTER);
dialog.getContentPane().add(createButtonPanel(), BorderLayout.SOUTH);
dialog.pack();
dialog.setResizable(false);
}
option = UNKNOWN_OPTION;
setSerialParameters(params);
dialog.setLocationRelativeTo(owner);
dialog.setVisible(true);
return option;
}
private JComponent createButtonPanel() {
JPanel buttonP = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonP.setBorder(new EtchedBorder());
buttonP.add(new JButton(new ProxyAction(this, "ok", "OK", 'o')));
buttonP.add(new JButton(new ProxyAction(this, "cancel", "Cancel", 'c')));
return buttonP;
}
}