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;
}
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);
struct sr_dev_inst *sdi;
struct dev_context *devc;
struct sr_serial_dev_inst *serial;
- int64_t now, elapsed;
(void)fd;
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;
}