aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2011-08-25 15:46:13 +0200
committerDaniel Lezcano <daniel.lezcano@linaro.org>2011-08-25 15:46:13 +0200
commit960b4e9154d68ee36ba5361fc5882d0a15e3da5f (patch)
treecd94c43a37989ecacc5b8c2b91bf852c26e1a56d
parent716b23e5c94867f5e1f9729880f8b2abcb776e17 (diff)
display the gpio info
Show in ncurses mode the gpio informations. Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
-rw-r--r--gpio.c130
1 files changed, 101 insertions, 29 deletions
diff --git a/gpio.c b/gpio.c
index 562a11d..f7d2a10 100644
--- a/gpio.c
+++ b/gpio.c
@@ -57,33 +57,6 @@ static struct gpio_info *gpio_alloc(void)
return gi;
}
-static int gpio_display(bool refresh)
-{
- return 0;
-}
-
-static int gpio_select(void)
-{
- return 0;
-}
-
-static int gpio_find(const char *name)
-{
- return 0;
-}
-
-static int gpio_selectf(void)
-{
- return 0;
-}
-
-static struct display_ops gpio_ops = {
- .display = gpio_display,
- .select = gpio_select,
- .find = gpio_find,
- .selectf = gpio_selectf,
-};
-
static int gpio_filter_cb(const char *name)
{
/* let's ignore some directories in order to avoid to be
@@ -169,8 +142,21 @@ static int dump_gpio_cb(struct tree *t, void *data)
t->depth > 1 ? " ": "", t->next ? "|" : " ") < 0)
return -1;
- printf("%s%s-- %s (active_low:%d)\n",
- gpio->prefix, !t->next ? "`" : "", t->name, gpio->active_low);
+ printf("%s%s-- %s (", gpio->prefix, !t->next ? "`" : "", t->name);
+
+ if (gpio->active_low != -1)
+ printf(" active_low:%d", gpio->active_low);
+
+ if (gpio->value != -1)
+ printf(", value:%d", gpio->value);
+
+ if (gpio->edge != -1)
+ printf(", edge:%d", gpio->edge);
+
+ if (gpio->direction != -1)
+ printf(", direction:%d", gpio->direction);
+
+ printf(" )\n");
return 0;
}
@@ -192,6 +178,92 @@ int gpio_dump(void)
return ret;
}
+static char *gpio_line(struct tree *t)
+{
+ struct gpio_info *gpio = t->private;
+ char *gpioline;
+
+ if (asprintf(&gpioline, "%-20s %-10d %-10d %-10d %-10d", t-> name,
+ gpio->value, gpio->active_low, gpio->edge, gpio->direction) < 0)
+ return NULL;
+
+ return gpioline;
+}
+
+static int _gpio_print_info_cb(struct tree *t, void *data)
+{
+ int *line = data;
+ char *buffer;
+
+ /* we skip the root node of the tree */
+ if (!t->parent)
+ return 0;
+
+ buffer = gpio_line(t);
+ if (!buffer)
+ return -1;
+
+ display_print_line(GPIO, *line, buffer, 0, t);
+
+ (*line)++;
+
+ free(buffer);
+
+ return 0;
+}
+
+static int gpio_print_info_cb(struct tree *t, void *data)
+{
+ /* we skip the root node of the tree */
+ if (!t->parent)
+ return 0;
+
+ return _gpio_print_info_cb(t, data);
+}
+
+static int gpio_print_header(void)
+{
+ char *buf;
+ int ret;
+
+ if (asprintf(&buf, "%-20s %-10s %-10s %-10s %-10s",
+ "Name", "Value", "Active_low", "Edge", "Direction") < 0)
+ return -1;
+
+ ret = display_column_name(buf);
+
+ free(buf);
+
+ return ret;
+}
+
+static int gpio_print_info(struct tree *tree)
+{
+ int ret, line = 0;
+
+ display_reset_cursor(GPIO);
+
+ gpio_print_header();
+
+ ret = tree_for_each(tree, gpio_print_info_cb, &line);
+
+ display_refresh_pad(GPIO);
+
+ return ret;
+}
+
+static int gpio_display(bool refresh)
+{
+ if (refresh && read_gpio_info(gpio_tree))
+ return -1;
+
+ return gpio_print_info(gpio_tree);
+}
+
+static struct display_ops gpio_ops = {
+ .display = gpio_display,
+};
+
/*
* Initialize the gpio framework
*/