From: Martin Ling Date: Thu, 14 Nov 2013 22:27:51 +0000 (+0000) Subject: Store control bits in sp_port_data on Unix. X-Git-Tag: libserialport-0.1.0~117 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=824dcb45618146cac9103e313e30290f749940d3;p=libserialport.git Store control bits in sp_port_data on Unix. --- diff --git a/serialport.c b/serialport.c index 6a6e305..732714b 100644 --- a/serialport.c +++ b/serialport.c @@ -51,6 +51,7 @@ struct sp_port_data { DCB dcb; #else struct termios term; + int controlbits; int rts; int cts; int dtr; @@ -534,23 +535,21 @@ 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) + if (ioctl(port->fd, TIOCMGET, &data->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->rts = (data->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->dtr = (data->controlbits & TIOCM_DTR) ? SP_DTR_ON : SP_DTR_OFF; data->dsr = SP_DSR_IGNORE; #endif return SP_OK;