+/** Request packet, if required. */
+SR_PRIV int req_packet(struct sr_dev_inst *sdi, int dmm)
+{
+ struct dev_context *devc;
+ struct sr_serial_dev_inst *serial;
+ int ret;
+
+ if (!dmms[dmm].packet_request)
+ return SR_OK;
+
+ devc = sdi->priv;
+ serial = sdi->conn;
+
+ if (devc->req_next_at && (devc->req_next_at > g_get_monotonic_time())) {
+ sr_spew("Not requesting new packet yet, %" PRIi64 " ms left.",
+ ((devc->req_next_at - g_get_monotonic_time()) / 1000));
+ return SR_OK;
+ }
+
+ ret = dmms[dmm].packet_request(serial);
+ if (ret < 0) {
+ sr_err("Failed to request packet: %d.", ret);
+ return ret;
+ }
+
+ if (dmms[dmm].req_timeout_ms)
+ devc->req_next_at = g_get_monotonic_time() + (dmms[dmm].req_timeout_ms * 1000);
+
+ return SR_OK;
+}
+