X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ffx2lafw%2Fcommand.c;h=0b89f88ca0f3550332a4454487f5442c1be20635;hb=cf94c8167bdd520e43cda5cdc9ef1ebf301b814d;hp=bb47d2d183676d6539df9aef4e417e5f453dcf5f;hpb=1e94408ae515157a9f27898b7b4c181e2aef980a;p=libsigrok.git diff --git a/hardware/fx2lafw/command.c b/hardware/fx2lafw/command.c index bb47d2d1..0b89f88c 100644 --- a/hardware/fx2lafw/command.c +++ b/hardware/fx2lafw/command.c @@ -18,6 +18,8 @@ */ #include + +#include "fx2lafw.h" #include "command.h" #include "sigrok.h" #include "sigrok-internal.h" @@ -66,19 +68,26 @@ SR_PRIV int command_start_acquisition(libusb_device_handle *devhdl, if ((SR_MHZ(48) % samplerate) == 0) { cmd.flags = CMD_START_FLAGS_CLK_48MHZ; delay = SR_MHZ(48) / samplerate - 1; - } else if ((SR_MHZ(30) % samplerate) == 0) { + if (delay > MAX_SAMPLE_DELAY) + delay = 0; + } + + if (delay == 0 && (SR_MHZ(30) % samplerate) == 0) { cmd.flags = CMD_START_FLAGS_CLK_30MHZ; delay = SR_MHZ(30) / samplerate - 1; } - /* Note: sample_delay=0 is treated as sample_delay=256. */ - if (delay <= 0 || delay > 256) { + sr_info("fx2lafw: GPIF delay = %d, clocksource = %sMHz", delay, + (cmd.flags & CMD_START_FLAGS_CLK_48MHZ) ? "48" : "30"); + + if (delay <= 0 || delay > MAX_SAMPLE_DELAY) { sr_err("fx2lafw: Unable to sample at %" PRIu64 "Hz.", samplerate); return SR_ERR; } - cmd.sample_delay = delay; + cmd.sample_delay_h = (delay >> 8) & 0xff; + cmd.sample_delay_l = delay & 0xff; /* Send the control message. */ ret = libusb_control_transfer(devhdl, LIBUSB_REQUEST_TYPE_VENDOR |