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 sr_trigger *trigger = sr_session_trigger_get(sdi->session);
|
||||||
struct h4032l_cmd_pkt *cmd_pkt = &devc->cmd_pkt;
|
struct h4032l_cmd_pkt *cmd_pkt = &devc->cmd_pkt;
|
||||||
|
|
||||||
|
devc->acq_aborted = FALSE;
|
||||||
|
|
||||||
/* Calculate packet ratio. */
|
/* Calculate packet ratio. */
|
||||||
cmd_pkt->pre_trigger_size = (cmd_pkt->sample_size * devc->capture_ratio) / 100;
|
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)
|
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;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,26 @@ struct h4032l_status_packet {
|
||||||
uint32_t status;
|
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)
|
SR_PRIV int h4032l_receive_data(int fd, int revents, void *cb_data)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
@ -68,6 +88,15 @@ void LIBUSB_CALL h4032l_usb_callback(struct libusb_transfer *transfer)
|
||||||
uint32_t number_samples;
|
uint32_t number_samples;
|
||||||
int ret;
|
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)
|
if (transfer->status != LIBUSB_TRANSFER_COMPLETED)
|
||||||
sr_dbg("%s error: %d.", __func__, transfer->status);
|
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)
|
if (devc->status == H4032L_STATUS_IDLE)
|
||||||
libusb_free_transfer(transfer);
|
free_transfer(transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t h4032l_voltage2pwm(double voltage)
|
uint16_t h4032l_voltage2pwm(double voltage)
|
||||||
|
|
|
@ -121,6 +121,7 @@ struct h4032l_cmd_pkt {
|
||||||
struct dev_context {
|
struct dev_context {
|
||||||
enum h4032l_status status;
|
enum h4032l_status status;
|
||||||
uint32_t remaining_samples;
|
uint32_t remaining_samples;
|
||||||
|
gboolean acq_aborted;
|
||||||
struct h4032l_cmd_pkt cmd_pkt;
|
struct h4032l_cmd_pkt cmd_pkt;
|
||||||
struct libusb_transfer *usb_transfer;
|
struct libusb_transfer *usb_transfer;
|
||||||
uint8_t buffer[512];
|
uint8_t buffer[512];
|
||||||
|
|
Loading…
Reference in New Issue