Skip to content

Commit 8360afa

Browse files
committed
ols: Clean up: Rename variables, remove misleading counter
cnt_samples_rle was larger than num_samples in RLE mode. Instead of correcting that, use num_samples instead.
1 parent ec5cd54 commit 8360afa

File tree

3 files changed

+58
-57
lines changed

3 files changed

+58
-57
lines changed

src/hardware/openbench-logic-sniffer/api.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -402,10 +402,10 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi)
402402
return SR_ERR;
403403

404404
/* Reset all operational states. */
405-
devc->rle_count = devc->raw_sample_buf_size = 0;
406-
devc->num_samples = devc->num_bytes = 0;
407-
devc->cnt_bytes = devc->cnt_samples = devc->cnt_samples_rle = 0;
408-
memset(devc->sample, 0, 4);
405+
devc->rle_count = devc->sample_buf_size = 0;
406+
devc->cnt_samples = devc->raw_sample_size = 0;
407+
devc->cnt_rx_bytes = devc->cnt_rx_raw_samples = 0;
408+
memset(devc->raw_sample, 0, 4);
409409

410410
std_session_send_df_header(sdi);
411411

src/hardware/openbench-logic-sniffer/protocol.c

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,7 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
377377
struct sr_datafeed_packet packet;
378378
struct sr_datafeed_logic logic;
379379
uint32_t sample;
380-
int num_changroups, j;
381-
unsigned int i;
380+
unsigned int i, j, num_changroups;
382381
unsigned char byte;
383382

384383
(void)fd;
@@ -387,7 +386,7 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
387386
serial = sdi->conn;
388387
devc = sdi->priv;
389388

390-
if (devc->cnt_bytes == 0 && revents == 0) {
389+
if (devc->cnt_rx_bytes == 0 && revents == 0) {
391390
/* Ignore timeouts as long as we haven't received anything */
392391
return TRUE;
393392
}
@@ -402,33 +401,31 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
402401
if (revents == G_IO_IN) {
403402
if (serial_read_nonblocking(serial, &byte, 1) != 1)
404403
return FALSE;
405-
devc->cnt_bytes++;
404+
devc->cnt_rx_bytes++;
406405

407-
devc->sample[devc->num_bytes++] = byte;
406+
devc->raw_sample[devc->raw_sample_size++] = byte;
408407
sr_spew("Received byte 0x%.2x.", byte);
409-
if (devc->num_bytes == num_changroups) {
410-
devc->cnt_samples++;
411-
devc->cnt_samples_rle++;
408+
if (devc->raw_sample_size == num_changroups) {
409+
devc->cnt_rx_raw_samples++;
412410
/*
413411
* Got a full sample. Convert from the OLS's little-endian
414412
* sample to the local format.
415413
*/
416-
sample = devc->sample[0] | (devc->sample[1] << 8) \
417-
| (devc->sample[2] << 16) | (devc->sample[3] << 24);
418-
sr_dbg("Received sample 0x%.*x.", devc->num_bytes * 2, sample);
414+
sample = devc->raw_sample[0] | (devc->raw_sample[1] << 8) \
415+
| (devc->raw_sample[2] << 16) | (devc->raw_sample[3] << 24);
416+
sr_dbg("Received sample 0x%.*x.", devc->raw_sample_size * 2, sample);
419417
if (devc->capture_flags & CAPTURE_FLAG_RLE) {
420418
/*
421419
* In RLE mode the high bit of the sample is the
422420
* "count" flag, meaning this sample is the number
423421
* of times the previous sample occurred.
424422
*/
425-
if (devc->sample[devc->num_bytes - 1] & 0x80) {
423+
if (devc->raw_sample[devc->raw_sample_size - 1] & 0x80) {
426424
/* Clear the high bit. */
427-
sample &= ~(0x80 << (devc->num_bytes - 1) * 8);
425+
sample &= ~(0x80 << (devc->raw_sample_size - 1) * 8);
428426
devc->rle_count = sample;
429-
devc->cnt_samples_rle += devc->rle_count;
430427
sr_dbg("RLE count: %u.", devc->rle_count);
431-
devc->num_bytes = 0;
428+
devc->raw_sample_size = 0;
432429
return TRUE;
433430
}
434431
}
@@ -452,38 +449,41 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
452449
* enabled, copy from received
453450
* sample.
454451
*/
455-
tmp_sample[i] = devc->sample[j++];
452+
tmp_sample[i] = devc->raw_sample[j++];
456453
}
457454
}
458-
memcpy(devc->sample, tmp_sample, 4);
455+
memcpy(devc->raw_sample, tmp_sample, 4);
459456
sr_spew("Expanded sample: 0x%.2hhx%.2hhx%.2hhx%.2hhx ",
460-
devc->sample[3], devc->sample[2], devc->sample[1], devc->sample[0]);
457+
devc->raw_sample[3], devc->raw_sample[2], devc->raw_sample[1],
458+
devc->raw_sample[0]);
461459
}
462460

463461
unsigned int samples_to_write = devc->rle_count + 1;
464462
unsigned int new_sample_buf_size =
465-
4 * MAX(devc->limit_samples, devc->num_samples + samples_to_write);
466-
if (devc->raw_sample_buf_size < new_sample_buf_size) {
467-
unsigned int old_size = devc->raw_sample_buf_size;
463+
4 * MAX(devc->limit_samples, devc->cnt_samples + samples_to_write);
464+
if (devc->sample_buf_size < new_sample_buf_size) {
465+
unsigned int old_size = devc->sample_buf_size;
468466
new_sample_buf_size *= 2;
469-
devc->raw_sample_buf = g_try_realloc(devc->raw_sample_buf, new_sample_buf_size);
470-
devc->raw_sample_buf_size = new_sample_buf_size;
467+
devc->sample_buf = g_try_realloc(devc->sample_buf, new_sample_buf_size);
468+
devc->sample_buf_size = new_sample_buf_size;
471469

472-
if (!devc->raw_sample_buf) {
470+
if (!devc->sample_buf) {
473471
sr_err("Sample buffer malloc failed.");
474472
return FALSE;
475473
}
476474
/* fill with 1010... for debugging */
477-
memset(devc->raw_sample_buf + old_size, 0x82, new_sample_buf_size - old_size);
475+
memset(devc->sample_buf + old_size, 0x82,
476+
new_sample_buf_size - old_size);
478477
}
479478

480479
for (i = 0; i < samples_to_write; i++)
481-
memcpy(devc->raw_sample_buf + (devc->num_samples + i) * 4, devc->sample, 4);
480+
memcpy(devc->sample_buf + (devc->cnt_samples + i) * 4, devc->raw_sample,
481+
4);
482482

483-
devc->num_samples += samples_to_write;
483+
devc->cnt_samples += samples_to_write;
484484

485-
memset(devc->sample, 0, 4);
486-
devc->num_bytes = 0;
485+
memset(devc->raw_sample, 0, 4);
486+
devc->raw_sample_size = 0;
487487
devc->rle_count = 0;
488488
}
489489
} else {
@@ -492,19 +492,20 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
492492
* we've acquired all the samples we asked for -- we're done.
493493
* Send the (properly-ordered) buffer to the frontend.
494494
*/
495-
sr_dbg("Received %d bytes, %d samples, %d decompressed samples.",
496-
devc->cnt_bytes, devc->cnt_samples,
497-
devc->cnt_samples_rle);
495+
sr_dbg("Received %d bytes, %d raw samples, %d decompressed samples.",
496+
devc->cnt_rx_bytes, devc->cnt_rx_raw_samples,
497+
devc->cnt_samples);
498498

499499
/*
500500
* The OLS sends its sample buffer backwards.
501501
* Flip it back before sending it on the session bus.
502502
*/
503-
for(i = 0; i < devc->num_samples/2; i++) {
503+
for(i = 0; i < devc->cnt_samples/2; i++) {
504504
uint8_t temp[4];
505-
memcpy(temp, &devc->raw_sample_buf[4*i], 4);
506-
memmove(&devc->raw_sample_buf[4*i], &devc->raw_sample_buf[4*(devc->num_samples-i-1)], 4);
507-
memcpy(&devc->raw_sample_buf[4*(devc->num_samples-i-1)], temp, 4);
505+
memcpy(temp, &devc->sample_buf[4*i], 4);
506+
memmove(&devc->sample_buf[4*i],
507+
&devc->sample_buf[4*(devc->cnt_samples-i-1)], 4);
508+
memcpy(&devc->sample_buf[4*(devc->cnt_samples-i-1)], temp, 4);
508509
}
509510

510511
if (devc->trigger_at_smpl != OLS_NO_TRIGGER) {
@@ -513,13 +514,13 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
513514
* about it.
514515
*/
515516
if (devc->trigger_at_smpl > 0
516-
&& (unsigned int)devc->trigger_at_smpl <= devc->num_samples) {
517+
&& (unsigned int)devc->trigger_at_smpl <= devc->cnt_samples) {
517518
/* There are pre-trigger samples, send those first. */
518519
packet.type = SR_DF_LOGIC;
519520
packet.payload = &logic;
520521
logic.length = devc->trigger_at_smpl * 4;
521522
logic.unitsize = 4;
522-
logic.data = devc->raw_sample_buf;
523+
logic.data = devc->sample_buf;
523524
sr_session_send(sdi, &packet);
524525
}
525526

@@ -528,19 +529,20 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
528529
}
529530

530531
/* Send post-trigger / all captured samples. */
531-
unsigned int num_pre_trigger_samples = devc->trigger_at_smpl == OLS_NO_TRIGGER
532-
? 0 : MIN((unsigned int)devc->trigger_at_smpl, devc->num_samples);
533-
if (devc->num_samples > num_pre_trigger_samples) {
532+
unsigned int num_pre_trigger_samples =
533+
devc->trigger_at_smpl == OLS_NO_TRIGGER ? 0
534+
: MIN((unsigned int)devc->trigger_at_smpl, devc->cnt_samples);
535+
if (devc->cnt_samples > num_pre_trigger_samples) {
534536
packet.type = SR_DF_LOGIC;
535537
packet.payload = &logic;
536-
logic.length = (devc->num_samples - num_pre_trigger_samples) * 4;
538+
logic.length = (devc->cnt_samples - num_pre_trigger_samples) * 4;
537539
logic.unitsize = 4;
538-
logic.data = devc->raw_sample_buf + num_pre_trigger_samples *4;
540+
logic.data = devc->sample_buf + num_pre_trigger_samples *4;
539541
sr_session_send(sdi, &packet);
540542
}
541543

542-
g_free(devc->raw_sample_buf);
543-
devc->raw_sample_buf = 0;
544+
g_free(devc->sample_buf);
545+
devc->sample_buf = 0;
544546

545547
serial_flush(serial);
546548
abort_acquisition(sdi);

src/hardware/openbench-logic-sniffer/protocol.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,16 +114,15 @@ struct dev_context {
114114
int trigger_at_smpl;
115115
uint16_t capture_flags;
116116

117-
unsigned int num_samples;
118-
int num_bytes;
119-
int cnt_bytes;
120-
int cnt_samples;
121-
int cnt_samples_rle;
117+
unsigned int cnt_rx_bytes; /* number of bytes received */
118+
unsigned int raw_sample_size; /* valid bytes in sample[4] */
119+
unsigned char raw_sample[4]; /* raw sample, assembled from received bytes */
120+
unsigned int cnt_rx_raw_samples; /* number of raw samples received */
122121

123122
unsigned int rle_count;
124-
unsigned char sample[4];
125-
unsigned char *raw_sample_buf;
126-
unsigned int raw_sample_buf_size;
123+
unsigned char *sample_buf;
124+
unsigned int sample_buf_size;
125+
unsigned int cnt_samples; /* number of final samples in sample_buf */
127126
};
128127

129128
SR_PRIV extern const char *ols_channel_names[];

0 commit comments

Comments
 (0)