Me comunico con una unidad para controlar una antena de satélite a través de una conexión en serie.Java serialport cerrar bloques
Abrir una conexión con el dispositivo serie:
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
portIdentifier = CommPortIdentifier.getPortIdentifier(device);
serialPort = (SerialPort) portIdentifier.open(name,
serialPort.setSerialPortParams(baudrate, databits, stopbits, parity);
serialPort.setFlowControlMode(flowMode);
bufferedReader = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
outputStream = serialPort.getOutputStream();
Si la unidad es de estar disponible, tengo que limpiar la corriente antes de poder enviar nuevos comandos, una vez que el dispositivo es nuevo. Pero este método claro en la secuencia de entrada/salida bloquea si el dispositivo está inactivo. También cerrando las transmisiones, o cerrando los bloques de SerialDevice.
¿Hay alguna manera de cerrar/borrar estas transmisiones o SerialDevice sin bloquear?
bufferedRead.close(); // blocks until device is up again
outputStream.close(); // blocks until device is up again
serialPort.close(); // blocks until device is up again
Hola Jürgen Hannärt, supongo que esta pregunta está desactualizada, pero utilicé (y sigo usando RXTX-API) - me funciona bien ... una solución para tu problema podría leer/escribir en un Seperate Thread, que dejaría el puerto libre para realizar operaciones cercanas en él. –
@MartinFrank ¿cuál es el punto de leer/escribir en un hilo separado? las transmisiones aún no podrían borrarse después del apagado del dispositivo – mangusta
o bien debería escuchar algún evento (si lo hubiera) asociado con el apagado del dispositivo o debería utilizar un bucle, al principio del cual, las transmisiones se borran. debería detectar el apagado del dispositivo (por ejemplo, 'null' u otro mensaje específico recibido en el flujo de entrada) y ese sería el final de la iteración del ciclo. nueva iteración comienza donde se llama a 'clear', pero se bloqueará hasta el próximo inicio, y cuando el dispositivo se inicie de nuevo, la iteración continuará hasta el próximo cierre – mangusta