]> sigrok.org Git - libserialport.git/commitdiff
Add sp_input_waiting() and sp_output_waiting() functions.
authorMartin Ling <redacted>
Wed, 27 Nov 2013 02:55:18 +0000 (02:55 +0000)
committerMartin Ling <redacted>
Wed, 27 Nov 2013 02:55:18 +0000 (02:55 +0000)
libserialport.h.in
serialport.c

index ff2aaac75bb7b4a01d51f3d86c97bf3646a4e218..3d38a0dc3302b98a456cb1da007c684cd3ffe7a1 100644 (file)
@@ -827,6 +827,24 @@ enum sp_return sp_blocking_write(struct sp_port *port, const void *buf, size_t c
  */
 enum sp_return sp_nonblocking_write(struct sp_port *port, const void *buf, size_t count);
 
+/**
+ * Gets the number of bytes waiting in the input buffer.
+ *
+ * @param port Pointer to port structure.
+ *
+ * @return Number of bytes waiting on success, a negative error code otherwise.
+ */
+enum sp_return sp_input_waiting(struct sp_port *port);
+
+/**
+ * Gets the number of bytes waiting in the output buffer.
+ *
+ * @param port Pointer to port structure.
+ *
+ * @return Number of bytes waiting on success, a negative error code otherwise.
+ */
+enum sp_return sp_output_waiting(struct sp_port *port);
+
 /**
  * Flush serial port buffers. Data in the selected buffer(s) is discarded.
  *
index e2cf48abd33df6785a6930c39b5f4742f7cce2fa..af8f1b1e2239a2bec4b2e0fc7a40ba2ea3c40058 100644 (file)
@@ -1131,6 +1131,52 @@ enum sp_return sp_nonblocking_read(struct sp_port *port, void *buf, size_t count
 #endif
 }
 
+enum sp_return sp_input_waiting(struct sp_port *port)
+{
+       TRACE("%p", port);
+
+       CHECK_OPEN_PORT();
+
+       DEBUG("Checking input bytes waiting on port %s", port->name);
+
+#ifdef _WIN32
+       DWORD errors;
+       COMSTAT comstat;
+
+       if (ClearCommError(port->hdl, &errors, &comstat) == 0)
+               RETURN_FAIL("ClearComError() failed");
+       RETURN_VALUE("%d", comstat.cbInQue);
+#else
+       int bytes_waiting;
+       if (ioctl(port->fd, TIOCINQ, &bytes_waiting) < 0)
+               RETURN_FAIL("TIOCINQ ioctl failed");
+       RETURN_VALUE("%d", bytes_waiting);
+#endif
+}
+
+enum sp_return sp_output_waiting(struct sp_port *port)
+{
+       TRACE("%p", port);
+
+       CHECK_OPEN_PORT();
+
+       DEBUG("Checking output bytes waiting on port %s", port->name);
+
+#ifdef _WIN32
+       DWORD errors;
+       COMSTAT comstat;
+
+       if (ClearCommError(port->hdl, &errors, &comstat) == 0)
+               RETURN_FAIL("ClearComError() failed");
+       RETURN_VALUE("%d", comstat.cbOutQue);
+#else
+       int bytes_waiting;
+       if (ioctl(port->fd, TIOCOUTQ, &bytes_waiting) < 0)
+               RETURN_FAIL("TIOCOUTQ ioctl failed");
+       RETURN_VALUE("%d", bytes_waiting);
+#endif
+}
+
 #ifdef __linux__
 static enum sp_return get_baudrate(int fd, int *baudrate)
 {