- if (serial_write_blocking(serial, &POLL_CMD, sizeof(POLL_CMD) - 1,
- SERIAL_WRITE_TIMEOUT_MS) < 0) {
+ /*
+ * Don't send the request while receive data is being accumulated.
+ */
+ devc = sdi->priv;
+ if (!force && devc->buflen)
+ return SR_OK;
+
+ /*
+ * Send the request when the transmit interval was reached. Or
+ * when the caller forced the transmission.
+ */
+ now = g_get_monotonic_time() / 1000;
+ elapsed = now - devc->cmd_sent_at;
+ if (!force && elapsed < POLL_PERIOD_MS)
+ return SR_OK;
+
+ /*
+ * Transmit another measurement request. Only advance the
+ * interval after successful transmission.
+ */
+ serial = sdi->conn;
+ len = serial_write_blocking(serial,
+ poll_cmd, strlen(poll_cmd), WRITE_TO_MS);
+ if (len < 0) {