/*
 * @(#)CControl2www.java	1.00 09/01/02 FbSMI
 * based on SimpleRead.java	1.12 98/06/25 SMI
 * 
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * 
 * 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.
 * 
 * Changes History Fb 09/01/01  
 * - Adapting Com-Port for Windows "COM1"
 * - Changing to rxtx Libriary instead of sun javax.com  
 */

import java.io.*;
import java.util.*;
import gnu.io.*;//rxtx serial comm lib

/**
 * Class declaration
 *
 *
 * @author
 * @version 1.0, 09/01/02
 */
public class CControl2www implements Runnable, SerialPortEventListener {
    static CommPortIdentifier portId;
    static Enumeration	      portList;
    InputStream		      inputStream;
    SerialPort		      serialPort;
    Thread		      readThread;

    /**
     * Method declaration
     *
     *
     * @param args
     *
     * @see
     */
    public static void main(String[] args) {
    boolean		      portFound = false;
    String		      defaultPort = "COM1";
    
    System.out.println("CControl2www V0.1");
    
 	if (args.length > 0) {
	    defaultPort = args[0];
	} 
   
	portList = CommPortIdentifier.getPortIdentifiers();

	while (portList.hasMoreElements()) {
	    portId = (CommPortIdentifier) portList.nextElement();
	    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
		if (portId.getName().equals(defaultPort)) {
		    System.out.println("Found port: "+defaultPort);
		    portFound = true;
		    CControl2www reader = new CControl2www();
		} 
	    } 
	} 
	if (!portFound) {
	    System.out.println("port " + defaultPort + " not found.");
	} 
 	
    } 

    /**
     * Constructor declaration
     *
     *
     * @see
     */
    public CControl2www() {
	try {
	    serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
	} catch (PortInUseException e) {}

	try {
	    inputStream = serialPort.getInputStream();
	} catch (IOException e) {}

	try {
	    serialPort.addEventListener(this);
	} catch (TooManyListenersException e) {}

	serialPort.notifyOnDataAvailable(true);

	try {
	    serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, 
					   SerialPort.STOPBITS_1, 
					   SerialPort.PARITY_NONE);
	} catch (UnsupportedCommOperationException e) {}

/* suggestion from http://forums.sun.com/thread.jspa?threadID=5165346
	try
    {
    	serialPort.enableReceiveTimeout(1000);
    	serialPort.enableReceiveThreshold(0);
    }
    catch (UnsupportedCommOperationException e) {}
*/
	readThread = new Thread(this);

	readThread.start();
    }

    /**
     * Method declaration
     *
     *
     * @see
     */
    public void run() {
	try {
	    Thread.sleep(20000);
	} catch (InterruptedException e) {}
    } 

    /**
     * Method declaration
     *
     *
     * @param event
     *
     * @see
     */
    public void serialEvent(SerialPortEvent event) {
    	int numBytes;
   	
    	switch (event.getEventType()) {	
		case SerialPortEvent.BI:	
//      Break interrupt.
		case SerialPortEvent.OE:	
//      Overrun error.
		case SerialPortEvent.FE:	
//      Framing error.
		case SerialPortEvent.PE:	
//      Parity error.
		case SerialPortEvent.CD:	
//	    Carrier detect.
		case SerialPortEvent.CTS:	
//      Clear to send.
		case SerialPortEvent.DSR:	
//      Data set ready.
		case SerialPortEvent.RI:	
//      Ring indicator.    	
		case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
		    break;
	
		case SerialPortEvent.DATA_AVAILABLE:

	
		    try {
		    numBytes = inputStream.available();
		    byte[] readBuffer = new byte[numBytes];
			if (numBytes > 0) {				
			    numBytes = inputStream.read(readBuffer); 
			} 
	
			System.out.print(new String(readBuffer));
		    } catch (IOException e) {}
	
		    break;
		}
    }
    public void WriteXMLFile() {
  	
    }
    
}





