Reputation: 71
I'm trying to connect a serial application on ubuntu with Java
After searching and reading resources,I add comm.jar and RXTXcomm.jar in the library.
I use the following code to identify the comports. In my system there are three ports but it is showing false in ports.hasMoreElements()
method.
Kindly look into the code and help me.
String wantedPortName = "/dev/ttya";
///dev/ttyS0 و /dev/ttyS1 نیز تست شد
Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
CommPortIdentifier portId = null; // will be set if port found
while (portIdentifiers.hasMoreElements())
{
CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement();
if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL &&
pid.getName().equals(wantedPortName))
{
portId = pid;
break;
}
}
if(portId == null)
{
System.err.println("Could not find serial port " + wantedPortName);
System.exit(1);
}
Upvotes: 0
Views: 5426
Reputation: 1682
In my case, I'm using Ubuntu, and my notebook does not have any serial or paralel ports.
So, you have to simulate this kind of port:
apt-get install socat
Run it:
socat -d -d pty,raw,echo=0, pty,raw,echo=0
According to output, pay attention to "devices" created:
2014/02/05 01:04:32 socat[7411] N PTY is /dev/pts/2
2014/02/05 01:04:32 socat[7411] N PTY is /dev/pts/3
2014/02/05 01:04:32 socat[7411] N starting data transfer loop with FDs [3,3] and [5,5]
Stop socat [CTRL]+[C] and symlink it to a location that RXTX will recognise as a device, due to "tty" prefix:
sudo ln -s /dev/pts/2 /dev/ttyUSB02
sudo ln -s /dev/pts/3 /dev/ttyUSB03
Now, run socat again
socat -d -d pty,raw,echo=0 pty,raw,echo=0
Now, using following code, you will see 2 virtual ports:
Enumeration portList = CommPortIdentifier.getPortIdentifiers();//this line was false
System.out.println(portList.hasMoreElements());
while(portList.hasMoreElements()){
System.out.println("Has more elements");
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
System.out.println(portId.getName());
}
else{
System.out.println(portId.getName());
}
}
system.out:
true
Has more elements
/dev/ttyUSB03
Has more elements
/dev/ttyUSB02
Upvotes: 1
Reputation: 516
It looks like you are filtering out the port you want. A /dev/tty is a special character device... not a serial port so
if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL &&
pid.getName().equals(wantedPortName))
should never match your string.
To prove this, try iterating over your available ports. I don't know if a tty can can be detected by RXTX but play with it and let us know.
Ref: http://rxtx.qbang.org/wiki/index.php/Discovering_available_comm_ports
EDIT: So you don't have any serial devices to test with? All I sat is make sure you have everything installed properly, including the properties file as described in this file.
http://rxtx.qbang.org/pub/rxtx/rxtx-2.0-7pre2/INSTALL
Once done, install a null modem emulator or find a serial device to test with.
Upvotes: 0