]> sigrok.org Git - libserialport.git/blobdiff - serialport.c
Make sp_flush take an option for what to flush.
[libserialport.git] / serialport.c
index 353cd347118c61c468584fd4256d51b0001a6933..92156b476471cdf73f3a3efefe05bba69aff6795 100644 (file)
@@ -505,17 +505,31 @@ enum sp_return sp_close(struct sp_port *port)
        return SP_OK;
 }
 
-enum sp_return sp_flush(struct sp_port *port)
+enum sp_return sp_flush(struct sp_port *port, enum sp_buffer buffers)
 {
        CHECK_PORT();
 
 #ifdef _WIN32
+       DWORD flags = 0;
+       if (buffers & SP_BUF_INPUT)
+               flags |= PURGE_RXCLEAR;
+       if (buffers & SP_BUF_OUTPUT)
+               flags |= PURGE_TXCLEAR;
+
        /* Returns non-zero upon success, 0 upon failure. */
-       if (PurgeComm(port->hdl, PURGE_RXCLEAR | PURGE_TXCLEAR) == 0)
+       if (PurgeComm(port->hdl, flags) == 0)
                return SP_ERR_FAIL;
 #else
+       int flags = 0;
+       if (buffers & SP_BUF_BOTH)
+               flags = TCIOFLUSH;
+       else if (buffers & SP_BUF_INPUT)
+               flags = TCIFLUSH;
+       if (buffers & SP_BUF_OUTPUT)
+               flags = TCOFLUSH;
+
        /* Returns 0 upon success, -1 upon failure. */
-       if (tcflush(port->fd, TCIOFLUSH) < 0)
+       if (tcflush(port->fd, flags) < 0)
                return SP_ERR_FAIL;
 #endif
        return SP_OK;