- /* Send prepared usb packet. */
- if ((ret = libusb_submit_transfer(transfer)) != 0) {
- sr_err("Failed to submit transfer: %s.",
- libusb_error_name(ret));
- devc->status = H4032L_STATUS_IDLE;
+ /*
+ * Set number of data transfers regarding to size of buffer.
+ * FPGA version 0 can't transfer multiple transfers at once.
+ */
+ if ((num_transfers = MIN(devc->remaining_samples * sizeof(uint32_t) /
+ H4032L_DATA_BUFFER_SIZE, devc->fpga_version ?
+ H4032L_DATA_TRANSFER_MAX_NUM : 1)) == 0)
+ num_transfers = 1;
+
+ g_free(devc->transfers);
+ devc->transfers = g_malloc(sizeof(*devc->transfers) * num_transfers);
+ devc->num_transfers = num_transfers;
+
+ for (i = 0; i < num_transfers; i++) {
+ buf = g_malloc(H4032L_DATA_BUFFER_SIZE);
+ transfer = libusb_alloc_transfer(0);
+
+ libusb_fill_bulk_transfer(transfer, usb->devhdl,
+ 6 | LIBUSB_ENDPOINT_IN,
+ buf, H4032L_DATA_BUFFER_SIZE,
+ h4032l_data_transfer_callback,
+ (void *)sdi, H4032L_USB_TIMEOUT);
+
+ /* Send prepared usb packet. */
+ if ((ret = libusb_submit_transfer(transfer)) != 0) {
+ sr_err("Failed to submit transfer: %s.",
+ libusb_error_name(ret));
+ libusb_free_transfer(transfer);
+ g_free(buf);
+ abort_acquisition(devc);
+ return SR_ERR;
+ }
+ devc->transfers[i] = transfer;
+ devc->submitted_transfers++;