]> sigrok.org Git - libsigrok.git/commitdiff
dreamsourcelab-dslogic: Fixed deinterleaving when non-contiguous set of channels...
authorJoel Holdsworth <redacted>
Mon, 25 Sep 2017 04:07:30 +0000 (22:07 -0600)
committerUwe Hermann <redacted>
Tue, 26 Sep 2017 19:48:04 +0000 (21:48 +0200)
src/hardware/dreamsourcelab-dslogic/protocol.c

index 3b4848eead90e944205a995588d7847c181de9bc..90b773d9cf970fe34d48193cea23de0792d046f5 100644 (file)
@@ -733,10 +733,12 @@ static void deinterleave_buffer(const uint8_t *src, size_t length,
                for (int bit = 0; bit != 64; bit++) {
                        const uint64_t *word_ptr = src_ptr;
                        sample = 0;
-                       for (size_t channel = 0; channel != channel_count;
+                       for (unsigned int channel = 0; channel != 16;
                                channel++) {
-                               if ((channel_mask & (1 << channel)) &&
-                                       (*word_ptr++ & (1ULL << bit)))
+                               const uint16_t m = channel_mask >> channel;
+                               if (!m)
+                                       break;
+                               if ((m & 1) && ((*word_ptr++ >> bit) & 1ULL))
                                        sample |= 1 << channel;
                        }
                        *dst_ptr++ = sample;