aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Green <andy.green@linaro.org>2012-11-10 10:56:47 +0800
committerAndy Green <andy.green@linaro.org>2012-11-10 10:56:47 +0800
commitb3120f0c6e3d77b1654883c59828b787dd759d28 (patch)
tree77c598fc3c48eb8a954dd6a499e81d805f77ef11
parentd04b16d638ce517004946dd3e1738f8ec61576bb (diff)
fix not all channels declared
If not all channels were configured in the config file, garbage was issued for the unconfigured channels (inf from 0R shunt) and the config file lost a character each time. This fixes the config issue and eliminates unconfigured channels from collection and output in both arm-probe and aepd. Reported-by: Sebastien Jan <s-jan@ti.com> Signed-off-by: Andy Green <andy.green@linaro.org>
-rw-r--r--libarmep/configuration.c1
-rw-r--r--libarmep/libarmep.h1
-rw-r--r--libarmep/sample.c12
-rw-r--r--libarmep/service.c13
4 files changed, 22 insertions, 5 deletions
diff --git a/libarmep/configuration.c b/libarmep/configuration.c
index 829ba09..3236483 100644
--- a/libarmep/configuration.c
+++ b/libarmep/configuration.c
@@ -246,6 +246,7 @@ int configure(struct aep_context *aep_context, struct aep *aep, const char *dev_
break;
}
actions = APCA_PULL_CHANNELS;
+ ch->flag_was_configured = 1;
copy_pos = 0;
no_copy = ch == wch;
break;
diff --git a/libarmep/libarmep.h b/libarmep/libarmep.h
index 6e8f6fe..dafbe04 100644
--- a/libarmep/libarmep.h
+++ b/libarmep/libarmep.h
@@ -202,6 +202,7 @@ struct aep_channel {
double avg_count;
char summary[128];
+ int flag_was_configured;
};
struct aep {
diff --git a/libarmep/sample.c b/libarmep/sample.c
index 320bfd9..f44e61b 100644
--- a/libarmep/sample.c
+++ b/libarmep/sample.c
@@ -77,6 +77,9 @@ int process_sample(struct aep *aep, int ch_index)
struct aepd_interface *aepd_interface;
struct aepd_interface_result *aepd_interface_result;
+ if (!ch->flag_was_configured)
+ goto done;
+
if (!aep->aep_context->no_correction) {
vo0 = ch->voffset[0];
vo1 = ch->voffset[1];
@@ -158,7 +161,7 @@ unripe:
ch->trigger_slave = who_triggered;
else {
who_triggered = ch;
- somebody_triggered = ch->samples_seen;
+ somebody_triggered = ch->samples_seen;
}
ch->triggered = 1;
ch->simple_avg[0] = 0;
@@ -278,7 +281,10 @@ unripe:
if (!aep->aep_context->aeps[m].fd)
continue;
for (i = 0; i < CHANNELS_PER_PROBE; i++) {
- if (aep->aep_context->aeps[m].ch[i].out_head == aep->aep_context->aeps[m].ch[i].out_tail)
+ if (!aep->aep_context->aeps[m].ch[i].flag_was_configured)
+ continue;
+ if (aep->aep_context->aeps[m].ch[i].out_head ==
+ aep->aep_context->aeps[m].ch[i].out_tail)
goto done;
hit++;
}
@@ -301,6 +307,8 @@ unripe:
for (i = 0; i < CHANNELS_PER_PROBE; i++) {
ich = &aep->aep_context->aeps[m].ch[i];
+ if (!ich->flag_was_configured)
+ continue;
v1a = ich->out_ring[0][ich->out_tail];
v2a = ich->out_ring[1][ich->out_tail];
diff --git a/libarmep/service.c b/libarmep/service.c
index b5b736b..798e256 100644
--- a/libarmep/service.c
+++ b/libarmep/service.c
@@ -78,6 +78,7 @@ static void init_aep(struct aep_context *aep_context, struct aep *aep, const cha
ch->voffset[1] = 0;
ch->vnoise[1] = 0;
ch->rshunt = 0;
+ ch->flag_was_configured = 0;
sprintf(ch->channel_name, "%s-%d", device_filepath, n);
ch->pretrig_ring = NULL;
ch->ring_samples = 0;
@@ -277,6 +278,9 @@ int service_aeps(struct aep_context *aep_context, int fd_with_rx)
for (n = 0; n < CHANNELS_PER_PROBE; n++) {
struct aep_channel *ch = &aep_context->aeps[aep_context->scan].ch[n];
+ if (!ch->flag_was_configured)
+ continue;
+
select_map(ch);
if (aep_context->original_count_channel_names) {
@@ -340,7 +344,8 @@ bail:
for (m = 0; m <= aep_context->highest; m++)
if (aep_context->aeps[m].fd > 0 && aep_context->aeps[m].done_config == 3) {
for (i = 0; i < CHANNELS_PER_PROBE; i++)
- if (aep_context->aeps[m].ch[i].requested)
+ if (aep_context->aeps[m].ch[i].requested &&
+ aep_context->aeps[m].ch[i].flag_was_configured)
c++;
}
@@ -370,7 +375,7 @@ bail:
for (i = 0; i < CHANNELS_PER_PROBE; i++) {
ch = &aep_context->aeps[m].ch[i];
- if (!ch->requested)
+ if (!ch->requested || !ch->flag_was_configured)
continue;
copy_public_ch_info_to_shared(aep_context->aepd_interface, chan, ch);
@@ -623,10 +628,12 @@ int aep_init_and_fork(struct aep_context *aep_context, char *argv[])
for (i = 0; i < CHANNELS_PER_PROBE; i++) {
ch = &aep_context->aeps[n].ch[i];
;
- if (configure(aep_context, &aep_context->aeps[n],
+ if (ch->flag_was_configured) {
+ if (configure(aep_context, &aep_context->aeps[n],
aep_context->aeps[n].dev_filepath,
aep_context->config_filepath, ch) < 0)
fprintf(stderr, "failed to update config\n");
+ }
}
probe_close(&aep_context->aeps[n]);