From eb39b81b695adfe78ebe941bda197b62deff93a4 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 25 Oct 2013 14:17:29 -0600 Subject: [PATCH] apps/examples/adc: Add support for software triggering --- ChangeLog.txt | 2 ++ examples/adc/Kconfig | 11 +++++++++++ examples/adc/adc_main.c | 16 ++++++++++++++-- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 1e4ada3af..d553b7842 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -697,4 +697,6 @@ some kruft removal (2013-10-24). * apps/examples/can/can_main.c: Correct an error in a debug statement. From Martin Lederhilger (2013-10-24). + * apps/examples/adc: Add support so that a ADC driven by + software triggering can be tested (2013-10-25). diff --git a/examples/adc/Kconfig b/examples/adc/Kconfig index 85c875deb..655427780 100644 --- a/examples/adc/Kconfig +++ b/examples/adc/Kconfig @@ -34,4 +34,15 @@ config EXAMPLES_ADC_GROUPSIZE ---help--- The number of samples to read at once. Default: 4 +config EXAMPLES_ADC_SWTRIG + bool "Use software trigger" + default n + ---help--- + Some ADCs may be configured so there is no automatic or periodic + conversion of samples. Rather, the ADC sampling must be trigger by + software via an ioctl command. Select this option only if + applicable for your ADC configuration. In this case, the test will + issue the software trigger ioctl before attempting to read from the + ADC. + endif diff --git a/examples/adc/adc_main.c b/examples/adc/adc_main.c index 553658fee..b0ed43897 100644 --- a/examples/adc/adc_main.c +++ b/examples/adc/adc_main.c @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -310,7 +311,18 @@ int adc_main(int argc, char *argv[]) msgflush(); - /* Read CONFIG_EXAMPLES_ADC_GROUPSIZE samples */ +#ifdef CONFIG_EXAMPLES_ADC_SWTRIG + /* Issue the software trigger to start ADC conversion */ + + ret = ioctl(fd, ANIOC_TRIGGER, 0); + if (ret < 0) + { + int errcode = errno; + message("adc_main: ANIOC_TRIGGER ioctl failed: %d\n", errcode); + } +#endif + + /* Read up to CONFIG_EXAMPLES_ADC_GROUPSIZE samples */ readsize = CONFIG_EXAMPLES_ADC_GROUPSIZE * sizeof(struct adc_msg_s); nbytes = read(fd, sample, readsize); @@ -351,7 +363,7 @@ int adc_main(int argc, char *argv[]) for (i = 0; i < nsamples ; i++) { message("%d: channel: %d value: %d\n", - i, sample[i].am_channel, sample[i].am_data); + i+1, sample[i].am_channel, sample[i].am_data); } } }