mirror of
git://sigrok.org/libserialport
synced 2023-08-10 21:13:24 +03:00
Add sp_get_signals() function.
This commit is contained in:
parent
90cc3ee62b
commit
8cf7c6978f
@ -201,6 +201,18 @@ enum sp_flowcontrol {
|
|||||||
SP_FLOWCONTROL_DTRDSR = 3,
|
SP_FLOWCONTROL_DTRDSR = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Input signals. */
|
||||||
|
enum sp_signal {
|
||||||
|
/** Clear to send. */
|
||||||
|
SP_SIG_CTS = 1,
|
||||||
|
/** Data set ready. */
|
||||||
|
SP_SIG_DSR = 2,
|
||||||
|
/** Data carrier detect. */
|
||||||
|
SP_SIG_DCD = 4,
|
||||||
|
/** Ring indicator. */
|
||||||
|
SP_SIG_RI = 8,
|
||||||
|
};
|
||||||
|
|
||||||
/** A serial port. */
|
/** A serial port. */
|
||||||
struct sp_port {
|
struct sp_port {
|
||||||
/** Name used to open the port. */
|
/** Name used to open the port. */
|
||||||
@ -540,6 +552,22 @@ enum sp_return sp_drain(struct sp_port *port);
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the status of the control signals for the specified port.
|
||||||
|
*
|
||||||
|
* The user should allocate a variable of type "enum sp_signal" and pass a
|
||||||
|
* pointer to this variable to receive the result. The result is a bitmask
|
||||||
|
* in which individual signals can be checked by bitwise OR with values of
|
||||||
|
* the sp_signal enum.
|
||||||
|
*
|
||||||
|
* @param port Pointer to port structure.
|
||||||
|
* @param signals Pointer to variable to receive result.
|
||||||
|
*
|
||||||
|
* @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
|
||||||
|
* if an an invalid port or pointer is passed.
|
||||||
|
*/
|
||||||
|
enum sp_return sp_get_signals(struct sp_port *port, enum sp_signal *signals);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Put the port transmit line into the break state.
|
* Put the port transmit line into the break state.
|
||||||
*
|
*
|
||||||
|
36
serialport.c
36
serialport.c
@ -1298,6 +1298,42 @@ enum sp_return sp_set_flowcontrol(struct sp_port *port, enum sp_flowcontrol flow
|
|||||||
return SP_OK;
|
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)
|
enum sp_return sp_start_break(struct sp_port *port)
|
||||||
{
|
{
|
||||||
CHECK_PORT();
|
CHECK_PORT();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user