]> sigrok.org Git - libserialport.git/commitdiff
Store control bits in sp_port_data on Unix.
authorMartin Ling <redacted>
Thu, 14 Nov 2013 22:27:51 +0000 (22:27 +0000)
committerMartin Ling <redacted>
Fri, 15 Nov 2013 11:43:07 +0000 (11:43 +0000)
serialport.c

index 6a6e305bb2988ecc20d421b9a1f1b576f33dd2b4..732714b157364d40a5e59a5d75813e807f6bfc08 100644 (file)
@@ -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;