📄 blackbox.java
字号:
/* * @(#)BlackBox.java 1.13 98/10/20 SMI * * Author: Tom Corson * * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license * to use, modify and redistribute this software in source and binary * code form, provided that i) this copyright notice and license appear * on all copies of the software; and ii) Licensee does not utilize the * software in a manner which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE * SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS * BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING * OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control * of aircraft, air traffic, aircraft navigation or aircraft * communications; or in the design, construction, operation or * maintenance of any nuclear facility. Licensee represents and * warrants that it will not use or redistribute the Software for such * purposes. */import java.io.*;import java.awt.Frame;import java.awt.FlowLayout;import java.awt.Color;import java.awt.Insets;import java.awt.Dimension;import java.awt.event.WindowListener;import java.awt.event.WindowEvent;import java.util.Enumeration;import javax.comm.CommPort;import javax.comm.CommPortIdentifier;import javax.comm.SerialPort;import javax.comm.NoSuchPortException;import javax.comm.PortInUseException;public class BlackBox extends Frame implements WindowListener{ static int portNum = 0, panelNum = 0, rcvDelay = 0; static SerialPortDisplay[] portDisp; static BlackBox win; static boolean threaded = true, silentReceive = false, modemMode = false, friendly = false; public BlackBox() { super("Serial Port Black Box Tester"); addNotify(); addWindowListener(this); } public void windowIconified(WindowEvent event) { } public void windowDeiconified(WindowEvent event) { } public void windowOpened(WindowEvent event) { } public void windowClosed(WindowEvent event) { } public void windowActivated(WindowEvent event) { } public void windowDeactivated(WindowEvent event) { } public void windowClosing(WindowEvent event) { cleanup(); dispose(); System.exit(0); } public static void main(String[] args) { Enumeration ports; CommPortIdentifier portId; boolean allPorts = true, lineMonitor = false; int idx = 0; win = new BlackBox(); win.setLayout(new FlowLayout()); win.setBackground(Color.gray); portDisp = new SerialPortDisplay[4]; while (args.length > idx) { if (args[idx].equals("-h")) { printUsage(); } else if (args[idx].equals("-f")) { friendly = true; System.out.println("Friendly mode"); } else if (args[idx].equals("-n")) { threaded = false; System.out.println("No threads"); } else if (args[idx].equals("-l")) { lineMonitor = true; System.out.println("Line Monitor mode"); } else if (args[idx].equals("-m")) { modemMode = true; System.out.println("Modem mode"); } else if (args[idx].equals("-s")) { silentReceive = true; System.out.println("Silent Reciever"); } else if (args[idx].equals("-d")) { idx++; rcvDelay = new Integer(args[idx]).intValue(); System.out.println("Receive delay = " + rcvDelay + " msecs"); } else if (args[idx].equals("-p")) { idx++; while (args.length > idx) { /* * Get the specific port */ try { portId = CommPortIdentifier.getPortIdentifier(args[idx]); System.out.println("Opening port " + portId.getName()); win.addPort(portId); } catch (NoSuchPortException e) { System.out.println("Port " + args[idx] + " not found!"); } idx++; } allPorts = false; break; } else { System.out.println("Unknown option " + args[idx]); printUsage(); } idx++; } if (allPorts) { /* * Get an enumeration of all of the comm ports * on the machine */ ports = CommPortIdentifier.getPortIdentifiers(); if (ports == null) { System.out.println("No comm ports found!"); return; } while (ports.hasMoreElements()) { /* * Get the specific port */ portId = (CommPortIdentifier) ports.nextElement(); win.addPort(portId); } } if (portNum > 0) { if (lineMonitor) { if (portNum >= 2) { portDisp[0].setLineMonitor(portDisp[1], true); } else { System.out.println("Need 2 ports for line monitor!"); System.exit(0); } } } else { System.out.println("No serial ports found!"); System.exit(0); } } private void addPort(CommPortIdentifier portId) { /* * Is this a serial port? */ if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { // Is the port in use? if (portId.isCurrentlyOwned()) { System.out.println("Detected " + portId.getName() + " in use by " + portId.getCurrentOwner()); } /* * Open the port and add it to our GUI */ try { portDisp[portNum] = new SerialPortDisplay(portId, threaded, friendly, silentReceive, modemMode, rcvDelay, win); this.portNum++; } catch (PortInUseException e) { System.out.println(portId.getName() + " in use by " + e.currentOwner); } } } public void addPanel(SerialPortDisplay panel) { Dimension dim; Insets ins; win.add(panel); win.validate(); dim = panel.getSize(); ins = win.getInsets(); dim.height = ((this.panelNum + 1) * (dim.height + ins.top + ins.bottom)) + 10; dim.width = dim.width + ins.left + ins.right + 20; win.setSize(dim); win.show(); panelNum++; } static void printUsage() { System.out.println("Usage: BlackBox [-h] | [-f] [-l] [-m] [-n] [-s] [-d receive_delay] [-p ports]"); System.out.println("Where:"); System.out.println("\t-h this usage message"); System.out.println("\t-f friendly - relinquish port if requested"); System.out.println("\t-l run as a line monitor"); System.out.println("\t-m newline is \\n\\r (modem mode)"); System.out.println("\t-n do not use receiver threads"); System.out.println("\t-s don't display received data"); System.out.println("\t-d sleep for receive_delay msecs after each read"); System.out.println("\t-p list of ports to open (separated by spaces)"); System.exit(0); } private void cleanup() { SerialPort p; while (portNum > 0) { portNum--; panelNum--; /* * Close the port */ p = portDisp[portNum].getPort(); if (p != null) { System.out.println("Closing port " + portNum + " (" + p.getName() + ")"); portDisp[portNum].closeBBPort(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -