#include <stdlib.h>
#include <string.h>
#include <libusb.h>
-#include "libsigrok.h"
+#include <libsigrok/libsigrok.h>
#include "libsigrok-internal.h"
#define LOG_PREFIX "fx2lafw"
#define NUM_SIMUL_TRANSFERS 32
#define MAX_EMPTY_TRANSFERS (NUM_SIMUL_TRANSFERS * 2)
+#define NUM_CHANNELS 16
+
#define FX2LAFW_REQUIRED_VERSION_MAJOR 1
#define MAX_8BIT_SAMPLE_RATE SR_MHZ(24)
#define MAX_SAMPLE_DELAY (6 * 256)
#define DEV_CAPS_16BIT_POS 0
+#define DEV_CAPS_AX_ANALOG_POS 1
#define DEV_CAPS_16BIT (1 << DEV_CAPS_16BIT_POS)
-
-#define DSLOGIC_FPGA_FIRMWARE FIRMWARE_DIR "/dreamsourcelab-dslogic-fpga.fw"
+#define DEV_CAPS_AX_ANALOG (1 << DEV_CAPS_AX_ANALOG_POS)
/* Protocol commands */
#define CMD_GET_FW_VERSION 0xb0
#define CMD_START 0xb1
#define CMD_GET_REVID_VERSION 0xb2
+#define CMD_START_FLAGS_CLK_CTL2_POS 4
#define CMD_START_FLAGS_WIDE_POS 5
#define CMD_START_FLAGS_CLK_SRC_POS 6
+#define CMD_START_FLAGS_CLK_CTL2 (1 << CMD_START_FLAGS_CLK_CTL2_POS)
#define CMD_START_FLAGS_SAMPLE_8BIT (0 << CMD_START_FLAGS_WIDE_POS)
#define CMD_START_FLAGS_SAMPLE_16BIT (1 << CMD_START_FLAGS_WIDE_POS)
struct dev_context {
const struct fx2lafw_profile *profile;
+ char **channel_names;
+ GSList *enabled_analog_channels;
/*
* Since we can't keep track of an fx2lafw device after upgrading
* the firmware (it renumerates into a different device address
*/
int64_t fw_updated;
- /* Supported samplerates */
const uint64_t *samplerates;
int num_samplerates;
- /* Device/capture settings */
uint64_t cur_samplerate;
+ uint64_t limit_frames;
uint64_t limit_samples;
uint64_t capture_ratio;
- /* Operational settings */
gboolean trigger_fired;
gboolean acq_aborted;
gboolean sample_wide;
struct soft_trigger_logic *stl;
- unsigned int sent_samples;
+ uint64_t num_frames;
+ uint64_t sent_samples;
int submitted_transfers;
int empty_transfer_count;
- void *cb_data;
unsigned int num_transfers;
struct libusb_transfer **transfers;
struct sr_context *ctx;
-
- /* Is this a DSLogic? */
- gboolean dslogic;
- uint16_t dslogic_mode;
- int dslogic_external_clock;
+ void (*send_data_proc)(struct sr_dev_inst *sdi,
+ uint8_t *data, size_t length, size_t sample_width);
+ uint8_t *logic_buffer;
+ float *analog_buffer;
};
-SR_PRIV int fx2lafw_command_start_acquisition(const struct sr_dev_inst *sdi);
-SR_PRIV gboolean match_manuf_prod(libusb_device *dev, const char *manufacturer,
- const char *product);
SR_PRIV int fx2lafw_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di);
SR_PRIV struct dev_context *fx2lafw_dev_new(void);
+SR_PRIV int fx2lafw_start_acquisition(const struct sr_dev_inst *sdi);
SR_PRIV void fx2lafw_abort_acquisition(struct dev_context *devc);
-SR_PRIV void fx2lafw_receive_transfer(struct libusb_transfer *transfer);
-SR_PRIV size_t fx2lafw_get_buffer_size(struct dev_context *devc);
-SR_PRIV unsigned int fx2lafw_get_number_of_transfers(struct dev_context *devc);
-SR_PRIV unsigned int fx2lafw_get_timeout(struct dev_context *devc);
#endif