X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fmotech-lps-30x%2Fprotocol.c;h=03e9cdd54885a39ef5e1a4a84d6df7bc80b201c4;hb=695dc859c15ba4190f5c1aa2e1a6e2dc6a6e5845;hp=78d822f0ba21fd8724511d860efebb05d7ce1262;hpb=e050124095c3e0109ead1fc162504cc513a4e08c;p=libsigrok.git diff --git a/src/hardware/motech-lps-30x/protocol.c b/src/hardware/motech-lps-30x/protocol.c index 78d822f0..03e9cdd5 100644 --- a/src/hardware/motech-lps-30x/protocol.c +++ b/src/hardware/motech-lps-30x/protocol.c @@ -23,9 +23,9 @@ * @internal */ +#include #include #include - #include "protocol.h" /** Send data packets for current measurements. */ @@ -33,12 +33,12 @@ static void send_data(struct sr_dev_inst *sdi) { struct dev_context *devc; struct sr_datafeed_packet packet; - struct sr_datafeed_analog analog; + struct sr_datafeed_analog_old analog; int i; float data[MAX_CHANNELS]; devc = sdi->priv; - packet.type = SR_DF_ANALOG; + packet.type = SR_DF_ANALOG_OLD; packet.payload = &analog; analog.channels = sdi->channels; analog.num_samples = 1; @@ -77,17 +77,20 @@ static void process_line(struct sr_dev_inst *sdi) case 1: /* Waiting for data reply to request */ /* Convert numbers */ switch (devc->acq_req) { - case AQ_U1: case AQ_U2: case AQ_I1: case AQ_I2: + case AQ_U1: + case AQ_U2: + case AQ_I1: + 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; @@ -131,7 +134,6 @@ static void process_line(struct sr_dev_inst *sdi) devc->buflen = 0; } - SR_PRIV int motech_lps_30x_receive_data(int fd, int revents, void *cb_data) { struct sr_dev_inst *sdi; @@ -179,59 +181,61 @@ SR_PRIV int motech_lps_30x_receive_data(int fd, int revents, void *cb_data) /* If number of samples or time limit reached, stop acquisition. */ if (devc->limit_samples && (devc->num_samples >= devc->limit_samples)) - sdi->driver->dev_acquisition_stop(sdi, cb_data); + sdi->driver->dev_acquisition_stop(sdi); if (devc->limit_msec) { elapsed_s = g_timer_elapsed(devc->elapsed_msec, NULL); if ((elapsed_s * 1000) >= devc->limit_msec) - sdi->driver->dev_acquisition_stop(sdi, cb_data); + sdi->driver->dev_acquisition_stop(sdi); } - /* 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;