+ sdi = transfer->user_data;
+ devc = sdi->priv;
+ if (transfer->status == LIBUSB_TRANSFER_NO_DEVICE) {
+ /* USB device was unplugged. */
+ dev_acquisition_stop(sdi, sdi);
+ } else if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
+ sr_dbg("Got %d-byte packet.", transfer->actual_length);
+ if (transfer->actual_length == DMM_DATA_SIZE) {
+ victor_dmm_receive_data(sdi, transfer->buffer);
+ if (devc->limit_samples) {
+ if (devc->num_samples >= devc->limit_samples)
+ dev_acquisition_stop(sdi, sdi);
+ }
+ }
+ }
+ /* Anything else is either an error or a timeout, which is fine:
+ * we were just going to send another transfer request anyway. */
+
+ if (sdi->status == SR_ST_ACTIVE) {
+ /* Send the same request again. */
+ if ((ret = libusb_submit_transfer(transfer) != 0)) {
+ sr_err("Unable to resubmit transfer: %s.",
+ libusb_error_name(ret));
+ g_free(transfer->buffer);
+ libusb_free_transfer(transfer);
+ dev_acquisition_stop(sdi, sdi);
+ }
+ } else {
+ /* This was the last transfer we're going to receive, so
+ * clean up now. */
+ g_free(transfer->buffer);
+ libusb_free_transfer(transfer);