]> sigrok.org Git - libsigrok.git/blobdiff - hardware/fx2lafw/command.c
fx2lafw: Imported software triggering from fx2lafw
[libsigrok.git] / hardware / fx2lafw / command.c
index 0e60c9aa673afb57d29c815e448237d8212abfd1..b3d3b6b60cb1f9698ddbf2b154d5192a28d087ce 100644 (file)
 #include "sigrok.h"
 #include "sigrok-internal.h"
 
-int command_start_acquisition(libusb_device_handle *devhdl)
+int command_start_acquisition(libusb_device_handle *devhdl,
+       uint64_t samplerate)
 {
+       struct cmd_start_acquisition cmd;
+       int delay = 0;
+
+       /* Compute the sample rate */
+       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) {
+               cmd.flags = CMD_START_FLAGS_CLK_30MHZ;
+               delay = SR_MHZ(30) / samplerate - 1;
+       }
+
+       /* Note that sample_delay=0 is treated as sample_delay=256 */
+       if (delay <= 0 || delay > 256) {
+               sr_err("fx2lafw: Unable to sample at %dHz",
+                       samplerate);
+               return SR_ERR;
+       }
+
+       cmd.sample_delay = delay;
+
+       /* Send the control message */
        const int res = libusb_control_transfer(devhdl,
                                LIBUSB_REQUEST_TYPE_VENDOR |
                                LIBUSB_ENDPOINT_OUT, CMD_START, 0x0000,
-                               0x0000, NULL, 0, 100);
+                               0x0000, (unsigned char*)&cmd,
+                               sizeof(cmd), 100);
        if (res < 0) {
                sr_err("fx2lafw: Unable to send start command: %d",
                        res);