All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.tinyos.util.SerialPortStub Maven / Gradle / Ivy

The newest version!
// $Id: SerialPortStub.java,v 1.9 2003/10/07 21:46:09 idgay Exp $

/*									tab:4
 * "Copyright (c) 2000-2003 The Regents of the University  of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 * Copyright (c) 2002-2003 Intel Corporation
 * All rights reserved.
 *
 * This file is distributed under the terms in the attached INTEL-LICENSE     
 * file. If you do not find these files, copies can be found by writing to
 * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
 * 94704.  Attention:  Intel License Inquiry.
 */

//==============================================================================
//===   SerialPortStub.java   ==============================================


package net.tinyos.util;

import java.util.*;
import java.io.*;
import javax.comm.*;

/**
 * 
 * Init the serial port and reads data from it.
 *
 * @author  Mike Chen 
 *		([email protected])
 * @since   1.1.6
 * @deprecated Use net.tinyos.packet.BuildSource instead
 */


public class SerialPortStub implements SerialStub {

    //=========================================================================
    //=   CONSTANTS   =========================================================
  
    private static final String  CLASS_NAME = "SerialPortStub";

    //size of a message, in bytes
    private int msgSize = 36;

    //=========================================================================
    //=   PRIVATE VARIABLES   =================================================

    CommPortIdentifier portId;
    SerialPort port;
    String portName;
	int baudrate = 19200;
    InputStream in;
    OutputStream out;
    public static int debug = 0;
    private Vector listeners = new Vector();


    //=   CONSTRUCTORS   ======================================================
    //=========================================================================

    public SerialPortStub(String portName) {
	this.portName = portName;
    }


    public SerialPortStub(String portName, int packetSize)
    {
	this.portName = portName;
	this.msgSize = packetSize;
    }

    public SerialPortStub(String portName, int packetSize, int baudrate)
    {
	this.portName = portName;
	this.msgSize = packetSize;
	this.baudrate = baudrate;
    }

    //=========================================================================

    public void Open() throws NoSuchPortException, PortInUseException, IOException, UnsupportedCommOperationException {
	portId = CommPortIdentifier.getPortIdentifier(portName);
	port = (SerialPort)portId.open(CLASS_NAME, 0);
	in = port.getInputStream();
	out = port.getOutputStream();
	port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

	port.setSerialPortParams(baudrate, SerialPort.DATABITS_8,
				 SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
	printPortStatus();
    }

    public void Close() throws Exception {
	in.close();
	out.close();
	port.close();
    }
    
    private void printPortStatus() {
	System.err.println("baud rate: " + port.getBaudRate());
	System.err.println("data bits: " + port.getDataBits());
	System.err.println("stop bits: " + port.getStopBits());
	System.err.println("parity:    " + port.getParity());
    }

    //=========================================================================

    /*
     *  Get an enumeration of all of the comm ports 
     *  on the machine
     */
  
    public void printAllPorts() {
	Enumeration ports = CommPortIdentifier.getPortIdentifiers();
  
	if (ports == null) {
	    System.out.println("No comm ports found!");
	    return;
	}
  
	// print out all ports
	System.out.println("printing all ports...");
	while (ports.hasMoreElements()) {
	    System.out.println("-  " + ((CommPortIdentifier)ports.nextElement()).getName());
	}
	System.out.println("done.");
    }

  
    //=======================================================================  

    public void registerPacketListener(PacketListenerIF listener) {
        if (debug > 0)
	    System.err.println("SPS: Adding listener: "+listener);
	listeners.add(listener);
    }


    //=======================================================================  

    public synchronized void Read() throws IOException {
	int i; 
	int count = 0;
	byte[] packet = new byte[msgSize];
	if (debug > 0)
	    System.out.print("!");

	while ((i = in.read()) != -1) {
	    if (debug > 0)
		System.out.print("!");
	    packet[count] = (byte)i;
	    count++;
	    if (count == msgSize) {
		count = 0;
		Enumeration e = listeners.elements();
		while (e.hasMoreElements()) {
		    PacketListenerIF listener = (PacketListenerIF)e.nextElement();
		    listener.packetReceived(packet);
		}
	    }
	    else if(count == 1 && i != 0x7e) {
		count = 0;
		if (debug > 0)
		    System.out.print("?");
	    }
	}
    }

    public  void Write(byte [] packet ) throws IOException {
	if (debug > 0)
	    System.out.print("-");
	out.write(packet);
	out.flush();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy