X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=src%2Fhardware%2Fkingst-la2016%2Fprotocol.c;h=dd806eaa5e065acd0f9623c450045f58bebefdf7;hp=e8b15c4f90069285745ff449fb67f215624c5ba8;hb=HEAD;hpb=92ca309ffb3b387e4e1e78d99a5dd8ef5119587a diff --git a/src/hardware/kingst-la2016/protocol.c b/src/hardware/kingst-la2016/protocol.c index e8b15c4f..dd806eaa 100644 --- a/src/hardware/kingst-la2016/protocol.c +++ b/src/hardware/kingst-la2016/protocol.c @@ -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;