mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
comedi: better debug output
This commit is contained in:
parent
bfcf87d970
commit
1e7c46d7aa
2 changed files with 19 additions and 7 deletions
|
@ -46,27 +46,27 @@ struct comedi_chanspec {
|
|||
|
||||
struct comedi_direction {
|
||||
int subdevice; ///< Comedi subdevice
|
||||
int buffer_size; ///< Comedi's kernel buffer size
|
||||
int buffer_size; ///< Comedi's kernel buffer size in kB
|
||||
int sample_size; ///< Size of a single measurement sample
|
||||
int sample_rate_hz; ///< Sample rate in Hz
|
||||
bool present; ///< Config present
|
||||
bool enabled; ///< Card is started successfully
|
||||
bool running; ///< Card is actively transfering samples
|
||||
struct timespec started; ///< Timestamp when sampling started
|
||||
int counter; ///< Number of villas samples transfered
|
||||
struct timespec last_debug; ///< Timestamp of last debug output
|
||||
size_t counter; ///< Number of villas samples transfered
|
||||
struct comedi_chanspec *chanspecs; ///< Range and maxdata config of channels
|
||||
unsigned *chanlist; ///< Channel list in comedi's packed format
|
||||
size_t chanlist_len; ///< Number of channels for this direction
|
||||
|
||||
|
||||
char* buffer;
|
||||
char* bufptr;
|
||||
};
|
||||
|
||||
struct comedi {
|
||||
char *device;
|
||||
|
||||
struct comedi_direction in, out;
|
||||
|
||||
comedi_t *dev;
|
||||
|
||||
#if COMEDI_USE_READ
|
||||
|
|
|
@ -329,6 +329,7 @@ static int comedi_start_out(struct node *n)
|
|||
|
||||
// output will only start after the internal trigger
|
||||
d->running = false;
|
||||
d->last_debug = time_now();
|
||||
|
||||
// allocate buffer for one complete villas sample
|
||||
// TODO: maybe increase buffer size according to c->vectorize
|
||||
|
@ -358,6 +359,10 @@ static int comedi_start_out(struct node *n)
|
|||
}
|
||||
}
|
||||
|
||||
const size_t villas_samples_in_kernel_buf = d->buffer_size / (d->sample_size * d->chanlist_len);
|
||||
const double latencyMs = (double)villas_samples_in_kernel_buf / d->sample_rate_hz * 1e3;
|
||||
info("Added latency due to buffering: %4.1f ms\n", latencyMs);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -871,12 +876,19 @@ int comedi_write(struct node *n, struct sample *smps[], unsigned cnt)
|
|||
const size_t raw_samples_in_buffer = bytes_in_buffer / d->sample_size;
|
||||
const size_t villas_samples_in_buffer = raw_samples_in_buffer / d->chanlist_len;
|
||||
|
||||
|
||||
if(villas_samples_in_buffer == buffer_capacity_villas) {
|
||||
warn("Comedi buffer is full");
|
||||
return 0;
|
||||
} else if(villas_samples_in_buffer % 1000 == 0) {
|
||||
info("Comedi buffer: %4ld / %ld villas samples",
|
||||
villas_samples_in_buffer, buffer_capacity_villas);
|
||||
} else {
|
||||
struct timespec now = time_now();
|
||||
if(time_delta(&d->last_debug, &now) >= 1) {
|
||||
debug(LOG_COMEDI | 2, "Comedi write buffer: %4ld villas samples (%2.0f%% of buffer)",
|
||||
villas_samples_in_buffer,
|
||||
(100.0f * villas_samples_in_buffer / buffer_capacity_villas));
|
||||
|
||||
d->last_debug = time_now();
|
||||
}
|
||||
}
|
||||
|
||||
size_t villas_samples_written = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue