]> sigrok.org Git - libsigrok.git/commitdiff
dslogic: Add support for long captures at high samplerates.
authorDiego Asanza <redacted>
Sun, 8 May 2016 08:59:54 +0000 (10:59 +0200)
committerUwe Hermann <redacted>
Mon, 16 May 2016 16:18:59 +0000 (18:18 +0200)
To capture more than 16MSamples the hardware run length encoding option
must be enabled, or captured data present errors.

RLE encoding/decoding is done in hardware. Data streamed to the USB interface
is not encoded.

This commit enables RLE encoding for captures longer than 16MSamples.

Signed-off-by: Diego Asanza <redacted>
src/hardware/fx2lafw/dslogic.c
src/hardware/fx2lafw/dslogic.h

index 619544f94c8f02fb3a3d29d92089b05293e569ca..d5bb153eac953fefb8a79846ba71a91b7e774c16 100644 (file)
@@ -337,7 +337,7 @@ SR_PRIV int dslogic_fpga_configure(const struct sr_dev_inst *sdi)
         * 6    1 = samplerate 400MHz
         * 5    1 = samplerate 200MHz or analog mode
         * 4    0 = logic, 1 = dso or analog
-        * 3    unused
+        * 3    1 = RLE encoding (enable for more than 16 Megasamples)
         * 1-2  00 = internal clock, 
         *              01 = external clock rising, 
         *              11 = external clock falling
@@ -358,6 +358,11 @@ SR_PRIV int dslogic_fpga_configure(const struct sr_dev_inst *sdi)
                        v16 |= 1 << 2;
                }
        }
+       if (devc->limit_samples > DS_MAX_LOGIC_DEPTH && !devc->dslogic_continuous_mode){
+               /* enable rle for long captures.
+                  Without this, captured data present errors. */
+               v16 |= 1<< 3;
+       }
 
        WL16(&cfg.mode, v16);
        v32 = ceil(SR_MHZ(100) * 1.0 / devc->cur_samplerate);
index b6c6e7d55f397817b99015e2cae76c25aa5f1674..6cb827d3e211bf79d830fcae7aad86d252d86eae 100644 (file)
@@ -35,6 +35,9 @@
 #define DS_START_FLAGS_SAMPLE_WIDE     (1 << 5)
 #define DS_START_FLAGS_MODE_LA         (1 << 4)
 
+/* enable rle to capture more samples than this limit */
+#define DS_MAX_LOGIC_DEPTH     16000000
+
 enum dslogic_operation_modes {
        DS_OP_NORMAL,
        DS_OP_INTERNAL_TEST,