Bueno probando con la libreria JavaComm y RxTx me da un resultado(queriendo leer lo que transmite el dispositivo) por consola tal que este:
Código Java:
Ver originalportlist... gnu.io.CommPortEnumerator@2a15cd
el puerto identificado es Serial... 1
incapaz de abrir el puerto
el puerto identificado es Serial... 1
el puerto identificado es COM4... COM4
En el constructor SimpleRead()
InputStream...
gnu.
io.
RXTXPort$SerialInputStream@b0bad7
.......................
En la funcion run()
D
D<
El input Stream como podeis comprobar me devuelve una cadena rara con un @ y demas asi como el portlist.
El codigo es el siguiente:
Código Java:
Ver originalpublic class SimpleRead
implements Runnable, SerialPortEventListener
{ static CommPortIdentifier portId;
SerialPort serialPort;
byte[] readBuffer;
public static void main
(String[] args
) { portList = CommPortIdentifier.getPortIdentifiers();
System.
out.
println("portlist... "+portList
); while(portList.hasMoreElements()){
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
System.
out.
println("el puerto identificado es Serial... "+portId.
getPortType()); if (portId.getName().equals("COM4")) {
System.
out.
println("el puerto identificado es COM4... "+portId.
getName()); SimpleRead reader = new SimpleRead();
}else{
System.
out.
println("incapaz de abrir el puerto"); }
}
}
}
public SimpleRead(){
try {
System.
out.
println("En el constructor SimpleRead()"); serialPort = (SerialPort) portId.open("SimpleReadApp1111",500);
System.
out.
println("Serial Port... "+serialPort
); } catch (PortInUseException e) {
System.
out.
println("Excepcion de puerto en uso"); }
try {
inputStream = serialPort.getInputStream();
System.
out.
println("InputStream... "+inputStream
); System.
out.
println("IO Exception"); }
try {
serialPort.addEventListener(this);
System.
out.
println("Excepcion de Too many Listeners"); }
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
//no handshaking or other flow control
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
//timer on any read of the serial port
serialPort.enableReceiveTimeout(500);
System.
out.
println("......................."); } catch (UnsupportedCommOperationException e) {
System.
out.
println("Excepcion Unsuppoerted comm operation"); }
readThread
= new Thread(this); readThread.start();
}
public void run(){
try {
System.
out.
println("En la funcion run()"); System.
out.
println("Interrupted Exception en metodo run()"); }
}
public void serialEvent(SerialPortEvent event){
switch (event.getEventType()){
case SerialPortEvent.DATA_AVAILABLE:
readBuffer = new byte[8];
try {
while(inputStream.available()>0){
int numBytes = inputStream.read(readBuffer);
}
System.
out.
println("IO Exception en SerialEvent()"); }
break;
}
}
}
En consola la funcion run() dejandola ejecutada devuelve un par de caracteres extraños como una "D" quizá un simbolo "<" y un cuadrado, nose muy bien que significa eso. Aunque si en la linea
le quito el new String recoge algo como "[B@b1cc87"...es como que no sabe como recibir esos datos, creo que deberia recoger una cadena muy larga binaria.. a ver si me podeis ayudar que esta pasando y porq el inputstream devuelve eso
saludos!