X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fserial_libsp.c;h=7cf5a4602efbea26aef1a58886ca1667625bed8c;hb=ed787682255cdecbb3ba8cefc87c20182b97ce7b;hp=b16cd12e412ca9a66caa90a0062d869ea9103a8f;hpb=a7b8692ed061c5baff6620c0839db85465cd24c9;p=libsigrok.git diff --git a/src/serial_libsp.c b/src/serial_libsp.c index b16cd12e..7cf5a460 100644 --- a/src/serial_libsp.c +++ b/src/serial_libsp.c @@ -31,9 +31,7 @@ #include /* for HANDLE */ #endif -/** @cond PRIVATE */ #define LOG_PREFIX "serial-libsp" -/** @endcond */ /** * @file @@ -57,7 +55,14 @@ static int sr_ser_libsp_open(struct sr_serial_dev_inst *serial, int flags) char *error; int sp_flags; - sp_get_port_by_name(serial->port, &serial->sp_data); + ret = sp_get_port_by_name(serial->port, &serial->sp_data); + if (ret != SP_OK) { + error = sp_last_error_message(); + sr_err("Error getting port from name %s: (%d) %s.", + serial->port, sp_last_error_code(), error); + sp_free_error_message(error); + return SR_ERR; + } sp_flags = 0; if (flags & SERIAL_RDWR) @@ -282,13 +287,35 @@ static int sr_ser_libsp_set_params(struct sr_serial_dev_inst *serial, return SR_OK; } -/** @cond PRIVATE */ +static int sr_ser_libsp_set_handshake(struct sr_serial_dev_inst *serial, + int rts, int dtr) +{ + int ret; + + if (!serial->sp_data) { + sr_dbg("Cannot configure unopened serial port %s.", serial->port); + return SR_ERR; + } + + if (rts >= 0) { + ret = sp_set_rts(serial->sp_data, rts ? SP_RTS_ON : SP_RTS_OFF); + if (ret != SP_OK) + return SR_ERR; + } + if (dtr >= 0) { + ret = sp_set_dtr(serial->sp_data, dtr ? SP_DTR_ON : SP_DTR_OFF); + if (ret != SP_OK) + return SR_ERR; + } + + return SR_OK; +} + #ifdef G_OS_WIN32 typedef HANDLE event_handle; #else typedef int event_handle; #endif -/** @endcond */ static int sr_ser_libsp_source_add_int(struct sr_serial_dev_inst *serial, int events, @@ -498,6 +525,7 @@ static struct ser_lib_functions serlib_sp = { .write = sr_ser_libsp_write, .read = sr_ser_libsp_read, .set_params = sr_ser_libsp_set_params, + .set_handshake = sr_ser_libsp_set_handshake, .setup_source_add = sr_ser_libsp_source_add, .setup_source_remove = sr_ser_libsp_source_remove, .list = sr_ser_libsp_list,