fx2lafw: Only sample/send analog data if analog channels are enabled.
This commit is contained in:
parent
5db45cc55d
commit
f9592d65e9
|
@ -878,7 +878,12 @@ static int start_transfers(const struct sr_dev_inst *sdi)
|
||||||
devc->submitted_transfers++;
|
devc->submitted_transfers++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (devc->profile->dev_caps & DEV_CAPS_AX_ANALOG)
|
/*
|
||||||
|
* If this device has analog channels and at least one of them is
|
||||||
|
* enabled, use mso_send_data_proc() to properly handle the analog
|
||||||
|
* data. Otherwise use la_send_data_proc().
|
||||||
|
*/
|
||||||
|
if (g_slist_length(devc->enabled_analog_channels) > 0)
|
||||||
devc->send_data_proc = mso_send_data_proc;
|
devc->send_data_proc = mso_send_data_proc;
|
||||||
else
|
else
|
||||||
devc->send_data_proc = la_send_data_proc;
|
devc->send_data_proc = la_send_data_proc;
|
||||||
|
@ -988,7 +993,8 @@ static int configure_channels(const struct sr_dev_inst *sdi)
|
||||||
|
|
||||||
for (l = sdi->channels, p = 0; l; l = l->next, p++) {
|
for (l = sdi->channels, p = 0; l; l = l->next, p++) {
|
||||||
ch = l->data;
|
ch = l->data;
|
||||||
if ((p <= NUM_CHANNELS) && (ch->type == SR_CHANNEL_ANALOG)) {
|
if ((p <= NUM_CHANNELS) && (ch->type == SR_CHANNEL_ANALOG)
|
||||||
|
&& (ch->enabled)) {
|
||||||
num_analog++;
|
num_analog++;
|
||||||
devc->enabled_analog_channels =
|
devc->enabled_analog_channels =
|
||||||
g_slist_append(devc->enabled_analog_channels, ch);
|
g_slist_append(devc->enabled_analog_channels, ch);
|
||||||
|
@ -997,7 +1003,10 @@ static int configure_channels(const struct sr_dev_inst *sdi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Use no wide sampling if we have only the first 8 channels set. */
|
/*
|
||||||
|
* Use wide sampling if either any of the LA channels 8..15 is enabled
|
||||||
|
* and/or at least one analog channel is enabled.
|
||||||
|
*/
|
||||||
devc->sample_wide = (channel_mask > 0xff || num_analog > 0);
|
devc->sample_wide = (channel_mask > 0xff || num_analog > 0);
|
||||||
|
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
|
@ -1036,7 +1045,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
} else {
|
} else {
|
||||||
size = fx2lafw_get_buffer_size(devc);
|
size = fx2lafw_get_buffer_size(devc);
|
||||||
/* Prepare for analog sampling. */
|
/* Prepare for analog sampling. */
|
||||||
if (devc->profile->dev_caps & DEV_CAPS_AX_ANALOG) {
|
if (g_slist_length(devc->enabled_analog_channels) > 0) {
|
||||||
/* We need a buffer half the size of a transfer. */
|
/* We need a buffer half the size of a transfer. */
|
||||||
devc->logic_buffer = g_try_malloc(size / 2);
|
devc->logic_buffer = g_try_malloc(size / 2);
|
||||||
devc->analog_buffer = g_try_malloc(
|
devc->analog_buffer = g_try_malloc(
|
||||||
|
|
|
@ -126,7 +126,7 @@ SR_PRIV int fx2lafw_command_start_acquisition(const struct sr_dev_inst *sdi)
|
||||||
cmd.flags |= devc->sample_wide ? CMD_START_FLAGS_SAMPLE_16BIT :
|
cmd.flags |= devc->sample_wide ? CMD_START_FLAGS_SAMPLE_16BIT :
|
||||||
CMD_START_FLAGS_SAMPLE_8BIT;
|
CMD_START_FLAGS_SAMPLE_8BIT;
|
||||||
/* Enable CTL2 clock. */
|
/* Enable CTL2 clock. */
|
||||||
cmd.flags |= (devc->profile->dev_caps & DEV_CAPS_AX_ANALOG) ? CMD_START_FLAGS_CLK_CTL2 : 0;
|
cmd.flags |= (g_slist_length(devc->enabled_analog_channels) > 0) ? CMD_START_FLAGS_CLK_CTL2 : 0;
|
||||||
|
|
||||||
/* Send the control message. */
|
/* Send the control message. */
|
||||||
ret = libusb_control_transfer(usb->devhdl, LIBUSB_REQUEST_TYPE_VENDOR |
|
ret = libusb_control_transfer(usb->devhdl, LIBUSB_REQUEST_TYPE_VENDOR |
|
||||||
|
@ -338,9 +338,11 @@ static void finish_acquisition(struct sr_dev_inst *sdi)
|
||||||
devc->num_transfers = 0;
|
devc->num_transfers = 0;
|
||||||
g_free(devc->transfers);
|
g_free(devc->transfers);
|
||||||
|
|
||||||
/* Free the deinterlace buffers if we had them */
|
/* Free the deinterlace buffers if we had them. */
|
||||||
g_free(devc->logic_buffer);
|
if (g_slist_length(devc->enabled_analog_channels) > 0) {
|
||||||
g_free(devc->analog_buffer);
|
g_free(devc->logic_buffer);
|
||||||
|
g_free(devc->analog_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
if (devc->stl) {
|
if (devc->stl) {
|
||||||
soft_trigger_logic_free(devc->stl);
|
soft_trigger_logic_free(devc->stl);
|
||||||
|
|
Loading…
Reference in New Issue