Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Serial Port programming on Linux

0 views
Skip to first unread message

Tom Bullers

unread,
Mar 21, 2001, 2:21:11 AM3/21/01
to

Anyone had luck getting serial ports to work on Linux? under Java? I'm
following instructions from:

http://www.interstice.com/~kevinh/linuxcomm.html carefully and I keep
getting errors.

$ java SimpleRead
Found port: /dev/ttyS0
Exception in thread "main" java.lang.NullPointerException
at SimpleRead.<init>(SimpleRead.java:96)
at SimpleRead.main(SimpleRead.java:74)
$

If anyone can lend a hand on this it would be greatly appreciated. Thanks.

-tom

Jon Skeet

unread,
Mar 21, 2001, 3:27:57 AM3/21/01
to

If you post the code, we'll have more of a chance of seeing what's
wrong...

--
Jon Skeet - sk...@pobox.com
http://www.pobox.com/~skeet

Tom Bullers

unread,
Mar 21, 2001, 10:09:10 AM3/21/01
to

I believe the problem lies in the serial driver installation. The test
program SimpleRead that comes with the Sun communications API works fine on
my Windows Machine but fails with the following error when I execute it on
the Linux box.

> > $ java SimpleRead
> > Found port: /dev/ttyS0
> > Exception in thread "main" java.lang.NullPointerException
> > at SimpleRead.<init>(SimpleRead.java:96)
> > at SimpleRead.main(SimpleRead.java:74)
> > $

I've run other test programs that also fail on the Linux installation and
work on WinNT. I'm lead to believe that the problem is not in the source
code for the test programs but in my serial driver implementation on the
Linux Platform.

So I am seeking help for people who have implemented serial drivers for Java
under Linux and might be able to pass along some insight. Anyone out there
doing serial programming under Linux?

Below is the source code from Sun if it is of use. Thanks.

/*
* @(#)SimpleRead.java 1.12 98/06/25 SMI
*
* 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.util.*;
import javax.comm.*;

/**
* Class declaration
*
*
* @author
* @version 1.8, 08/03/00
*/
public class SimpleRead 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 = "/dev/ttyS0";

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;
SimpleRead reader = new SimpleRead();
}
}
}
if (!portFound) {
System.out.println("port " + defaultPort + " not found.");
}

}

/**
* Constructor declaration
*
*
* @see
*/
public SimpleRead() {
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) {}

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) {
switch (event.getEventType()) {

case SerialPortEvent.BI:

case SerialPortEvent.OE:

case SerialPortEvent.FE:

case SerialPortEvent.PE:

case SerialPortEvent.CD:

case SerialPortEvent.CTS:

case SerialPortEvent.DSR:

case SerialPortEvent.RI:

case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;

case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[20];

try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
}

System.out.print(new String(readBuffer));
} catch (IOException e) {}

break;
}
}

}

"Jon Skeet" <sk...@pobox.com> wrote in message
news:MPG.1522766a1...@10.1.1.51...

Jon Skeet

unread,
Mar 21, 2001, 10:37:06 AM3/21/01
to
Tom Bullers <tom-b...@uiowa.edu> wrote:
>
> I believe the problem lies in the serial driver installation. The test
> program SimpleRead that comes with the Sun communications API works fine on
> my Windows Machine but fails with the following error when I execute it on
> the Linux box.
>
> > > $ java SimpleRead
> > > Found port: /dev/ttyS0
> > > Exception in thread "main" java.lang.NullPointerException
> > > at SimpleRead.<init>(SimpleRead.java:96)
> > > at SimpleRead.main(SimpleRead.java:74)
> > > $
>
> I've run other test programs that also fail on the Linux installation and
> work on WinNT. I'm lead to believe that the problem is not in the source
> code for the test programs but in my serial driver implementation on the
> Linux Platform.
>
> So I am seeking help for people who have implemented serial drivers for Java
> under Linux and might be able to pass along some insight. Anyone out there
> doing serial programming under Linux?

Do you have access rights to that serial port? That could well be the
problem.

0 new messages