#include <config.h>
#include <string.h>
-#include "lwla.h"
#include "protocol.h"
-
-/* Status polling interval during acquisition.
- */
-#define POLL_INTERVAL 100 /* ms */
+#include "lwla.h"
/* Submit an already filled-in USB transfer.
*/
end_addr = MIN(acq->mem_addr_next, acq->mem_addr_stop);
acq->in_index = 0;
+
/*
* Repeatedly call the model-specific read response handler until
* all data received in the transfer has been accounted for.
struct dev_context *devc;
struct drv_context *drvc;
struct timeval tv;
- struct sr_datafeed_packet packet;
int ret;
(void)fd;
/* We are done, clean up and send end packet to session bus. */
clear_acquisition_state(sdi);
-
- packet.type = SR_DF_END;
- packet.payload = NULL;
- sr_session_send(sdi, &packet);
+ std_session_send_df_end(sdi, LOG_PREFIX);
return G_SOURCE_REMOVE;
}
acq = devc->acquisition;
if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
- sr_err("Transfer to device failed: %d.", transfer->status);
+ sr_err("Transfer to device failed (state %d): %s.",
+ devc->state, libusb_error_name(transfer->status));
devc->transfer_error = TRUE;
return;
}
struct drv_context *drvc;
struct dev_context *devc;
int ret;
+ const int poll_interval_ms = 100;
drvc = sdi->driver->context;
devc = sdi->priv;
return ret;
}
/* Register event source for asynchronous USB I/O. */
- ret = usb_source_add(sdi->session, drvc->sr_ctx, POLL_INTERVAL,
+ ret = usb_source_add(sdi->session, drvc->sr_ctx, poll_interval_ms,
&transfer_event, (struct sr_dev_inst *)sdi);
if (ret != SR_OK) {
clear_acquisition_state(sdi);
}
ret = submit_request(sdi, STATE_START_CAPTURE);
- if (ret == SR_OK) {
- /* Send header packet to the session bus. */
+ if (ret == SR_OK)
ret = std_session_send_df_header(sdi, LOG_PREFIX);
- }
+
if (ret != SR_OK) {
usb_source_remove(sdi->session, drvc->sr_ctx);
clear_acquisition_state(sdi);
}
+
return ret;
}