From 4e2a6adf1267b2787ebd56a96e6d2d3f2469cbdf Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 24 Nov 2014 00:51:12 +0000 Subject: [PATCH] Move serial line control error checks to lower level routines Moved in preference to introducing errno.h into rig.c. --- src/rig.c | 4 ---- src/serial.c | 54 +++++++++++++++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/rig.c b/src/rig.c index c9db373ee..3aa3edb07 100644 --- a/src/rig.c +++ b/src/rig.c @@ -537,10 +537,6 @@ int HAMLIB_API rig_open(RIG *rig) status = ser_set_dtr(&rs->pttport, RIG_PTT_OFF); else if (rs->pttport.type.ptt == RIG_PTT_SERIAL_RTS) status = ser_set_rts(&rs->pttport, RIG_PTT_OFF); - if (status != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s: Cannot set serial control line - %s\n", __func__, strerror(errno)); - } } break; case RIG_PTT_PARALLEL: diff --git a/src/serial.c b/src/serial.c index 7dcfa1e0a..ec93a2ebe 100644 --- a/src/serial.c +++ b/src/serial.c @@ -430,22 +430,29 @@ int ser_close(hamlib_port_t *p) int HAMLIB_API ser_set_rts(hamlib_port_t *p, int state) { unsigned int y = TIOCM_RTS; + int rc; rig_debug(RIG_DEBUG_VERBOSE, "%s: RTS=%d\n", __func__, state); #if defined(TIOCMBIS) && defined(TIOCMBIC) - return IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y) < 0 ? - -RIG_EIO : RIG_OK; + rc = IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y); #else - if (IOCTL(p->fd, TIOCMGET, &y) < 0) { - return -RIG_EIO; - } - if (state) - y |= TIOCM_RTS; - else - y &= ~TIOCM_RTS; - return IOCTL(p->fd, TIOCMSET, &y) < 0 ? -RIG_EIO : RIG_OK; + rc = IOCTL(p->fd, TIOCMGET, &y); + if (rc >= 0) + { + if (state) + y |= TIOCM_RTS; + else + y &= ~TIOCM_RTS; + rc = IOCTL(p->fd, TIOCMSET, &y); + } #endif + if (rc < 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: Cannot change RTS - %s\n", __func__, strerror(errno)); + return -RIG_EIO; + } + return RIG_OK; } /** @@ -473,22 +480,29 @@ int HAMLIB_API ser_get_rts(hamlib_port_t *p, int *state) int HAMLIB_API ser_set_dtr(hamlib_port_t *p, int state) { unsigned int y = TIOCM_DTR; + int rc; rig_debug(RIG_DEBUG_VERBOSE, "%s: DTR=%d\n", __func__, state); #if defined(TIOCMBIS) && defined(TIOCMBIC) - return IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y) < 0 ? - -RIG_EIO : RIG_OK; + rc = IOCTL(p->fd, state ? TIOCMBIS : TIOCMBIC, &y); #else - if (IOCTL(p->fd, TIOCMGET, &y) < 0) { - return -RIG_EIO; - } - if (state) - y |= TIOCM_DTR; - else - y &= ~TIOCM_DTR; - return IOCTL(p->fd, TIOCMSET, &y) < 0 ? -RIG_EIO : RIG_OK; + rc = IOCTL(p->fd, TIOCMGET, &y); + if (rc >= 0) + { + if (state) + y |= TIOCM_DTR; + else + y &= ~TIOCM_DTR; + rc = IOCTL(p->fd, TIOCMSET, &y); + } #endif + if (rc < 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: Cannot change DTR - %s\n", __func__, strerror(errno)); + return -RIG_EIO; + } + return RIG_OK; } /**