]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/fx2lafw/protocol.h
fx2lafw: scan/firmware support for DSLogic.
[libsigrok.git] / src / hardware / fx2lafw / protocol.h
index fef0dd76bb85f8ae730d4553fb9760b780ac625c..f8c2f3e28046dabd8a30fb39fec0602cc17d3c36 100644 (file)
 
 #define DEV_CAPS_16BIT         (1 << DEV_CAPS_16BIT_POS)
 
+#define DSLOGIC_FPGA_FIRMWARE FIRMWARE_DIR "/dreamsourcelab-dslogic-fpga.fw"
+
+/* Protocol commands */
+#define CMD_GET_FW_VERSION             0xb0
+#define CMD_START                      0xb1
+#define CMD_GET_REVID_VERSION          0xb2
+
+#define CMD_START_FLAGS_WIDE_POS       5
+#define CMD_START_FLAGS_CLK_SRC_POS    6
+
+#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)
+
+/* Modified protocol commands & flags used by DSLogic */
+#define CMD_DSLOGIC_GET_REVID_VERSION  0xb1
+#define CMD_DSLOGIC_START      0xb2
+#define CMD_DSLOGIC_CONFIG     0xb3
+#define CMD_DSLOGIC_SETTING    0xb4
+
+#define CMD_START_FLAGS_DSLOGIC_STOP_POS       7
+#define CMD_START_FLAGS_DSLOGIC_STOP (1 << CMD_START_FLAGS_DSLOGIC_STOP_POS)
+
 struct fx2lafw_profile {
        uint16_t vid;
        uint16_t pid;
@@ -77,9 +102,14 @@ struct dev_context {
         */
        int64_t fw_updated;
 
+       /* Supported samplerates */
+       const uint64_t *samplerates;
+       int num_samplerates;
+
        /* Device/capture settings */
        uint64_t cur_samplerate;
        uint64_t limit_samples;
+       uint64_t capture_ratio;
 
        /* Operational settings */
        gboolean trigger_fired;
@@ -95,10 +125,14 @@ struct dev_context {
        unsigned int num_transfers;
        struct libusb_transfer **transfers;
        struct sr_context *ctx;
+
+       /* Is this a DSLogic? */
+       gboolean dslogic;
 };
 
 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 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 void fx2lafw_abort_acquisition(struct dev_context *devc);
@@ -107,4 +141,6 @@ 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);
 
+int dslogic_fpga_firmware_upload(struct libusb_device_handle *hdl,
+               const char *filename);
 #endif