FileDocCategorySizeDatePackage
CommPortOpen.javaAPI DocExample4001Sun Feb 27 23:20:56 GMT 2000None

CommPortOpen

public class CommPortOpen extends Object
Open a serial port using Java Communications.
author
Ian F. Darwin, ian@darwinsys.com

Fields Summary
public static final int
TIMEOUTSECONDS
How long to wait for the open to finish up.
public static final int
BAUD
The baud rate to use.
protected Frame
parent
The parent Frame, for the chooser.
protected DataInputStream
is
The input stream
protected PrintStream
os
The output stream
protected String
response
The last line read from the serial port.
protected boolean
debug
A flag to control debugging output.
CommPortIdentifier
thePortID
The chosen Port Identifier
CommPort
thePort
The chosen Port itself
Constructors Summary
public CommPortOpen(Frame f)

		
		// Use the PortChooser from before. Pop up the JDialog.
		PortChooser chooser = new PortChooser(null);

		String portName = null;
		do {
			chooser.setVisible(true);
			
			// Dialog done. Get the port name.
			portName = chooser.getSelectedName();

			if (portName == null)
				System.out.println("No port selected. Try again.\n");
		} while (portName == null);

		// Get the CommPortIdentifier.
		thePortID = chooser.getSelectedIdentifier();

		// Now actually open the port.
		// This form of openPort takes an Application Name and a timeout.
		// 
		System.out.println("Trying to open " + thePortID.getName() + "...");

		switch (thePortID.getPortType()) {
		case CommPortIdentifier.PORT_SERIAL:
			thePort = thePortID.open("DarwinSys DataComm",
				TIMEOUTSECONDS * 1000);
			SerialPort myPort = (SerialPort) thePort;

			// set up the serial port
			myPort.setSerialPortParams(BAUD, SerialPort.DATABITS_8,
				SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
			break;

		case CommPortIdentifier.PORT_PARALLEL:
			thePort = thePortID.open("DarwinSys Printing",
				TIMEOUTSECONDS * 1000);
			ParallelPort pPort = (ParallelPort)thePort;

			// Tell API to pick "best available mode" - can fail!
			// myPort.setMode(ParallelPort.LPT_MODE_ANY);

			// Print what the mode is
			int mode = pPort.getMode();
			switch (mode) {
				case ParallelPort.LPT_MODE_ECP:
					System.out.println("Mode is: ECP");
					break;
				case ParallelPort.LPT_MODE_EPP:
					System.out.println("Mode is: EPP");
					break;
				case ParallelPort.LPT_MODE_NIBBLE:
					System.out.println("Mode is: Nibble Mode.");
					break;
				case ParallelPort.LPT_MODE_PS2:
					System.out.println("Mode is: Byte mode.");
					break;
				case ParallelPort.LPT_MODE_SPP:
					System.out.println("Mode is: Compatibility mode.");
					break;
				// ParallelPort.LPT_MODE_ANY is a "set only" mode;
				// tells the API to pick "best mode"; will report the
				// actual mode it selected.
				default:
					throw new IllegalStateException("Parallel mode " + 
						mode + " invalid.");
			}
			break;
		default:	// Neither parallel nor serial??
			throw new IllegalStateException("Unknown port type " + thePortID);
		}

		// Get the input and output streams
		// Printers can be write-only
		try {
			is = new DataInputStream(thePort.getInputStream());
		} catch (IOException e) {
			System.err.println("Can't open input stream: write-only");
			is = null;
		}
		os = new PrintStream(thePort.getOutputStream(), true);
	
Methods Summary
protected voidconverse()
This method will be overridden by non-trivial subclasses to hold a conversation.


		System.out.println("Ready to read and write port.");

		// Input/Output code not written -- must subclass.

		// Finally, clean up.
		if (is != null)
			is.close();
		os.close();
	
public static voidmain(java.lang.String[] argv)


	    
		   
			 

		new CommPortOpen(null).converse();

		System.exit(0);