From: Kent Gibson <warthog618@gmail.com>
To: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
bgolaszewski@baylibre.com, linus.walleij@linaro.org
Cc: Kent Gibson <warthog618@gmail.com>
Subject: [PATCH v4 18/20] tools: gpio: port gpio-event-mon to v2 uAPI
Date: Fri, 14 Aug 2020 11:02:55 +0800 [thread overview]
Message-ID: <20200814030257.135463-19-warthog618@gmail.com> (raw)
In-Reply-To: <20200814030257.135463-1-warthog618@gmail.com>
Port the gpio-event-mon tool to the latest GPIO uAPI.
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
tools/gpio/gpio-event-mon.c | 91 +++++++++++++++++++------------------
1 file changed, 47 insertions(+), 44 deletions(-)
diff --git a/tools/gpio/gpio-event-mon.c b/tools/gpio/gpio-event-mon.c
index 1a303a81aeef..d6a831200c18 100644
--- a/tools/gpio/gpio-event-mon.c
+++ b/tools/gpio/gpio-event-mon.c
@@ -23,17 +23,16 @@
#include <sys/ioctl.h>
#include <sys/types.h>
#include <linux/gpio.h>
+#include "gpio-utils.h"
int monitor_device(const char *device_name,
unsigned int line,
- uint32_t handleflags,
- uint32_t eventflags,
+ struct gpio_v2_line_config *config,
unsigned int loops)
{
- struct gpioevent_request req;
- struct gpiohandle_data data;
+ struct gpio_v2_line_values values;
char *chrdev_name;
- int fd;
+ int cfd, lfd;
int ret;
int i = 0;
@@ -41,44 +40,39 @@ int monitor_device(const char *device_name,
if (ret < 0)
return -ENOMEM;
- fd = open(chrdev_name, 0);
- if (fd == -1) {
+ cfd = open(chrdev_name, 0);
+ if (cfd == -1) {
ret = -errno;
fprintf(stderr, "Failed to open %s\n", chrdev_name);
goto exit_free_name;
}
- req.lineoffset = line;
- req.handleflags = handleflags;
- req.eventflags = eventflags;
- strcpy(req.consumer_label, "gpio-event-mon");
-
- ret = ioctl(fd, GPIO_GET_LINEEVENT_IOCTL, &req);
- if (ret == -1) {
- ret = -errno;
- fprintf(stderr, "Failed to issue GET EVENT "
- "IOCTL (%d)\n",
- ret);
- goto exit_close_error;
- }
+ ret = gpiotools_request_line(device_name, &line, 1, config,
+ "gpio-event-mon");
+ if (ret < 0)
+ goto exit_device_close;
+ else
+ lfd = ret;
/* Read initial states */
- ret = ioctl(req.fd, GPIOHANDLE_GET_LINE_VALUES_IOCTL, &data);
- if (ret == -1) {
- ret = -errno;
- fprintf(stderr, "Failed to issue GPIOHANDLE GET LINE "
- "VALUES IOCTL (%d)\n",
+ values.mask = 1;
+ values.bits = 0;
+ ret = gpiotools_get_values(lfd, &values);
+ if (ret < 0) {
+ fprintf(stderr,
+ "Failed to issue GPIO LINE GET VALUES IOCTL (%d)\n",
ret);
- goto exit_close_error;
+ goto exit_line_close;
}
fprintf(stdout, "Monitoring line %d on %s\n", line, device_name);
- fprintf(stdout, "Initial line value: %d\n", data.values[0]);
+ fprintf(stdout, "Initial line value: %d\n",
+ gpiotools_test_bit(values.bits, 0));
while (1) {
- struct gpioevent_data event;
+ struct gpio_v2_line_event event;
- ret = read(req.fd, &event, sizeof(event));
+ ret = read(lfd, &event, sizeof(event));
if (ret == -1) {
if (errno == -EAGAIN) {
fprintf(stderr, "nothing available\n");
@@ -96,12 +90,14 @@ int monitor_device(const char *device_name,
ret = -EIO;
break;
}
- fprintf(stdout, "GPIO EVENT %llu: ", event.timestamp);
+ fprintf(stdout, "GPIO EVENT at %llu on line %d (%d|%d) ",
+ event.timestamp, event.offset, event.line_seqno,
+ event.seqno);
switch (event.id) {
- case GPIOEVENT_EVENT_RISING_EDGE:
+ case GPIO_V2_LINE_EVENT_RISING_EDGE:
fprintf(stdout, "rising edge");
break;
- case GPIOEVENT_EVENT_FALLING_EDGE:
+ case GPIO_V2_LINE_EVENT_FALLING_EDGE:
fprintf(stdout, "falling edge");
break;
default:
@@ -114,8 +110,11 @@ int monitor_device(const char *device_name,
break;
}
-exit_close_error:
- if (close(fd) == -1)
+exit_line_close:
+ if (close(lfd) == -1)
+ perror("Failed to close line file");
+exit_device_close:
+ if (close(cfd) == -1)
perror("Failed to close GPIO character device file");
exit_free_name:
free(chrdev_name);
@@ -140,15 +139,20 @@ void print_usage(void)
);
}
+#define EDGE_FLAGS \
+ (GPIO_V2_LINE_FLAG_EDGE_RISING | \
+ GPIO_V2_LINE_FLAG_EDGE_FALLING)
+
int main(int argc, char **argv)
{
const char *device_name = NULL;
unsigned int line = -1;
unsigned int loops = 0;
- uint32_t handleflags = GPIOHANDLE_REQUEST_INPUT;
- uint32_t eventflags = 0;
+ struct gpio_v2_line_config config;
int c;
+ memset(&config, 0, sizeof(config));
+ config.flags = GPIO_V2_LINE_FLAG_INPUT;
while ((c = getopt(argc, argv, "c:n:o:dsrf?")) != -1) {
switch (c) {
case 'c':
@@ -161,16 +165,16 @@ int main(int argc, char **argv)
line = strtoul(optarg, NULL, 10);
break;
case 'd':
- handleflags |= GPIOHANDLE_REQUEST_OPEN_DRAIN;
+ config.flags |= GPIO_V2_LINE_FLAG_OPEN_DRAIN;
break;
case 's':
- handleflags |= GPIOHANDLE_REQUEST_OPEN_SOURCE;
+ config.flags |= GPIO_V2_LINE_FLAG_OPEN_SOURCE;
break;
case 'r':
- eventflags |= GPIOEVENT_REQUEST_RISING_EDGE;
+ config.flags |= GPIO_V2_LINE_FLAG_EDGE_RISING;
break;
case 'f':
- eventflags |= GPIOEVENT_REQUEST_FALLING_EDGE;
+ config.flags |= GPIO_V2_LINE_FLAG_EDGE_FALLING;
break;
case '?':
print_usage();
@@ -182,11 +186,10 @@ int main(int argc, char **argv)
print_usage();
return -1;
}
- if (!eventflags) {
+ if (!(config.flags & EDGE_FLAGS)) {
printf("No flags specified, listening on both rising and "
"falling edges\n");
- eventflags = GPIOEVENT_REQUEST_BOTH_EDGES;
+ config.flags |= EDGE_FLAGS;
}
- return monitor_device(device_name, line, handleflags,
- eventflags, loops);
+ return monitor_device(device_name, line, &config, loops);
}
--
2.28.0
next prev parent reply other threads:[~2020-08-14 3:05 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-14 3:02 [PATCH v4 00/20] gpio: cdev: add uAPI v2 Kent Gibson
2020-08-14 3:02 ` [PATCH v4 01/20] gpiolib: cdev: desc_to_lineinfo should set info offset Kent Gibson
2020-08-14 3:02 ` [PATCH v4 02/20] gpiolib: cdev: replace strncpy with strscpy Kent Gibson
2020-08-14 3:02 ` [PATCH v4 03/20] gpio: uapi: define GPIO_MAX_NAME_SIZE for array sizes Kent Gibson
2020-08-14 3:02 ` [PATCH v4 04/20] gpio: uapi: define uAPI v2 Kent Gibson
2020-08-14 3:02 ` [PATCH v4 05/20] gpiolib: make cdev a build option Kent Gibson
2020-08-14 3:02 ` [PATCH v4 06/20] gpiolib: add build option for CDEV v1 ABI Kent Gibson
2020-08-14 3:02 ` [PATCH v4 07/20] gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL Kent Gibson
2020-08-14 19:31 ` Bartosz Golaszewski
2020-08-15 6:53 ` Kent Gibson
2020-08-15 7:21 ` Bartosz Golaszewski
2020-08-15 13:21 ` Kent Gibson
2020-08-16 12:13 ` Bartosz Golaszewski
2020-08-14 3:02 ` [PATCH v4 08/20] gpiolib: cdev: support GPIO_V2_GET_LINEINFO_IOCTL and GPIO_V2_GET_LINEINFO_WATCH_IOCTL Kent Gibson
2020-08-16 12:03 ` Bartosz Golaszewski
2020-08-14 3:02 ` [PATCH v4 09/20] gpiolib: cdev: support edge detection for uAPI v2 Kent Gibson
2020-08-16 14:32 ` Bartosz Golaszewski
2020-08-18 14:00 ` Kent Gibson
2020-08-14 3:02 ` [PATCH v4 10/20] gpiolib: cdev: support GPIO_V2_LINE_SET_CONFIG_IOCTL Kent Gibson
2020-08-16 14:40 ` Bartosz Golaszewski
2020-08-14 3:02 ` [PATCH v4 11/20] gpiolib: cdev: support GPIO_V2_LINE_SET_VALUES_IOCTL Kent Gibson
2020-08-16 14:57 ` Bartosz Golaszewski
2020-08-14 3:02 ` [PATCH v4 12/20] gpiolib: cdev: support setting debounce Kent Gibson
2020-08-17 18:21 ` Bartosz Golaszewski
2020-08-18 14:37 ` Kent Gibson
2020-08-14 3:02 ` [PATCH v4 13/20] gpio: uapi: document uAPI v1 as deprecated Kent Gibson
2020-08-14 3:02 ` [PATCH v4 14/20] tools: gpio: port lsgpio to v2 uAPI Kent Gibson
2020-08-14 3:02 ` [PATCH v4 15/20] tools: gpio: port gpio-watch " Kent Gibson
2020-08-14 3:02 ` [PATCH v4 16/20] tools: gpio: rename nlines to num_lines Kent Gibson
2020-08-14 3:02 ` [PATCH v4 17/20] tools: gpio: port gpio-hammer to v2 uAPI Kent Gibson
2020-08-14 3:02 ` Kent Gibson [this message]
2020-08-14 3:02 ` [PATCH v4 19/20] tools: gpio: add multi-line monitoring to gpio-event-mon Kent Gibson
2020-08-14 3:02 ` [PATCH v4 20/20] tools: gpio: add debounce support " Kent Gibson
2020-08-17 18:24 ` [PATCH v4 00/20] gpio: cdev: add uAPI v2 Bartosz Golaszewski
2020-08-17 18:40 ` Andy Shevchenko
2020-08-17 19:25 ` Bartosz Golaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200814030257.135463-19-warthog618@gmail.com \
--to=warthog618@gmail.com \
--cc=bgolaszewski@baylibre.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.