X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fmotech-lps-30x%2Fprotocol.c;h=c7f65e1001fc33b5015febadbaf9f2f428f1557d;hb=6433156c3275df933e4bf6dcfb020c91fca0ae86;hp=c8ac58ac82d1885228e6cf6f90f1c32298059912;hpb=93b118da4fec6976df924eb77121f07b361b8330;p=libsigrok.git diff --git a/src/hardware/motech-lps-30x/protocol.c b/src/hardware/motech-lps-30x/protocol.c index c8ac58ac..c7f65e10 100644 --- a/src/hardware/motech-lps-30x/protocol.c +++ b/src/hardware/motech-lps-30x/protocol.c @@ -25,7 +25,6 @@ #include #include - #include "protocol.h" /** Send data packets for current measurements. */ @@ -83,14 +82,14 @@ static void process_line(struct sr_dev_inst *sdi) case AQ_I2: if (sr_atod(devc->buf, &dbl) != SR_OK) { sr_err("Failed to convert '%s' to double, errno=%d %s", - devc->buf, errno, strerror(errno)); + devc->buf, errno, g_strerror(errno)); dbl = 0.0; } break; case AQ_STATUS: if (sr_atoi(devc->buf, &auxint) != SR_OK) { sr_err("Failed to convert '%s' to int, errno=%d %s", - devc->buf, errno, strerror(errno)); + devc->buf, errno, g_strerror(errno)); auxint = 0; } break; @@ -189,50 +188,53 @@ SR_PRIV int motech_lps_30x_receive_data(int fd, int revents, void *cb_data) sdi->driver->dev_acquisition_stop(sdi, cb_data); } - /* Request next packet, if required. */ - if ((sdi->status == SR_ST_ACTIVE) && (devc->acq_running)){ - if (devc->acq_req_pending) { - gint64 elapsed_us = g_get_monotonic_time() - devc->req_sent_at; - if (elapsed_us > (REQ_TIMEOUT_MS * 1000)) { - sr_spew("Request timeout: req=%d t=%lldus", (int)devc->acq_req, elapsed_us); - devc->acq_req_pending = 0; - } + /* Only request the next packet if required. */ + if (!((sdi->status == SR_ST_ACTIVE) && (devc->acq_running))) + return TRUE; + + if (devc->acq_req_pending) { + int64_t elapsed_us = g_get_monotonic_time() - devc->req_sent_at; + if (elapsed_us > (REQ_TIMEOUT_MS * 1000)) { + sr_spew("Request timeout: req=%d t=%" PRIi64 "us", + (int)devc->acq_req, elapsed_us); + devc->acq_req_pending = 0; } - if (devc->acq_req_pending == 0) { - switch (devc->acq_req) { - case AQ_NONE: /* Fall through */ - case AQ_STATUS: - devc->acq_req = AQ_U1; - lps_send_req(serial, "VOUT1"); - break; - case AQ_U1: - devc->acq_req = AQ_I1; - lps_send_req(serial, "IOUT1"); - break; - case AQ_I1: - if (devc->model->num_channels == 1) { - devc->acq_req = AQ_STATUS; - lps_send_req(serial, "STATUS"); - } else { - devc->acq_req = AQ_U2; - lps_send_req(serial, "VOUT2"); - } - break; - case AQ_U2: - devc->acq_req = AQ_I2; - lps_send_req(serial, "IOUT2"); - break; - case AQ_I2: + } + + if (devc->acq_req_pending == 0) { + switch (devc->acq_req) { + case AQ_NONE: /* Fall through */ + case AQ_STATUS: + devc->acq_req = AQ_U1; + lps_send_req(serial, "VOUT1"); + break; + case AQ_U1: + devc->acq_req = AQ_I1; + lps_send_req(serial, "IOUT1"); + break; + case AQ_I1: + if (devc->model->num_channels == 1) { devc->acq_req = AQ_STATUS; lps_send_req(serial, "STATUS"); - break; - default: - sr_err("Illegal devc->acq_req=%d", devc->acq_req); - return SR_ERR; + } else { + devc->acq_req = AQ_U2; + lps_send_req(serial, "VOUT2"); } - devc->req_sent_at = g_get_real_time(); - devc->acq_req_pending = 1; + break; + case AQ_U2: + devc->acq_req = AQ_I2; + lps_send_req(serial, "IOUT2"); + break; + case AQ_I2: + devc->acq_req = AQ_STATUS; + lps_send_req(serial, "STATUS"); + break; + default: + sr_err("Illegal devc->acq_req=%d", devc->acq_req); + return SR_ERR; } + devc->req_sent_at = g_get_real_time(); + devc->acq_req_pending = 1; } return TRUE;