diff options
Diffstat (limited to 'libarmep/sample.c')
-rw-r--r-- | libarmep/sample.c | 39 |
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; |