X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=serialport.c;h=522cafa5e014eebb705bce00da23653a31232d44;hb=8cf7c6978f9fa9c7ec706440080c10755f357b5c;hp=ab1baa76df2cadd5a8af15e5807c6e55c2a80e80;hpb=90cc3ee62b267ba5009fddd72f63b411ad466faa;p=libserialport.git diff --git a/serialport.c b/serialport.c index ab1baa7..522cafa 100644 --- a/serialport.c +++ b/serialport.c @@ -1298,6 +1298,42 @@ enum sp_return sp_set_flowcontrol(struct sp_port *port, enum sp_flowcontrol flow return SP_OK; } +enum sp_return sp_get_signals(struct sp_port *port, enum sp_signal *signals) +{ + CHECK_PORT(); + + if (!signals) + return SP_ERR_ARG; + + *signals = 0; +#ifdef _WIN32 + DWORD bits; + if (GetCommModemStatus(port->hdl, &bits) == 0) + return SP_ERR_FAIL; + if (bits & MS_CTS_ON) + *signals |= SP_SIG_CTS; + if (bits & MS_DSR_ON) + *signals |= SP_SIG_DSR; + if (bits & MS_RING_ON) + *signals |= SP_SIG_DCD; + if (bits & MS_RLSD_ON) + *signals |= SP_SIG_RI; +#else + int bits; + if (ioctl(port->fd, TIOCMGET, &bits) < 0) + return SP_ERR_FAIL; + if (bits & TIOCM_CTS) + *signals |= SP_SIG_CTS; + if (bits & TIOCM_DSR) + *signals |= SP_SIG_DSR; + if (bits & TIOCM_CAR) + *signals |= SP_SIG_DCD; + if (bits & TIOCM_RNG) + *signals |= SP_SIG_RI; +#endif + return SP_OK; +} + enum sp_return sp_start_break(struct sp_port *port) { CHECK_PORT();