From: Zev Weiss <zweiss@equinix.com>
To: Joel Stanley <joel@jms.id.au>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
Andrew Jeffery <andrew@aj.id.au>,
"openbmc@lists.ozlabs.org" <openbmc@lists.ozlabs.org>
Subject: Re: [libgpiod PATCH 4/7] tools: gpioget: Add by-name support
Date: Thu, 3 Feb 2022 08:37:38 +0000 [thread overview]
Message-ID: <20220203083738.GO5754@packtop> (raw)
In-Reply-To: <20220203042134.68425-5-joel@jms.id.au>
On Wed, Feb 02, 2022 at 08:21:31PM PST, Joel Stanley wrote:
>Allow users to get the values of gpios by passing the gpio name. The
>gpipchip is not specified, instead it is discovered using the same
>method as gpiofind.
>
> $ gpioget --by-name switch-state
> 1
>
> $ gpioget --by-name led-fault led-identify led-attention
> 1 0 1
>
>Signed-off-by: Joel Stanley <joel@jms.id.au>
>---
> tools/gpioget.c | 57 +++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 41 insertions(+), 16 deletions(-)
>
>diff --git a/tools/gpioget.c b/tools/gpioget.c
>index 51cecb6a18a9..9d2c82b0d64b 100644
>--- a/tools/gpioget.c
>+++ b/tools/gpioget.c
>@@ -15,15 +15,18 @@ static const struct option longopts[] = {
> { "active-low", no_argument, NULL, 'l' },
> { "dir-as-is", no_argument, NULL, 'n' },
> { "bias", required_argument, NULL, 'B' },
>+ { "by-name", no_argument, NULL, 'N' },
> { GETOPT_NULL_LONGOPT },
> };
>
>-static const char *const shortopts = "+hvlnB:";
>+static const char *const shortopts = "+hvlnB:N";
>
> static void print_help(void)
> {
> printf("Usage: %s [OPTIONS] <chip name/number> <offset 1> <offset 2> ...\n",
> get_progname());
>+ printf(" %s [OPTIONS] -L <line name1> <line name2> ...\n",
I'm guessing this -L was supposed to be -N?
>+ get_progname());
> printf("\n");
> printf("Read line value(s) from a GPIO chip\n");
> printf("\n");
>@@ -34,6 +37,7 @@ static void print_help(void)
> printf(" -n, --dir-as-is:\tdon't force-reconfigure line direction\n");
> printf(" -B, --bias=[as-is|disable|pull-down|pull-up] (defaults to 'as-is'):\n");
> printf(" set the line bias\n");
>+ printf(" -N, --by-name:\tget line by name. All lines must be from the same gpiochip\n");
> printf("\n");
> print_bias_help();
> }
>@@ -46,7 +50,8 @@ int main(int argc, char **argv)
> unsigned int *offsets, i, num_lines;
> struct gpiod_line_bulk *lines;
> struct gpiod_chip *chip;
>- char *device, *end;
>+ bool by_name = false;
>+ char *end;
>
> for (;;) {
> optc = getopt_long(argc, argv, shortopts, longopts, &opti);
>@@ -69,6 +74,9 @@ int main(int argc, char **argv)
> case 'B':
> flags |= bias_flags(optarg);
> break;
>+ case 'N':
>+ by_name = true;
>+ break;
> case '?':
> die("try %s --help", get_progname());
> default:
>@@ -79,30 +87,47 @@ int main(int argc, char **argv)
> argc -= optind;
> argv += optind;
>
>- if (argc < 1)
>- die("gpiochip must be specified");
>+ if (by_name) {
>+ if (argc < 1)
>+ die("at least one line name must be specified");
>+
>+ /* line0 line1 ... lineN */
>+ num_lines = argc;
>
>- if (argc < 2)
>- die("at least one GPIO line offset must be specified");
>+ chip = chip_by_line_name(argv[0]);
>+ if (!chip)
>+ die("unable to find gpiochip");
The next patch has a slightly more informative corresponding error
message for gpioset; might be nice to make this match that.
>+ } else {
>+ /* gpiochip offset0 offset1 ... offsetN */
>+ if (argc < 1)
>+ die("gpiochip must be specified");
>
>- device = argv[0];
>- num_lines = argc - 1;
>+ if (argc < 2)
>+ die("at least one GPIO line offset must be specified");
>+
>+ chip = chip_open_lookup(argv[0]);
>+ if (!chip)
>+ die_perror("unable to open %s", argv[0]);
>+
>+ argv++;
>+ num_lines = argc - 1;
>+ }
>
> values = malloc(sizeof(*values) * num_lines);
> offsets = malloc(sizeof(*offsets) * num_lines);
> if (!values || !offsets)
> die("out of memory");
>
>- for (i = 0; i < num_lines; i++) {
>- offsets[i] = strtoul(argv[i + 1], &end, 10);
>- if (*end != '\0' || offsets[i] > INT_MAX)
>- die("invalid GPIO offset: %s", argv[i + 1]);
>+ if (by_name) {
>+ line_names_to_offsets(chip, argv, offsets, NULL, num_lines);
>+ } else {
>+ for (i = 0; i < num_lines; i++) {
>+ offsets[i] = strtoul(argv[i], &end, 10);
>+ if (*end != '\0' || offsets[i] > INT_MAX)
>+ die("invalid GPIO offset: %s", argv[i]);
>+ }
> }
>
>- chip = chip_open_lookup(device);
>- if (!chip)
>- die_perror("unable to open %s", device);
>-
> lines = gpiod_chip_get_lines(chip, offsets, num_lines);
> if (!lines)
> die_perror("unable to retrieve GPIO lines from chip");
>--
>2.34.1
>
WARNING: multiple messages have this Message-ID (diff)
From: Zev Weiss <zweiss@equinix.com>
To: Joel Stanley <joel@jms.id.au>
Cc: Andrew Jeffery <andrew@aj.id.au>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
Bartosz Golaszewski <brgl@bgdev.pl>,
"openbmc@lists.ozlabs.org" <openbmc@lists.ozlabs.org>
Subject: Re: [libgpiod PATCH 4/7] tools: gpioget: Add by-name support
Date: Thu, 3 Feb 2022 08:37:38 +0000 [thread overview]
Message-ID: <20220203083738.GO5754@packtop> (raw)
In-Reply-To: <20220203042134.68425-5-joel@jms.id.au>
On Wed, Feb 02, 2022 at 08:21:31PM PST, Joel Stanley wrote:
>Allow users to get the values of gpios by passing the gpio name. The
>gpipchip is not specified, instead it is discovered using the same
>method as gpiofind.
>
> $ gpioget --by-name switch-state
> 1
>
> $ gpioget --by-name led-fault led-identify led-attention
> 1 0 1
>
>Signed-off-by: Joel Stanley <joel@jms.id.au>
>---
> tools/gpioget.c | 57 +++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 41 insertions(+), 16 deletions(-)
>
>diff --git a/tools/gpioget.c b/tools/gpioget.c
>index 51cecb6a18a9..9d2c82b0d64b 100644
>--- a/tools/gpioget.c
>+++ b/tools/gpioget.c
>@@ -15,15 +15,18 @@ static const struct option longopts[] = {
> { "active-low", no_argument, NULL, 'l' },
> { "dir-as-is", no_argument, NULL, 'n' },
> { "bias", required_argument, NULL, 'B' },
>+ { "by-name", no_argument, NULL, 'N' },
> { GETOPT_NULL_LONGOPT },
> };
>
>-static const char *const shortopts = "+hvlnB:";
>+static const char *const shortopts = "+hvlnB:N";
>
> static void print_help(void)
> {
> printf("Usage: %s [OPTIONS] <chip name/number> <offset 1> <offset 2> ...\n",
> get_progname());
>+ printf(" %s [OPTIONS] -L <line name1> <line name2> ...\n",
I'm guessing this -L was supposed to be -N?
>+ get_progname());
> printf("\n");
> printf("Read line value(s) from a GPIO chip\n");
> printf("\n");
>@@ -34,6 +37,7 @@ static void print_help(void)
> printf(" -n, --dir-as-is:\tdon't force-reconfigure line direction\n");
> printf(" -B, --bias=[as-is|disable|pull-down|pull-up] (defaults to 'as-is'):\n");
> printf(" set the line bias\n");
>+ printf(" -N, --by-name:\tget line by name. All lines must be from the same gpiochip\n");
> printf("\n");
> print_bias_help();
> }
>@@ -46,7 +50,8 @@ int main(int argc, char **argv)
> unsigned int *offsets, i, num_lines;
> struct gpiod_line_bulk *lines;
> struct gpiod_chip *chip;
>- char *device, *end;
>+ bool by_name = false;
>+ char *end;
>
> for (;;) {
> optc = getopt_long(argc, argv, shortopts, longopts, &opti);
>@@ -69,6 +74,9 @@ int main(int argc, char **argv)
> case 'B':
> flags |= bias_flags(optarg);
> break;
>+ case 'N':
>+ by_name = true;
>+ break;
> case '?':
> die("try %s --help", get_progname());
> default:
>@@ -79,30 +87,47 @@ int main(int argc, char **argv)
> argc -= optind;
> argv += optind;
>
>- if (argc < 1)
>- die("gpiochip must be specified");
>+ if (by_name) {
>+ if (argc < 1)
>+ die("at least one line name must be specified");
>+
>+ /* line0 line1 ... lineN */
>+ num_lines = argc;
>
>- if (argc < 2)
>- die("at least one GPIO line offset must be specified");
>+ chip = chip_by_line_name(argv[0]);
>+ if (!chip)
>+ die("unable to find gpiochip");
The next patch has a slightly more informative corresponding error
message for gpioset; might be nice to make this match that.
>+ } else {
>+ /* gpiochip offset0 offset1 ... offsetN */
>+ if (argc < 1)
>+ die("gpiochip must be specified");
>
>- device = argv[0];
>- num_lines = argc - 1;
>+ if (argc < 2)
>+ die("at least one GPIO line offset must be specified");
>+
>+ chip = chip_open_lookup(argv[0]);
>+ if (!chip)
>+ die_perror("unable to open %s", argv[0]);
>+
>+ argv++;
>+ num_lines = argc - 1;
>+ }
>
> values = malloc(sizeof(*values) * num_lines);
> offsets = malloc(sizeof(*offsets) * num_lines);
> if (!values || !offsets)
> die("out of memory");
>
>- for (i = 0; i < num_lines; i++) {
>- offsets[i] = strtoul(argv[i + 1], &end, 10);
>- if (*end != '\0' || offsets[i] > INT_MAX)
>- die("invalid GPIO offset: %s", argv[i + 1]);
>+ if (by_name) {
>+ line_names_to_offsets(chip, argv, offsets, NULL, num_lines);
>+ } else {
>+ for (i = 0; i < num_lines; i++) {
>+ offsets[i] = strtoul(argv[i], &end, 10);
>+ if (*end != '\0' || offsets[i] > INT_MAX)
>+ die("invalid GPIO offset: %s", argv[i]);
>+ }
> }
>
>- chip = chip_open_lookup(device);
>- if (!chip)
>- die_perror("unable to open %s", device);
>-
> lines = gpiod_chip_get_lines(chip, offsets, num_lines);
> if (!lines)
> die_perror("unable to retrieve GPIO lines from chip");
>--
>2.34.1
>
next prev parent reply other threads:[~2022-02-03 8:37 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-03 4:21 [libgpiod PATCH 0/7] tools: Add by-name support Joel Stanley
2022-02-03 4:21 ` Joel Stanley
2022-02-03 4:21 ` [libgpiod PATCH 1/7] tools: Clean up scandir memory allocations Joel Stanley
2022-02-03 4:21 ` Joel Stanley
2022-02-08 11:21 ` Bartosz Golaszewski
2022-02-08 11:21 ` Bartosz Golaszewski
2022-02-03 4:21 ` [libgpiod PATCH 2/7] tools: Add line name to offset lookup helper Joel Stanley
2022-02-03 4:21 ` Joel Stanley
2022-02-03 4:21 ` [libgpiod PATCH 3/7] tools: Add value support to line name lookup Joel Stanley
2022-02-03 4:21 ` Joel Stanley
2022-02-03 8:37 ` Zev Weiss
2022-02-03 8:37 ` Zev Weiss
2022-02-03 4:21 ` [libgpiod PATCH 4/7] tools: gpioget: Add by-name support Joel Stanley
2022-02-03 4:21 ` Joel Stanley
2022-02-03 8:37 ` Zev Weiss [this message]
2022-02-03 8:37 ` Zev Weiss
2022-02-03 4:21 ` [libgpiod PATCH 5/7] tools: gpioset: " Joel Stanley
2022-02-03 4:21 ` Joel Stanley
2022-02-03 8:37 ` Zev Weiss
2022-02-03 8:37 ` Zev Weiss
2022-02-03 4:21 ` [libgpiod PATCH 6/7] gpio-tools-test: Add gpioset --by-name tests Joel Stanley
2022-02-03 4:21 ` Joel Stanley
2022-02-03 4:21 ` [libgpiod PATCH 7/7] gpio-tools-test: Add gpioget " Joel Stanley
2022-02-03 4:21 ` Joel Stanley
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=20220203083738.GO5754@packtop \
--to=zweiss@equinix.com \
--cc=andrew@aj.id.au \
--cc=brgl@bgdev.pl \
--cc=joel@jms.id.au \
--cc=linux-gpio@vger.kernel.org \
--cc=openbmc@lists.ozlabs.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.