]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/fx2lafw/protocol.h
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / fx2lafw / protocol.h
index 48be99309f13ddafa2805ca52a8359e7de0210b6..91f0e9fb64745154b4b0fddbbcab5c0157a213b5 100644 (file)
@@ -26,7 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <libusb.h>
-#include "libsigrok.h"
+#include <libsigrok/libsigrok.h>
 #include "libsigrok-internal.h"
 
 #define LOG_PREFIX "fx2lafw"
@@ -39,6 +39,8 @@
 #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 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)
+
+#define CMD_START_FLAGS_CLK_30MHZ      (0 << CMD_START_FLAGS_CLK_SRC_POS)
+#define CMD_START_FLAGS_CLK_48MHZ      (1 << CMD_START_FLAGS_CLK_SRC_POS)
 
 struct fx2lafw_profile {
        uint16_t vid;
@@ -69,6 +89,8 @@ struct fx2lafw_profile {
 
 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
@@ -77,35 +99,36 @@ struct dev_context {
         */
        int64_t fw_updated;
 
-       /* Device/capture settings */
+       const uint64_t *samplerates;
+       int num_samplerates;
+
        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;
+       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 fx2lafw_check_conf_profile(libusb_device *dev);
 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