From 2092ca0c0b03ef61e09d46030e982fe4584f1c0c Mon Sep 17 00:00:00 2001 From: Christian Meusel Date: Wed, 23 Jun 2021 16:55:56 +0200 Subject: [PATCH] Fix RS-485 delays passed to ioctl The kernel wants to have them in milliseconds where SerialPort.setRs485ModeParameters uses microseconds. --- src/main/c/Posix/SerialPort_Posix.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/c/Posix/SerialPort_Posix.c b/src/main/c/Posix/SerialPort_Posix.c index 600a0ec..d69b452 100644 --- a/src/main/c/Posix/SerialPort_Posix.c +++ b/src/main/c/Posix/SerialPort_Posix.c @@ -393,8 +393,11 @@ JNIEXPORT jboolean JNICALL Java_com_fazecast_jSerialComm_SerialPort_configPort(J rs485Conf.flags &= ~(SER_RS485_RTS_ON_SEND); rs485Conf.flags |= SER_RS485_RTS_AFTER_SEND; } - rs485Conf.delay_rts_before_send = rs485DelayBefore; - rs485Conf.delay_rts_after_send = rs485DelayAfter; + // SerialPort defines delays in microseconds and Linux expects + // milliseconds (see + // https://github.com/torvalds/linux/blob/0c18f29aae7ce3dadd26d8ee3505d07cc982df75/include/uapi/linux/serial.h#L129). + rs485Conf.delay_rts_before_send = rs485DelayBefore / 1000; + rs485Conf.delay_rts_after_send = rs485DelayAfter / 1000; ioctl(serialPortFD, TIOCSRS485, &rs485Conf); } #endif