Identificación de puerto serie con java en ubuntu

Estoy tratando de conectar una aplicación serie en Ubuntu con Java
Después de buscar y leer recursos, agrego comm.jar y RXTXcomm.jar en la biblioteca.
Utilizo el siguiente código para identificar los comports. En mi sistema hay tres puertos, pero se muestra falso en el método ports.hasMoreElements() .
Por favor, mira el código y ayúdame.

 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); } 

En mi caso, estoy usando Ubuntu y mi portátil no tiene ningún puerto serie o paralelo.

Entonces, tienes que simular este tipo de puerto:

 apt-get install socat 

Ejecutarlo:

 socat -d -d pty,raw,echo=0, pty,raw,echo=0 

Según la salida, preste atención a los “dispositivos” creados:

 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] 

Detenga socat [CTRL] + [C] y haga un enlace simbólico a una ubicación que RXTX reconocerá como un dispositivo, debido al prefijo “tty”:

 sudo ln -s /dev/pts/2 /dev/ttyUSB02 sudo ln -s /dev/pts/3 /dev/ttyUSB03 

Ahora, corre socat de nuevo

 socat -d -d pty,raw,echo=0 pty,raw,echo=0 

Ahora, utilizando el siguiente código, verá 2 puertos virtuales:

  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()); } } 

sistema.out:

 true Has more elements /dev/ttyUSB03 Has more elements /dev/ttyUSB02 

Parece que estás filtrando el puerto que deseas. A / dev / tty es un dispositivo de caracteres especiales … no es un puerto serie, por lo que

 if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL && pid.getName().equals(wantedPortName)) 

nunca debe coincidir con su cadena.

Para probar esto, intente iterar sobre sus puertos disponibles. No sé si un tty puede ser detectado por RXTX, pero juegue con él y háganoslo saber.

Ref: http://rxtx.qbang.org/wiki/index.php/Discovering_available_comm_ports

EDIT: ¿Así que no tienes ningún dispositivo serie para probar? Todo lo que me senté es asegurarse de tener todo instalado correctamente, incluido el archivo de propiedades como se describe en este archivo.

http://rxtx.qbang.org/pub/rxtx/rxtx-2.0-7pre2/INSTALL

Una vez hecho esto, instale un emulador de módem nulo o busque un dispositivo serie para probar.