hantek-4032l: Add option to abort acquisition.
Signed-off-by: Andrej Valek <andy@skyrain.eu>
This commit is contained in:
parent
74c4c1747f
commit
a5b9880eb2
|
@ -400,6 +400,8 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
|||
struct sr_trigger *trigger = sr_session_trigger_get(sdi->session);
|
||||
struct h4032l_cmd_pkt *cmd_pkt = &devc->cmd_pkt;
|
||||
|
||||
devc->acq_aborted = FALSE;
|
||||
|
||||
/* Calculate packet ratio. */
|
||||
cmd_pkt->pre_trigger_size = (cmd_pkt->sample_size * devc->capture_ratio) / 100;
|
||||
|
||||
|
@ -501,9 +503,13 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
|||
|
||||
static int dev_acquisition_stop(struct sr_dev_inst *sdi)
|
||||
{
|
||||
(void)sdi;
|
||||
struct dev_context *devc = sdi->priv;
|
||||
|
||||
/* TODO: stop acquisition. */
|
||||
devc->acq_aborted = TRUE;
|
||||
if (devc->usb_transfer)
|
||||
libusb_cancel_transfer(devc->usb_transfer);
|
||||
|
||||
devc->status = H4032L_STATUS_IDLE;
|
||||
|
||||
return SR_OK;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,26 @@ struct h4032l_status_packet {
|
|||
uint32_t status;
|
||||
};
|
||||
|
||||
static void finish_acquisition(struct sr_dev_inst *sdi)
|
||||
{
|
||||
struct drv_context *drvc = sdi->driver->context;
|
||||
|
||||
std_session_send_df_end(sdi);
|
||||
usb_source_remove(sdi->session, drvc->sr_ctx);
|
||||
}
|
||||
|
||||
static void free_transfer(struct libusb_transfer *transfer)
|
||||
{
|
||||
struct sr_dev_inst *sdi = transfer->user_data;
|
||||
struct dev_context *devc = sdi->priv;
|
||||
|
||||
transfer->buffer = NULL;
|
||||
libusb_free_transfer(transfer);
|
||||
devc->usb_transfer = NULL;
|
||||
|
||||
finish_acquisition(sdi);
|
||||
}
|
||||
|
||||
SR_PRIV int h4032l_receive_data(int fd, int revents, void *cb_data)
|
||||
{
|
||||
struct timeval tv;
|
||||
|
@ -68,6 +88,15 @@ void LIBUSB_CALL h4032l_usb_callback(struct libusb_transfer *transfer)
|
|||
uint32_t number_samples;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* If acquisition has already ended, just free any queued up
|
||||
* transfers that come in.
|
||||
*/
|
||||
if (devc->acq_aborted) {
|
||||
free_transfer(transfer);
|
||||
return;
|
||||
}
|
||||
|
||||
if (transfer->status != LIBUSB_TRANSFER_COMPLETED)
|
||||
sr_dbg("%s error: %d.", __func__, transfer->status);
|
||||
|
||||
|
@ -175,7 +204,7 @@ void LIBUSB_CALL h4032l_usb_callback(struct libusb_transfer *transfer)
|
|||
}
|
||||
|
||||
if (devc->status == H4032L_STATUS_IDLE)
|
||||
libusb_free_transfer(transfer);
|
||||
free_transfer(transfer);
|
||||
}
|
||||
|
||||
uint16_t h4032l_voltage2pwm(double voltage)
|
||||
|
|
|
@ -121,6 +121,7 @@ struct h4032l_cmd_pkt {
|
|||
struct dev_context {
|
||||
enum h4032l_status status;
|
||||
uint32_t remaining_samples;
|
||||
gboolean acq_aborted;
|
||||
struct h4032l_cmd_pkt cmd_pkt;
|
||||
struct libusb_transfer *usb_transfer;
|
||||
uint8_t buffer[512];
|
||||
|
|
Loading…
Reference in New Issue