This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 72cf59b64 examples/comp: add comparator example tool
72cf59b64 is described below
commit 72cf59b647341309f8164c189be904303f5dd516
Author: Daniel P. Carvalho <[email protected]>
AuthorDate: Mon Sep 14 21:07:20 2026 -0300
examples/comp: add comparator example tool
Add a dedicated NSH tool for testing and interacting with analog
comparator devices (/dev/comp*). Supports reading comparator output
state, enabling/disabling via IOCTL, and performing an automated voltage
ramp sweep using a DAC device when available.
Assisted-by: Gemini:gemini-2.5-pro
Signed-off-by: Daniel P. Carvalho <[email protected]>
---
examples/comp/CMakeLists.txt | 35 +++
examples/comp/Kconfig | 43 +++
examples/comp/Make.defs | 25 ++
examples/comp/Makefile | 36 +++
examples/comp/comp_main.c | 625 +++++++++++++++++++++++++++++++++++++++++++
5 files changed, 764 insertions(+)
diff --git a/examples/comp/CMakeLists.txt b/examples/comp/CMakeLists.txt
new file mode 100644
index 000000000..80872ecf0
--- /dev/null
+++ b/examples/comp/CMakeLists.txt
@@ -0,0 +1,35 @@
+#
##############################################################################
+# apps/examples/comp/CMakeLists.txt
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
contributor
+# license agreements. See the NOTICE file distributed with this work for
+# additional information regarding copyright ownership. The ASF licenses this
+# file to you under the Apache License, Version 2.0 (the "License"); you may
not
+# use this file except in compliance with the License. You may obtain a copy
of
+# the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+#
+#
##############################################################################
+
+if(CONFIG_EXAMPLES_COMP)
+ nuttx_add_application(
+ NAME
+ ${CONFIG_EXAMPLES_COMP_PROGNAME}
+ PRIORITY
+ ${CONFIG_EXAMPLES_COMP_PRIORITY}
+ STACKSIZE
+ ${CONFIG_EXAMPLES_COMP_STACKSIZE}
+ MODULE
+ ${CONFIG_EXAMPLES_COMP}
+ SRCS
+ comp_main.c)
+endif()
diff --git a/examples/comp/Kconfig b/examples/comp/Kconfig
new file mode 100644
index 000000000..d628db061
--- /dev/null
+++ b/examples/comp/Kconfig
@@ -0,0 +1,43 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+config EXAMPLES_COMP
+ tristate "Comparator tool"
+ default n
+ depends on COMP
+ ---help---
+ Enable support for the comparator tool.
+
+if EXAMPLES_COMP
+
+config EXAMPLES_COMP_PROGNAME
+ string "Program name"
+ default "comp"
+ ---help---
+ This is the name of the program that will be used in the shell
+
+config EXAMPLES_COMP_PRIORITY
+ int "Comparator tool task priority"
+ default 100
+
+config EXAMPLES_COMP_STACKSIZE
+ int "Comparator tool stack size"
+ default DEFAULT_TASK_STACKSIZE
+
+config EXAMPLES_COMP_DEVPATH
+ string "Comparator device path"
+ default "/dev/comp0"
+ ---help---
+ The default path to the comparator device. Default: /dev/comp0
+
+config EXAMPLES_COMP_DACPATH
+ string "DAC device path for ramp test"
+ default "/dev/dac5" if ARCH_CHIP_STM32G4
+ default "/dev/dac0"
+ depends on DAC
+ ---help---
+ The default path to the DAC device for generating a voltage
ramp.
+
+endif
diff --git a/examples/comp/Make.defs b/examples/comp/Make.defs
new file mode 100644
index 000000000..af2003dd5
--- /dev/null
+++ b/examples/comp/Make.defs
@@ -0,0 +1,25 @@
+############################################################################
+# apps/examples/comp/Make.defs
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+ifneq ($(CONFIG_EXAMPLES_COMP),)
+CONFIGURED_APPS += $(APPDIR)/examples/comp
+endif
diff --git a/examples/comp/Makefile b/examples/comp/Makefile
new file mode 100644
index 000000000..a6790c16e
--- /dev/null
+++ b/examples/comp/Makefile
@@ -0,0 +1,36 @@
+############################################################################
+# apps/examples/comp/Makefile
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(APPDIR)/Make.defs
+
+# Comparator tool
+
+MAINSRC = comp_main.c
+
+# application info
+
+PROGNAME = $(CONFIG_EXAMPLES_COMP_PROGNAME)
+PRIORITY = $(CONFIG_EXAMPLES_COMP_PRIORITY)
+STACKSIZE = $(CONFIG_EXAMPLES_COMP_STACKSIZE)
+MODULE = $(CONFIG_EXAMPLES_COMP)
+
+include $(APPDIR)/Application.mk
diff --git a/examples/comp/comp_main.c b/examples/comp/comp_main.c
new file mode 100644
index 000000000..4d9bf30a5
--- /dev/null
+++ b/examples/comp/comp_main.c
@@ -0,0 +1,625 @@
+/****************************************************************************
+ * apps/examples/comp/comp_main.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <sys/ioctl.h>
+#include <nuttx/analog/ioctl.h>
+
+#ifdef CONFIG_DAC
+# include <nuttx/analog/dac.h>
+#endif
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#ifndef CONFIG_COMP
+# error "COMP device support is not enabled (CONFIG_COMP)"
+#endif
+
+#ifndef CONFIG_EXAMPLES_COMP_DEVPATH
+# define CONFIG_EXAMPLES_COMP_DEVPATH "/dev/comp0"
+#endif
+
+#ifdef CONFIG_DAC
+# ifndef CONFIG_EXAMPLES_COMP_DACPATH
+# define CONFIG_EXAMPLES_COMP_DACPATH "/dev/dac0"
+# endif
+#endif
+
+#define DEFAULT_RAMP_START 0
+#define DEFAULT_RAMP_END 4095
+#define DEFAULT_RAMP_STEP 100
+#define DEFAULT_RAMP_DELAY 5
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct comp_state_s
+{
+ FAR const char *devpath;
+#ifdef CONFIG_DAC
+ FAR const char *dacpath;
+ int ramp_start;
+ int ramp_end;
+ int ramp_step;
+ int ramp_delay;
+#endif
+};
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static struct comp_state_s g_comp_state =
+{
+ CONFIG_EXAMPLES_COMP_DEVPATH
+#ifdef CONFIG_DAC
+ ,
+ CONFIG_EXAMPLES_COMP_DACPATH,
+ DEFAULT_RAMP_START,
+ DEFAULT_RAMP_END,
+ DEFAULT_RAMP_STEP,
+ DEFAULT_RAMP_DELAY
+#endif
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: comp_help
+ ****************************************************************************/
+
+static void comp_help(FAR const char *progname)
+{
+ printf("Usage: %s [OPTIONS] [COMMAND]\n", progname);
+ printf("\nCommands:\n");
+ printf(" enable Enable the comparator\n");
+ printf(" disable Disable the comparator\n");
+ printf(" read Read comparator output state (0 or 1)\n");
+ printf(" test Run test sequence (ioctls, enable/disable)\n");
+#ifdef CONFIG_DAC
+ printf(" ramp Generate DAC voltage ramp to test trip\n");
+#endif
+ printf(" help Show this help message\n");
+ printf("\nOptions:\n");
+ printf(" -p <devpath> Comparator device path (default: %s)\n",
+ CONFIG_EXAMPLES_COMP_DEVPATH);
+#ifdef CONFIG_DAC
+ printf(" -D <dacpath> DAC device path (default: %s)\n",
+ CONFIG_EXAMPLES_COMP_DACPATH);
+ printf(" -s <start> Ramp start value (default: %d)\n",
+ DEFAULT_RAMP_START);
+ printf(" -f <end> Ramp end value (default: %d)\n",
+ DEFAULT_RAMP_END);
+ printf(" -i <step> Ramp step increment (default: %d)\n",
+ DEFAULT_RAMP_STEP);
+ printf(" -w <delay> Delay per step in ms (default: %d)\n",
+ DEFAULT_RAMP_DELAY);
+#endif
+ printf(" -e Same as 'enable'\n");
+ printf(" -d Same as 'disable'\n");
+ printf(" -r Same as 'read'\n");
+ printf(" -t Same as 'test'\n");
+ printf(" -h Show this help message\n");
+}
+
+/****************************************************************************
+ * Name: comp_do_enable
+ ****************************************************************************/
+
+static int comp_do_enable(FAR const char *devpath)
+{
+ int errcode;
+ int fd;
+ int ret;
+
+ fd = open(devpath, O_RDONLY);
+ if (fd < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Failed to open %s: %d\n", devpath, errcode);
+ return -errcode;
+ }
+
+ ret = ioctl(fd, ANIOC_COMP_ENABLE, 0);
+ if (ret < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: ioctl(ANIOC_COMP_ENABLE) failed: %d\n",
+ errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ printf("%s: Comparator enabled successfully\n", devpath);
+ close(fd);
+ return OK;
+}
+
+/****************************************************************************
+ * Name: comp_do_disable
+ ****************************************************************************/
+
+static int comp_do_disable(FAR const char *devpath)
+{
+ int errcode;
+ int fd;
+ int ret;
+
+ fd = open(devpath, O_RDONLY);
+ if (fd < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Failed to open %s: %d\n", devpath, errcode);
+ return -errcode;
+ }
+
+ ret = ioctl(fd, ANIOC_COMP_DISABLE, 0);
+ if (ret < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: ioctl(ANIOC_COMP_DISABLE) failed: %d\n",
+ errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ printf("%s: Comparator disabled successfully\n", devpath);
+ close(fd);
+ return OK;
+}
+
+/****************************************************************************
+ * Name: comp_do_read
+ ****************************************************************************/
+
+static int comp_do_read(FAR const char *devpath, FAR uint8_t *val)
+{
+ int errcode;
+ int fd;
+ ssize_t nbytes;
+ uint8_t output = 0;
+
+ fd = open(devpath, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Failed to open %s: %d\n", devpath, errcode);
+ return -errcode;
+ }
+
+ nbytes = read(fd, &output, 1);
+ if (nbytes < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: read from %s failed: %d\n", devpath, errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ close(fd);
+
+ if (val != NULL)
+ {
+ *val = output;
+ }
+
+ return OK;
+}
+
+/****************************************************************************
+ * Name: comp_do_test
+ ****************************************************************************/
+
+static int comp_do_test(FAR const char *devpath)
+{
+ int errcode;
+ int fd;
+ int ret;
+ uint8_t val;
+ ssize_t nbytes;
+
+ printf("Running comparator test on %s...\n", devpath);
+
+ fd = open(devpath, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Failed to open %s: %d\n", devpath, errcode);
+ return -errcode;
+ }
+
+ /* 1. Read initial state */
+
+ nbytes = read(fd, &val, 1);
+ if (nbytes < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Initial read failed: %d\n", errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ printf(" 1. Initial output state: %u\n", (unsigned int)val);
+
+ /* 2. Test ANIOC_COMP_DISABLE */
+
+ ret = ioctl(fd, ANIOC_COMP_DISABLE, 0);
+ if (ret < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: ioctl(ANIOC_COMP_DISABLE) failed: %d\n",
+ errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ printf(" 2. ANIOC_COMP_DISABLE: OK\n");
+
+ /* 3. Read state while disabled */
+
+ nbytes = read(fd, &val, 1);
+ if (nbytes < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Read after disable failed: %d\n", errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ printf(" 3. Output state when disabled: %u\n", (unsigned int)val);
+
+ /* 4. Test ANIOC_COMP_ENABLE */
+
+ ret = ioctl(fd, ANIOC_COMP_ENABLE, 0);
+ if (ret < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: ioctl(ANIOC_COMP_ENABLE) failed: %d\n",
+ errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ printf(" 4. ANIOC_COMP_ENABLE: OK\n");
+
+ /* 5. Read state after re-enable */
+
+ nbytes = read(fd, &val, 1);
+ if (nbytes < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Read after enable failed: %d\n", errcode);
+ close(fd);
+ return -errcode;
+ }
+
+ printf(" 5. Output state when enabled: %u\n", (unsigned int)val);
+
+ close(fd);
+ printf("Comparator test PASSED on %s\n", devpath);
+ return OK;
+}
+
+#ifdef CONFIG_DAC
+/****************************************************************************
+ * Name: comp_do_ramp
+ *
+ * Description:
+ * Generate a DAC voltage ramp and monitor comparator output transitions.
+ * This performs a real analog threshold comparison on hardware.
+ *
+ ****************************************************************************/
+
+static int comp_do_ramp(FAR const char *comp_path,
+ FAR const char *dac_path,
+ int start, int end, int step, int delay_ms)
+{
+ int comp_fd;
+ int dac_fd;
+ int errcode;
+ int ret;
+ int val;
+ int transitions = 0;
+ int prev_state = -1;
+ uint8_t cur_state = 0;
+ struct dac_msg_s msg;
+ ssize_t nbytes;
+
+ printf("=== Comparator Ramp Test ===\n");
+ printf(" COMP device : %s\n", comp_path);
+ printf(" DAC device : %s\n", dac_path);
+ printf(" Sweep range : %d -> %d (step %d, delay %d ms)\n\n",
+ start, end, step, delay_ms);
+
+ /* Open comparator device */
+
+ comp_fd = open(comp_path, O_RDONLY | O_NONBLOCK);
+ if (comp_fd < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Failed to open %s: %d\n", comp_path, errcode);
+ return -errcode;
+ }
+
+ /* Ensure comparator is enabled */
+
+ ret = ioctl(comp_fd, ANIOC_COMP_ENABLE, 0);
+ if (ret < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Failed to enable comparator: %d\n", errcode);
+ close(comp_fd);
+ return -errcode;
+ }
+
+ /* Open DAC device */
+
+ dac_fd = open(dac_path, O_WRONLY | O_NONBLOCK);
+ if (dac_fd < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: Failed to open DAC %s: %d\n",
+ dac_path, errcode);
+ close(comp_fd);
+ return -errcode;
+ }
+
+ /* Sweep DAC values */
+
+ for (val = start; val <= end; val += step)
+ {
+ uint32_t mv;
+
+ msg.am_channel = 0;
+ msg.am_data = val;
+
+ nbytes = write(dac_fd, &msg, sizeof(msg));
+ if (nbytes < 0 && errno != EAGAIN)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: DAC write failed: %d\n", errcode);
+ break;
+ }
+
+ usleep(delay_ms * 1000);
+
+ nbytes = read(comp_fd, &cur_state, 1);
+ if (nbytes < 0)
+ {
+ errcode = errno;
+ fprintf(stderr, "ERROR: COMP read failed: %d\n", errcode);
+ break;
+ }
+
+ mv = (uint32_t)((val * 3300ULL) / 4095ULL);
+
+ if (prev_state >= 0 && (int)cur_state != prev_state)
+ {
+ transitions++;
+ printf(" -> [TRIP EVENT #%d] DAC=%4d (~%4lu mV) | "
+ "COMP output: %d -> %d\n",
+ transitions, val, (unsigned long)mv, prev_state, cur_state);
+ }
+ else if (val == start || val + step > end || (val % (step * 5)) == 0)
+ {
+ printf(" DAC=%4d (~%4lu mV) | COMP output: %d\n",
+ val, (unsigned long)mv, (int)cur_state);
+ }
+
+ prev_state = (int)cur_state;
+ }
+
+ close(dac_fd);
+ close(comp_fd);
+
+ printf("\n=== Test Summary ===\n");
+ if (transitions > 0)
+ {
+ printf("SUCCESS: Detected %d comparator transition(s)!\n",
+ transitions);
+ ret = OK;
+ }
+ else
+ {
+ printf("COMPLETED: Output stayed at %d across entire sweep range.\n",
+ prev_state);
+ printf("Note: Ensure INP pin is biased within 0..3.3V.\n");
+ ret = OK;
+ }
+
+ return ret;
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: main
+ ****************************************************************************/
+
+int main(int argc, FAR char *argv[])
+{
+ int opt;
+ int ret = OK;
+ uint8_t val = 0;
+ FAR const char *cmd = NULL;
+
+ g_comp_state.devpath = CONFIG_EXAMPLES_COMP_DEVPATH;
+#ifdef CONFIG_DAC
+ g_comp_state.dacpath = CONFIG_EXAMPLES_COMP_DACPATH;
+ g_comp_state.ramp_start = DEFAULT_RAMP_START;
+ g_comp_state.ramp_end = DEFAULT_RAMP_END;
+ g_comp_state.ramp_step = DEFAULT_RAMP_STEP;
+ g_comp_state.ramp_delay = DEFAULT_RAMP_DELAY;
+#endif
+
+ if (argc > 1 && argv[1][0] != '-')
+ {
+ cmd = argv[1];
+ argc--;
+ argv++;
+ }
+
+#ifdef CONFIG_DAC
+ while ((opt = getopt(argc, argv, "p:D:s:f:i:w:edrth")) != -1)
+#else
+ while ((opt = getopt(argc, argv, "p:edrth")) != -1)
+#endif
+ {
+ switch (opt)
+ {
+ case 'p':
+ g_comp_state.devpath = optarg;
+ break;
+
+#ifdef CONFIG_DAC
+ case 'D':
+ g_comp_state.dacpath = optarg;
+ break;
+
+ case 's':
+ g_comp_state.ramp_start = atoi(optarg);
+ break;
+
+ case 'f':
+ g_comp_state.ramp_end = atoi(optarg);
+ break;
+
+ case 'i':
+ g_comp_state.ramp_step = atoi(optarg);
+ break;
+
+ case 'w':
+ g_comp_state.ramp_delay = atoi(optarg);
+ break;
+#endif
+
+ case 'e':
+ cmd = "enable";
+ break;
+
+ case 'd':
+ cmd = "disable";
+ break;
+
+ case 'r':
+ cmd = "read";
+ break;
+
+ case 't':
+ cmd = "test";
+ break;
+
+ case 'h':
+ comp_help(argv[0]);
+ return OK;
+
+ default:
+ comp_help(argv[0]);
+ return -EINVAL;
+ }
+ }
+
+ if (cmd == NULL && optind < argc)
+ {
+ cmd = argv[optind];
+ }
+
+ if (cmd == NULL || strcmp(cmd, "test") == 0)
+ {
+ ret = comp_do_test(g_comp_state.devpath);
+#ifdef CONFIG_DAC
+ if (ret == OK)
+ {
+ printf("\n");
+ ret = comp_do_ramp(g_comp_state.devpath,
+ g_comp_state.dacpath,
+ g_comp_state.ramp_start,
+ g_comp_state.ramp_end,
+ g_comp_state.ramp_step,
+ g_comp_state.ramp_delay);
+ }
+#endif
+ }
+#ifdef CONFIG_DAC
+ else if (strcmp(cmd, "ramp") == 0)
+ {
+ ret = comp_do_ramp(g_comp_state.devpath,
+ g_comp_state.dacpath,
+ g_comp_state.ramp_start,
+ g_comp_state.ramp_end,
+ g_comp_state.ramp_step,
+ g_comp_state.ramp_delay);
+ }
+#endif
+ else if (strcmp(cmd, "enable") == 0)
+ {
+ ret = comp_do_enable(g_comp_state.devpath);
+ }
+ else if (strcmp(cmd, "disable") == 0)
+ {
+ ret = comp_do_disable(g_comp_state.devpath);
+ }
+ else if (strcmp(cmd, "read") == 0)
+ {
+ ret = comp_do_read(g_comp_state.devpath, &val);
+ if (ret == OK)
+ {
+ printf("%s: output = %u\n", g_comp_state.devpath,
+ (unsigned int)val);
+ }
+ }
+ else if (strcmp(cmd, "help") == 0)
+ {
+ comp_help(argv[0]);
+ ret = OK;
+ }
+ else
+ {
+ fprintf(stderr, "Unknown command: %s\n", cmd);
+ comp_help(argv[0]);
+ ret = -EINVAL;
+ }
+
+ return ret;
+}