X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Frdtech-tc%2Fprotocol.c;h=36477858876cbaa588db2f15e5f67734dd2d5701;hb=a82490b6f7ea4a65a45d96e1a55c7bd74a4e49c1;hp=39d52ba5c3ea6935e127f6f48e68a1a992b79f67;hpb=63f46e3e6f1b3b0a20a1da45ad10a1cd0a8937ab;p=libsigrok.git diff --git a/src/hardware/rdtech-tc/protocol.c b/src/hardware/rdtech-tc/protocol.c index 39d52ba5..36477858 100644 --- a/src/hardware/rdtech-tc/protocol.c +++ b/src/hardware/rdtech-tc/protocol.c @@ -156,20 +156,25 @@ SR_PRIV int rdtech_tc_probe(struct sr_serial_dev_inst *serial, struct dev_contex return SR_OK; } -SR_PRIV int rdtech_tc_poll(const struct sr_dev_inst *sdi) +SR_PRIV int rdtech_tc_poll(const struct sr_dev_inst *sdi, gboolean force) { struct dev_context *devc; + int64_t now, elapsed; struct sr_serial_dev_inst *serial; + devc = sdi->priv; + now = g_get_monotonic_time() / 1000; + elapsed = now - devc->cmd_sent_at; + if (!force && elapsed < TC_POLL_PERIOD_MS) + return SR_OK; + serial = sdi->conn; if (serial_write_blocking(serial, poll_cmd, strlen(poll_cmd), SERIAL_WRITE_TIMEOUT_MS) < 0) { sr_err("Unable to send poll request."); return SR_ERR; } - - devc = sdi->priv; - devc->cmd_sent_at = g_get_monotonic_time() / 1000; + devc->cmd_sent_at = now; return SR_OK; } @@ -193,9 +198,11 @@ static void handle_poll_data(const struct sr_dev_inst *sdi) return; } - for (ch = sdi->channels, i = 0; ch; ch = g_slist_next(ch), i++) { + i = 0; + for (ch = sdi->channels; ch; ch = g_slist_next(ch)) { bv_send_analog_channel(sdi, ch->data, &devc->channels[i], poll_pkt, TC_POLL_LEN); + i++; } sr_sw_limits_update_samples_read(&devc->limits, 1); @@ -227,7 +234,6 @@ SR_PRIV int rdtech_tc_receive_data(int fd, int revents, void *cb_data) struct sr_dev_inst *sdi; struct dev_context *devc; struct sr_serial_dev_inst *serial; - int64_t now, elapsed; (void)fd; @@ -245,10 +251,7 @@ SR_PRIV int rdtech_tc_receive_data(int fd, int revents, void *cb_data) return TRUE; } - now = g_get_monotonic_time() / 1000; - elapsed = now - devc->cmd_sent_at; - if (elapsed > TC_POLL_PERIOD_MS) - rdtech_tc_poll(sdi); + rdtech_tc_poll(sdi, FALSE); return TRUE; }