]> sigrok.org Git - libserialport.git/commitdiff
Add sp_drain() function.
authorMartin Ling <redacted>
Wed, 20 Nov 2013 17:30:50 +0000 (17:30 +0000)
committerBert Vermeulen <redacted>
Fri, 22 Nov 2013 01:11:34 +0000 (02:11 +0100)
libserialport.h.in
serialport.c

index e866caba3b74c7ff3463bd5ad7bd88a62f47399e..79f315f6c0df6401a289f26d0fd8b55e7f2e33f0 100644 (file)
@@ -526,6 +526,14 @@ enum sp_return sp_write(struct sp_port *port, const void *buf, size_t count);
  */
 enum sp_return sp_flush(struct sp_port *port, enum sp_buffer buffers);
 
+/**
+ * Wait for buffered data to be transmitted.
+ *
+ * @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ *         if an invalid port is passed.
+ */
+enum sp_return sp_drain(struct sp_port *port);
+
 /**
  * @}
  * @defgroup Errors Obtaining error information
index 92156b476471cdf73f3a3efefe05bba69aff6795..6104f241a17cb34db7638ef00ac9cebaff4529ce 100644 (file)
@@ -535,6 +535,23 @@ enum sp_return sp_flush(struct sp_port *port, enum sp_buffer buffers)
        return SP_OK;
 }
 
+enum sp_return sp_drain(struct sp_port *port)
+{
+       CHECK_PORT();
+
+#ifdef _WIN32
+       /* Returns non-zero upon success, 0 upon failure. */
+       if (FlushFileBuffers(port->hdl) == 0)
+               return SP_ERR_FAIL;
+#else
+       /* Returns 0 upon success, -1 upon failure. */
+       if (tcdrain(port->fd) < 0)
+               return SP_ERR_FAIL;
+#endif
+
+       return SP_OK;
+}
+
 enum sp_return sp_write(struct sp_port *port, const void *buf, size_t count)
 {
        CHECK_PORT();