fix double DF_END and libusb timeout

This commit is contained in:
Bert Vermeulen 2010-04-17 22:09:33 -07:00
parent 9a4988343f
commit 9c48090a88
1 changed files with 6 additions and 9 deletions

View File

@ -102,6 +102,7 @@ static uint8_t trigger_buffer[NUM_TRIGGER_STAGES] = { 0 };
int trigger_stage = TRIGGER_FIRED; int trigger_stage = TRIGGER_FIRED;
static int hw_set_configuration(int device_index, int capability, void *value); static int hw_set_configuration(int device_index, int capability, void *value);
static void hw_stop_acquisition(int device_index, gpointer session_device_id);
/* /*
* Returns 1 if the device's configuration profile match the Logic firmware's * Returns 1 if the device's configuration profile match the Logic firmware's
@ -668,6 +669,7 @@ void receive_transfer(struct libusb_transfer *transfer)
* transfer that come in. * transfer that come in.
*/ */
if (num_samples == -1) { if (num_samples == -1) {
if (transfer)
libusb_free_transfer(transfer); libusb_free_transfer(transfer);
return; return;
} }
@ -696,9 +698,7 @@ void receive_transfer(struct libusb_transfer *transfer)
* The FX2 gave up. End the acquisition, the frontend * The FX2 gave up. End the acquisition, the frontend
* will work out that the samplecount is short. * will work out that the samplecount is short.
*/ */
packet.type = DF_END; hw_stop_acquisition(-1, user_data);
session_bus(user_data, &packet);
num_samples = -1;
} }
return; return;
} else { } else {
@ -723,10 +723,7 @@ void receive_transfer(struct libusb_transfer *transfer)
num_samples += cur_buflen; num_samples += cur_buflen;
if ((unsigned int)num_samples > limit_samples) { if ((unsigned int)num_samples > limit_samples) {
/* End the acquisition. */ hw_stop_acquisition(-1, user_data);
packet.type = DF_END;
session_bus(user_data, &packet);
num_samples = -1;
} }
} else { } else {
/* /*
@ -773,7 +770,7 @@ static int hw_start_acquisition(int device_index, gpointer session_device_id)
lupfd = libusb_get_pollfds(usb_context); lupfd = libusb_get_pollfds(usb_context);
for (i = 0; lupfd[i]; i++) for (i = 0; lupfd[i]; i++)
source_add(lupfd[i]->fd, lupfd[i]->events, -1, receive_data, source_add(lupfd[i]->fd, lupfd[i]->events, 40, receive_data,
NULL); NULL);
free(lupfd); free(lupfd);