]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/kingst-la2016/protocol.c
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / kingst-la2016 / protocol.c
index e8b15c4f90069285745ff449fb67f215624c5ba8..dd806eaa5e065acd0f9623c450045f58bebefdf7 100644 (file)
@@ -54,6 +54,7 @@ static const struct kingst_model models[] = {
        { 0x08, 0x00, "LA2016", "la2016a1", SR_MHZ(200), 16, 1, 0, },
        { 0x09, 0x00, "LA1016", "la1016a1", SR_MHZ(100), 16, 1, 0, },
        { 0x0a, 0x00, "LA1010", "la1010a2", SR_MHZ(100), 16, 0, SR_MHZ(800), },
+       { 0x0b, 0x10, "LA2016", "la2016a2", SR_MHZ(200), 16, 1, 0, },
        { 0x0c, 0x10, "LA5016", "la5016a2", SR_MHZ(500), 16, 2, SR_MHZ(800), },
        { 0x0c, 0x00, "LA5016", "la5016a2", SR_MHZ(500), 16, 2, SR_MHZ(800), },
        { 0x41, 0x00, "LA5016", "la5016a1", SR_MHZ(500), 16, 2, SR_MHZ(800), },
@@ -1283,7 +1284,7 @@ static int la2016_start_download(const struct sr_dev_inst *sdi)
        devc->n_transfer_packets_to_read = devc->info.n_rep_packets;
        devc->n_transfer_packets_to_read /= devc->packets_per_chunk;
        devc->n_bytes_to_read = devc->n_transfer_packets_to_read;
-       devc->n_bytes_to_read *= TRANSFER_PACKET_LENGTH;
+       devc->n_bytes_to_read *= devc->transfer_size;
        devc->read_pos = devc->info.write_pos - devc->n_bytes_to_read;
        devc->n_reps_until_trigger = devc->info.n_rep_packets_before_trigger;
 
@@ -1341,15 +1342,12 @@ static int la2016_start_download(const struct sr_dev_inst *sdi)
  * - 2x u8 sequence number (inverted, and normal)
  *
  * This implementation silently ignores the (weak) sequence number.
- *
- * TODO Adjust the code paths for the 32-channel models. The version
- * below currently only works correctly for 16-channel models.
  */
 static void send_chunk(struct sr_dev_inst *sdi,
        const uint8_t *data_buffer, size_t data_length)
 {
        struct dev_context *devc;
-       size_t num_xfers, num_pkts;
+       size_t num_xfers, num_pkts, num_seqs;
        const uint8_t *rp;
        uint32_t sample_value;
        size_t repetitions;
@@ -1379,12 +1377,11 @@ static void send_chunk(struct sr_dev_inst *sdi,
        /* Process the received chunk of capture data. */
        sample_value = 0;
        rp = data_buffer;
-       num_xfers = data_length / TRANSFER_PACKET_LENGTH;
+       num_xfers = data_length / devc->transfer_size;
        while (num_xfers--) {
                num_pkts = devc->packets_per_chunk;
                while (num_pkts--) {
 
-                       /* TODO Verify 32channel layout. */
                        if (devc->model->channel_count == 32)
                                sample_value = read_u32le_inc(&rp);
                        else if (devc->model->channel_count == 16)
@@ -1394,7 +1391,7 @@ static void send_chunk(struct sr_dev_inst *sdi,
                        devc->total_samples += repetitions;
 
                        write_u32le(sample_buff, sample_value);
-                       feed_queue_logic_submit(devc->feed_queue,
+                       feed_queue_logic_submit_one(devc->feed_queue,
                                sample_buff, repetitions);
                        sr_sw_limits_update_samples_read(&devc->sw_limits,
                                repetitions);
@@ -1409,7 +1406,10 @@ static void send_chunk(struct sr_dev_inst *sdi,
                                }
                        }
                }
-               (void)read_u8_inc(&rp); /* Skip sequence number. */
+               /* Skip the sequence number bytes. */
+               num_seqs = devc->sequence_size;
+               while (num_seqs--)
+                       (void)read_u8_inc(&rp);
        }
 
        /*
@@ -1508,7 +1508,8 @@ static void stream_data(struct sr_dev_inst *sdi,
                for (bit_idx = 0; bit_idx < bit_count; bit_idx++) {
                        sample_value = stream->sample_data[bit_idx];
                        write_u32le(sample_buff, sample_value);
-                       feed_queue_logic_submit(devc->feed_queue, sample_buff, 1);
+                       feed_queue_logic_submit_one(devc->feed_queue,
+                               sample_buff, 1);
                }
                sr_sw_limits_update_samples_read(&devc->sw_limits, bit_count);
                devc->total_samples += bit_count;