mirror of
git://sigrok.org/libserialport
synced 2023-08-10 21:13:24 +03:00
Add sp_input_waiting() and sp_output_waiting() functions.
This commit is contained in:
parent
e3dcf9068e
commit
3353c22f32
@ -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);
|
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.
|
* Flush serial port buffers. Data in the selected buffer(s) is discarded.
|
||||||
*
|
*
|
||||||
|
46
serialport.c
46
serialport.c
@ -1131,6 +1131,52 @@ enum sp_return sp_nonblocking_read(struct sp_port *port, void *buf, size_t count
|
|||||||
#endif
|
#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__
|
#ifdef __linux__
|
||||||
static enum sp_return get_baudrate(int fd, int *baudrate)
|
static enum sp_return get_baudrate(int fd, int *baudrate)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user