From 9f90173cbd7b3c79f51b4e9729bcbd91a5c30a71 Mon Sep 17 00:00:00 2001 From: Martin Ling Date: Thu, 14 Nov 2013 21:27:06 +0000 Subject: [PATCH] Retrieve current control line settings in start_config. --- serialport.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/serialport.c b/serialport.c index 58880d4..83cb529 100644 --- a/serialport.c +++ b/serialport.c @@ -504,8 +504,24 @@ static int start_config(struct sp_port *port, struct sp_port_data *data) if (!GetCommState(port->hdl, &data->dcb)) return SP_ERR_FAIL; #else + int controlbits; + if (tcgetattr(port->fd, &data->term) < 0) return SP_ERR_FAIL; + + if (ioctl(port->fd, TIOCMGET, &controlbits) < 0) + return SP_ERR_FAIL; + + if (data->term.c_cflag & CRTSCTS) { + data->rts = SP_RTS_FLOW_CONTROL; + data->cts = SP_CTS_FLOW_CONTROL; + } else { + data->rts = (controlbits & TIOCM_RTS) ? SP_RTS_ON : SP_RTS_OFF; + data->cts = SP_CTS_IGNORE; + } + + data->dtr = (controlbits & TIOCM_DTR) ? SP_DTR_ON : SP_DTR_OFF; + data->dsr = SP_DSR_IGNORE; #endif return SP_OK; }