- struct sr_dev_inst *sdi;
- struct sr_datafeed_packet *packet;
- struct sr_datafeed_header *header;
- struct sr_datafeed_meta_logic meta;
- struct context *ctx;
+ return samplerate / 1000;
+}
+
+static size_t get_buffer_size(struct dev_context *devc)
+{
+ size_t s;
+
+ /*
+ * The buffer should be large enough to hold 10ms of data and
+ * a multiple of 512.
+ */
+ s = 10 * to_bytes_per_ms(devc->cur_samplerate);
+ return (s + 511) & ~511;
+}
+
+static unsigned int get_number_of_transfers(struct dev_context *devc)
+{
+ unsigned int n;
+
+ /* Total buffer size should be able to hold about 500ms of data. */
+ n = 500 * to_bytes_per_ms(devc->cur_samplerate) / get_buffer_size(devc);
+
+ if (n > NUM_SIMUL_TRANSFERS)
+ return NUM_SIMUL_TRANSFERS;
+
+ return n;
+}
+
+static unsigned int get_timeout(struct dev_context *devc)
+{
+ size_t total_size;
+ unsigned int timeout;
+
+ total_size = get_buffer_size(devc) * get_number_of_transfers(devc);
+ timeout = total_size / to_bytes_per_ms(devc->cur_samplerate);
+ return timeout + timeout / 4; /* Leave a headroom of 25% percent. */
+}
+
+static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi,
+ void *cb_data)
+{
+ struct sr_datafeed_packet packet;
+ struct sr_datafeed_header header;
+ struct dev_context *devc;
+ struct drv_context *drvc;