NeuronRobotics / nrjavaserial

A Java Serial Port system. This is a fork of the RXTX project that uses in jar loading of the native code.
Other
344 stars 142 forks source link

After altering the baud rate, serial communication no longer works. #234

Open ramen2k10 opened 1 year ago

ramen2k10 commented 1 year ago

I'm attempting to contact with a chip card device using serial communication, which is linked to a reader via a serial port. The communication works fine when I use the initial baud rate 9600, but when I change the initial baud rate (9600) of my serial port communication to a higher baud rate value (e.g. - 115200), the device closes the connection, despite the fact that the same device works fine with a higher baud rate using the javax.comm library. Please see the code snippet attached.

public void setBaudRate(int rate) throws UnsupportedCommOperationException {
    if (null != serialPort) {
        if (serialPort.getBaudRate() != rate) {
            boolean rts = serialPort.isRTS();
            boolean dtr = serialPort.isDTR();
            serialPort = nrSerialPort.getSerialPortInstance();// Extracting the serialPort instance
            serialPort.setSerialPortParams(rate, serialPort.getDataBits(), serialPort.getStopBits(), serialPort.getParity());
            serialPort.setDTR(dtr);
        serialPort.setRTS(rts);
        }
    }
}

Is the baud rate changing supported by the nrjavaserial library?

fkamming commented 9 months ago

I'm attempting to contact with a chip card device using serial communication, which is linked to a reader via a serial port. The communication works fine when I use the initial baud rate 9600, but when I change the initial baud rate (9600) of my serial port communication to a higher baud rate value (e.g. - 115200), the device closes the connection, despite the fact that the same device works fine with a higher baud rate using the javax.comm library. Please see the code snippet attached.

public void setBaudRate(int rate) throws UnsupportedCommOperationException {
  if (null != serialPort) {
      if (serialPort.getBaudRate() != rate) {
          boolean rts = serialPort.isRTS();
          boolean dtr = serialPort.isDTR();
          serialPort = nrSerialPort.getSerialPortInstance();// Extracting the serialPort instance
          serialPort.setSerialPortParams(rate, serialPort.getDataBits(), serialPort.getStopBits(), serialPort.getParity());
          serialPort.setDTR(dtr);
      serialPort.setRTS(rts);
      }
  }
}

Is the baud rate changing supported by the nrjavaserial library?

Changing baud rate works fine in our code. I suspect what is missing in your code is disconnecting and reconnecting. Before you set the new baud rate call serialPort.disconnect(). And afterwards call serialPort.connect().