aboutsummaryrefslogtreecommitdiff
path: root/libarmep/sample.c
diff options
context:
space:
mode:
Diffstat (limited to 'libarmep/sample.c')
-rw-r--r--libarmep/sample.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/libarmep/sample.c b/libarmep/sample.c
index f44e61b..d11550c 100644
--- a/libarmep/sample.c
+++ b/libarmep/sample.c
@@ -85,6 +85,21 @@ int process_sample(struct aep *aep, int ch_index)
vo1 = ch->voffset[1];
}
+ aepd_interface = aep->aep_context->aepd_interface;
+ if (aepd_interface && aepd_interface->auto_zero) {
+ fprintf(stderr, "setting inline autozero\n");
+ aepd_interface->auto_zero = 0;
+ aep->aep_context->auto_zero = 2;
+
+ aep->aep_context->no_correction = 1;
+ aep->aep_context->mv_min = 0;
+ aep->aep_context->mw_min = 0;
+ aep->aep_context->average_len = 5000;
+ aep->aep_context->ms_capture = aep->aep_context->average_len / 10;
+ aep->aep_context->decimate = aep->aep_context->average_len;
+ aep->aep_context->done_az_channels = 0;
+ }
+
if (ch->pretrig_ring) {
ch->pretrig_ring[ch->head].v = aep->voltage;
ch->pretrig_ring[ch->head].i = aep->current;
@@ -242,8 +257,6 @@ unripe:
ch->decimation_counter = 0;
if (aep->aep_context->auto_zero) {
- fprintf(stderr, "Autozero for %s done \n",
- ch->channel_name);
if (v1 > IGNORE_AUTOZERO_VOLTAGE || v1 < -IGNORE_AUTOZERO_VOLTAGE)
fprintf(stderr, " Voltage Autozero skipped as %fV "
"unfeasibly high\n", v1);
@@ -254,10 +267,28 @@ unripe:
ch->voffset[1] = -avg_mean_us(&ch->avg_mean_current) /
ADC_COUNTS_PER_VOLT_CH2;
ch->vnoise[1] = ch->max[1] - ch->min[1];
+ ch->samples = 0;
+
+ fprintf(stderr, "Autozero for %s done (voltage %f) \n", ch->channel_name, ch->voffset[0]);
+
if (configure(aep->aep_context, aep, aep->dev_filepath, aep->aep_context->config_filepath, ch) < 0)
fprintf(stderr,
"Failed to write autozero info to config\n");
- goto done;
+ aep->aep_context->done_az_channels++;
+ fprintf(stderr, "done %d autozero channels of %d\n", aep->aep_context->done_az_channels, aep->aep_context->count_channel_names);
+ if (aep->aep_context->done_az_channels == aep->aep_context->count_channel_names) {
+
+ if (aep->aep_context->auto_zero == 2) { /* as part of larger collection */
+ aep->aep_context->auto_zero = 0;
+ aep->aep_context->no_correction = 0;
+ aep->aep_context->mv_min = 0;
+ aep->aep_context->mw_min = 0;
+ aep->aep_context->average_len = 1;
+ aep->aep_context->ms_capture = 0;
+ aep->aep_context->decimate = 1;
+ } else
+ goto done;
+ }
}
/* not everyone else may be ready, save the data first in per-channel sync ring buffers */
@@ -339,7 +370,7 @@ unripe:
done:
- if (aep->aep_context->ms_capture && (ch->samples / 10 - aep->aep_context->ms_holdoff) > aep->aep_context->ms_capture) {
+ if (aep->aep_context->auto_zero != 2 && aep->aep_context->ms_capture && (ch->samples / 10 - aep->aep_context->ms_holdoff) > aep->aep_context->ms_capture) {
fprintf(stderr, "%s: %dms capture complete ",
ch->channel_name, aep->aep_context->ms_capture);
ch->ignore = 1;