linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [libgpiod][PATCH 0/2] fix potential glitches in bindings example gpiosets
@ 2023-06-09 15:36 Kent Gibson
  2023-06-09 15:36 ` [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py Kent Gibson
  2023-06-09 15:36 ` [libgpiod][PATCH 2/2] bindings: cxx: examples: fix potential glitch in gpiosetcxx Kent Gibson
  0 siblings, 2 replies; 11+ messages in thread
From: Kent Gibson @ 2023-06-09 15:36 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

A couple of minor fixes to the bindings examples.
Noticed the python one in passing, and fixed that, then checked the
other bindings to see if they had the same problem.

The rust example is ok, but the cxx example has the same issue, so
fixed that as well.

The checkin comments are virtually identical, as they fix the same thing
for each of the bindings, but the alternative of combining them in one
patch seemed weird.

Cheers,
Kent.

Kent Gibson (2):
  bindings: python: examples: fix potential glitch in gpioset.py
  bindings: cxx: examples: fix potential glitch in gpiosetcxx

 bindings/cxx/examples/gpiosetcxx.cpp | 25 ++++++++++---------------
 bindings/python/examples/gpioset.py  | 10 +++++-----
 2 files changed, 15 insertions(+), 20 deletions(-)

-- 
2.40.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py
  2023-06-09 15:36 [libgpiod][PATCH 0/2] fix potential glitches in bindings example gpiosets Kent Gibson
@ 2023-06-09 15:36 ` Kent Gibson
  2023-06-09 20:18   ` andy.shevchenko
  2023-06-12 14:27   ` Bartosz Golaszewski
  2023-06-09 15:36 ` [libgpiod][PATCH 2/2] bindings: cxx: examples: fix potential glitch in gpiosetcxx Kent Gibson
  1 sibling, 2 replies; 11+ messages in thread
From: Kent Gibson @ 2023-06-09 15:36 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

gpioset.py requests lines without setting their output value, and so
sets them all inactive, and subsequently sets them to their requested
value.  This can result in glitches on lines which were active and
are set active.

As this is example code, it is also important to demonstrate that the
output value can be set by the request itself.

Request the lines with the correct output values set in the request
itself.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 bindings/python/examples/gpioset.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/bindings/python/examples/gpioset.py b/bindings/python/examples/gpioset.py
index 372a9a8..b36b376 100755
--- a/bindings/python/examples/gpioset.py
+++ b/bindings/python/examples/gpioset.py
@@ -21,16 +21,16 @@ if __name__ == "__main__":
         x, y = arg.split("=")
         return (x, Value(int(y)))
 
+    def settings(v):
+        return gpiod.LineSettings(direction=Direction.OUTPUT, output_value=v)
+
     lvs = [parse_value(arg) for arg in sys.argv[2:]]
-    lines = [x[0] for x in lvs]
-    values = dict(lvs)
+    config = dict([(l, settings(v)) for (l, v) in lvs])
 
     request = gpiod.request_lines(
         path,
         consumer="gpioset.py",
-        config={tuple(lines): gpiod.LineSettings(direction=Direction.OUTPUT)},
+        config=config,
     )
 
-    vals = request.set_values(values)
-
     input()
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [libgpiod][PATCH 2/2] bindings: cxx: examples: fix potential glitch in gpiosetcxx
  2023-06-09 15:36 [libgpiod][PATCH 0/2] fix potential glitches in bindings example gpiosets Kent Gibson
  2023-06-09 15:36 ` [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py Kent Gibson
@ 2023-06-09 15:36 ` Kent Gibson
  2023-06-09 20:19   ` andy.shevchenko
  1 sibling, 1 reply; 11+ messages in thread
From: Kent Gibson @ 2023-06-09 15:36 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

gpiosetcxx requests lines without setting their output value, and so
sets them all inactive, and subsequently sets them to their requested
value.  This can result in glitches on lines which were active and
are set active.

As this is example code, it is also important to demonstrate that the
output value can be set by the request itself.

Request the lines with the correct output values set in the request
itself.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 bindings/cxx/examples/gpiosetcxx.cpp | 25 ++++++++++---------------
 1 file changed, 10 insertions(+), 15 deletions(-)

diff --git a/bindings/cxx/examples/gpiosetcxx.cpp b/bindings/cxx/examples/gpiosetcxx.cpp
index dde5379..ae35038 100644
--- a/bindings/cxx/examples/gpiosetcxx.cpp
+++ b/bindings/cxx/examples/gpiosetcxx.cpp
@@ -16,8 +16,8 @@ int main(int argc, char **argv)
 		return EXIT_FAILURE;
 	}
 
-	::gpiod::line::offsets offsets;
-	::gpiod::line::values values;
+	auto builder = ::gpiod::chip(argv[1]).prepare_request();
+	builder.set_consumer("gpiosetcxx");
 
 	for (int i = 2; i < argc; i++) {
 		::std::string arg(argv[i]);
@@ -31,22 +31,17 @@ int main(int argc, char **argv)
 			throw ::std::invalid_argument("invalid offset=value mapping: " +
 						      ::std::string(argv[i]));
 
-		offsets.push_back(::std::stoul(offset));
-		values.push_back(::std::stoul(value) ? ::gpiod::line::value::ACTIVE :
-						       ::gpiod::line::value::INACTIVE);
-	}
-
-	auto request = ::gpiod::chip(argv[1])
-		.prepare_request()
-		.set_consumer("gpiosetcxx")
-		.add_line_settings(
-			offsets,
+		::gpiod::line::value v = ::std::stoul(value) ?
+						 ::gpiod::line::value::ACTIVE :
+						 ::gpiod::line::value::INACTIVE;
+		builder.add_line_settings(
+			::std::stoul(offset),
 			::gpiod::line_settings()
 				.set_direction(::gpiod::line::direction::OUTPUT)
-		)
-		.do_request();
+				.set_output_value(v));
+	}
 
-	request.set_values(values);
+	auto request = builder.do_request();
 
 	::std::cin.get();
 
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py
  2023-06-09 15:36 ` [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py Kent Gibson
@ 2023-06-09 20:18   ` andy.shevchenko
  2023-06-12 14:26     ` Bartosz Golaszewski
  2023-06-12 14:27   ` Bartosz Golaszewski
  1 sibling, 1 reply; 11+ messages in thread
From: andy.shevchenko @ 2023-06-09 20:18 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio, brgl

Fri, Jun 09, 2023 at 11:36:06PM +0800, Kent Gibson kirjoitti:
> gpioset.py requests lines without setting their output value, and so
> sets them all inactive, and subsequently sets them to their requested
> value.  This can result in glitches on lines which were active and
> are set active.
> 
> As this is example code, it is also important to demonstrate that the
> output value can be set by the request itself.
> 
> Request the lines with the correct output values set in the request
> itself.

Do we need a comment in the code to specify this?

...

> +    config = dict([(l, settings(v)) for (l, v) in lvs])

Aren't [] not needed?

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [libgpiod][PATCH 2/2] bindings: cxx: examples: fix potential glitch in gpiosetcxx
  2023-06-09 15:36 ` [libgpiod][PATCH 2/2] bindings: cxx: examples: fix potential glitch in gpiosetcxx Kent Gibson
@ 2023-06-09 20:19   ` andy.shevchenko
  0 siblings, 0 replies; 11+ messages in thread
From: andy.shevchenko @ 2023-06-09 20:19 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio, brgl

Fri, Jun 09, 2023 at 11:36:07PM +0800, Kent Gibson kirjoitti:
> gpiosetcxx requests lines without setting their output value, and so
> sets them all inactive, and subsequently sets them to their requested
> value.  This can result in glitches on lines which were active and
> are set active.
> 
> As this is example code, it is also important to demonstrate that the
> output value can be set by the request itself.
> 
> Request the lines with the correct output values set in the request
> itself.

Same question about commenting in the code.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py
  2023-06-09 20:18   ` andy.shevchenko
@ 2023-06-12 14:26     ` Bartosz Golaszewski
  2023-06-12 14:44       ` Andy Shevchenko
  2023-06-12 14:53       ` Kent Gibson
  0 siblings, 2 replies; 11+ messages in thread
From: Bartosz Golaszewski @ 2023-06-12 14:26 UTC (permalink / raw)
  To: andy.shevchenko; +Cc: Kent Gibson, linux-gpio

On Fri, Jun 9, 2023 at 10:19 PM <andy.shevchenko@gmail.com> wrote:
>
> Fri, Jun 09, 2023 at 11:36:06PM +0800, Kent Gibson kirjoitti:
> > gpioset.py requests lines without setting their output value, and so
> > sets them all inactive, and subsequently sets them to their requested
> > value.  This can result in glitches on lines which were active and
> > are set active.
> >
> > As this is example code, it is also important to demonstrate that the
> > output value can be set by the request itself.
> >
> > Request the lines with the correct output values set in the request
> > itself.
>
> Do we need a comment in the code to specify this?
>
> ...
>
> > +    config = dict([(l, settings(v)) for (l, v) in lvs])
>
> Aren't [] not needed?
>

This is a list comprehension used to create the dictionary. Think:

>>> config = dict([(1, 2), (3, 4)])
>>> config
{1: 2, 3: 4}

Bart

> --
> With Best Regards,
> Andy Shevchenko
>
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py
  2023-06-09 15:36 ` [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py Kent Gibson
  2023-06-09 20:18   ` andy.shevchenko
@ 2023-06-12 14:27   ` Bartosz Golaszewski
  1 sibling, 0 replies; 11+ messages in thread
From: Bartosz Golaszewski @ 2023-06-12 14:27 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio

On Fri, Jun 9, 2023 at 5:36 PM Kent Gibson <warthog618@gmail.com> wrote:
>
> gpioset.py requests lines without setting their output value, and so
> sets them all inactive, and subsequently sets them to their requested
> value.  This can result in glitches on lines which were active and
> are set active.
>
> As this is example code, it is also important to demonstrate that the
> output value can be set by the request itself.
>
> Request the lines with the correct output values set in the request
> itself.
>
> Signed-off-by: Kent Gibson <warthog618@gmail.com>
> ---
>  bindings/python/examples/gpioset.py | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/bindings/python/examples/gpioset.py b/bindings/python/examples/gpioset.py
> index 372a9a8..b36b376 100755
> --- a/bindings/python/examples/gpioset.py
> +++ b/bindings/python/examples/gpioset.py
> @@ -21,16 +21,16 @@ if __name__ == "__main__":
>          x, y = arg.split("=")
>          return (x, Value(int(y)))
>
> +    def settings(v):

I renamed this to make_settings() when applying. Thanks.

Bart

> +        return gpiod.LineSettings(direction=Direction.OUTPUT, output_value=v)
> +
>      lvs = [parse_value(arg) for arg in sys.argv[2:]]
> -    lines = [x[0] for x in lvs]
> -    values = dict(lvs)
> +    config = dict([(l, settings(v)) for (l, v) in lvs])
>
>      request = gpiod.request_lines(
>          path,
>          consumer="gpioset.py",
> -        config={tuple(lines): gpiod.LineSettings(direction=Direction.OUTPUT)},
> +        config=config,
>      )
>
> -    vals = request.set_values(values)
> -
>      input()
> --
> 2.40.1
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py
  2023-06-12 14:26     ` Bartosz Golaszewski
@ 2023-06-12 14:44       ` Andy Shevchenko
  2023-06-12 14:53       ` Kent Gibson
  1 sibling, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2023-06-12 14:44 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: Kent Gibson, linux-gpio

On Mon, Jun 12, 2023 at 5:26 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> On Fri, Jun 9, 2023 at 10:19 PM <andy.shevchenko@gmail.com> wrote:
> > Fri, Jun 09, 2023 at 11:36:06PM +0800, Kent Gibson kirjoitti:

...

> > > +    config = dict([(l, settings(v)) for (l, v) in lvs])
> >
> > Aren't [] not needed?
>
> This is a list comprehension used to create the dictionary. Think:
>
> >>> config = dict([(1, 2), (3, 4)])
> >>> config
> {1: 2, 3: 4}

Think about it in dynamic:

In [1]: x= [(1,2),(2,4)]
In [2]: dict((a,b)for a,b in x)
Out[2]: {1: 2, 2: 4}

[] are redundant, so I remembered that correctly :-)


-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py
  2023-06-12 14:26     ` Bartosz Golaszewski
  2023-06-12 14:44       ` Andy Shevchenko
@ 2023-06-12 14:53       ` Kent Gibson
  2023-06-12 14:58         ` Bartosz Golaszewski
  1 sibling, 1 reply; 11+ messages in thread
From: Kent Gibson @ 2023-06-12 14:53 UTC (permalink / raw)
  To: andy.shevchenko, Bartosz Golaszewski; +Cc: linux-gpio

On Mon, Jun 12, 2023 at 04:26:46PM +0200, Bartosz Golaszewski wrote:
> On Fri, Jun 9, 2023 at 10:19 PM <andy.shevchenko@gmail.com> wrote:
> >
> > Fri, Jun 09, 2023 at 11:36:06PM +0800, Kent Gibson kirjoitti:
> > > gpioset.py requests lines without setting their output value, and so
> > > sets them all inactive, and subsequently sets them to their requested
> > > value.  This can result in glitches on lines which were active and
> > > are set active.
> > >
> > > As this is example code, it is also important to demonstrate that the
> > > output value can be set by the request itself.
> > >
> > > Request the lines with the correct output values set in the request
> > > itself.
> >
> > Do we need a comment in the code to specify this?
> >

Andy, I'm not ignoring you - I'm still not getting mail from you, and I
hadn't looked on the list for replies.  Weird.

In answer to your point - yes and no.  The code is not doing anything
unusual, so no.  OTOH it does serve as example code, so a bit of
commentary wouldn't hurt.

> > ...
> >
> > > +    config = dict([(l, settings(v)) for (l, v) in lvs])
> >
> > Aren't [] not needed?
> >

Ok, but now I did get this one:

> Think about it in dynamic:

> In [1]: x= [(1,2),(2,4)]
> In [2]: dict((a,b)for a,b in x)
> Out[2]: {1: 2, 2: 4}

> [] are redundant, so I remembered that correctly 😄

Terrible example - which 2 is which?
1,2,3,4 would've been better.

True - dict() accepts an iterable, so the [] are redundant in thise case.

Cheers,
Kent.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [libgpiod][PATCH 2/2] bindings: cxx: examples: fix potential glitch in gpiosetcxx
  2023-06-12 14:56 [libgpiod][PATCH 0/2] bindings: cxx: " Bartosz Golaszewski
@ 2023-06-12 14:56 ` Bartosz Golaszewski
  0 siblings, 0 replies; 11+ messages in thread
From: Bartosz Golaszewski @ 2023-06-12 14:56 UTC (permalink / raw)
  To: Kent Gibson, Linus Walleij, Andy Shevchenko, Viresh Kumar
  Cc: linux-gpio, Bartosz Golaszewski

From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

gpiosetcxx requests lines without setting their output value, and so
sets them all inactive, and subsequently sets them to their requested
value. This can result in glitches on lines which were active and
are set active.

As this is example code, it is also important to demonstrate that the
output value can be set by the request itself.

Request the lines with the correct output values set in the request
itself.

Suggested-by: Kent Gibson <warthog618@gmail.com>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
 bindings/cxx/examples/gpiosetcxx.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/bindings/cxx/examples/gpiosetcxx.cpp b/bindings/cxx/examples/gpiosetcxx.cpp
index dde5379..f46cb85 100644
--- a/bindings/cxx/examples/gpiosetcxx.cpp
+++ b/bindings/cxx/examples/gpiosetcxx.cpp
@@ -44,10 +44,9 @@ int main(int argc, char **argv)
 			::gpiod::line_settings()
 				.set_direction(::gpiod::line::direction::OUTPUT)
 		)
+		.set_output_values(values)
 		.do_request();
 
-	request.set_values(values);
-
 	::std::cin.get();
 
 	return EXIT_SUCCESS;
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py
  2023-06-12 14:53       ` Kent Gibson
@ 2023-06-12 14:58         ` Bartosz Golaszewski
  0 siblings, 0 replies; 11+ messages in thread
From: Bartosz Golaszewski @ 2023-06-12 14:58 UTC (permalink / raw)
  To: Kent Gibson; +Cc: andy.shevchenko, linux-gpio

On Mon, Jun 12, 2023 at 4:54 PM Kent Gibson <warthog618@gmail.com> wrote:
>
> On Mon, Jun 12, 2023 at 04:26:46PM +0200, Bartosz Golaszewski wrote:
> > On Fri, Jun 9, 2023 at 10:19 PM <andy.shevchenko@gmail.com> wrote:
> > >
> > > Fri, Jun 09, 2023 at 11:36:06PM +0800, Kent Gibson kirjoitti:
> > > > gpioset.py requests lines without setting their output value, and so
> > > > sets them all inactive, and subsequently sets them to their requested
> > > > value.  This can result in glitches on lines which were active and
> > > > are set active.
> > > >
> > > > As this is example code, it is also important to demonstrate that the
> > > > output value can be set by the request itself.
> > > >
> > > > Request the lines with the correct output values set in the request
> > > > itself.
> > >
> > > Do we need a comment in the code to specify this?
> > >
>
> Andy, I'm not ignoring you - I'm still not getting mail from you, and I
> hadn't looked on the list for replies.  Weird.
>
> In answer to your point - yes and no.  The code is not doing anything
> unusual, so no.  OTOH it does serve as example code, so a bit of
> commentary wouldn't hurt.
>
> > > ...
> > >
> > > > +    config = dict([(l, settings(v)) for (l, v) in lvs])
> > >
> > > Aren't [] not needed?
> > >
>
> Ok, but now I did get this one:
>
> > Think about it in dynamic:
>
> > In [1]: x= [(1,2),(2,4)]
> > In [2]: dict((a,b)for a,b in x)
> > Out[2]: {1: 2, 2: 4}
>
> > [] are redundant, so I remembered that correctly 😄
>
> Terrible example - which 2 is which?
> 1,2,3,4 would've been better.
>
> True - dict() accepts an iterable, so the [] are redundant in thise case.
>
> Cheers,
> Kent.

Ok, I will add a follow-up commit.

Bart

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-06-12 14:58 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-09 15:36 [libgpiod][PATCH 0/2] fix potential glitches in bindings example gpiosets Kent Gibson
2023-06-09 15:36 ` [libgpiod][PATCH 1/2] bindings: python: examples: fix potential glitch in gpioset.py Kent Gibson
2023-06-09 20:18   ` andy.shevchenko
2023-06-12 14:26     ` Bartosz Golaszewski
2023-06-12 14:44       ` Andy Shevchenko
2023-06-12 14:53       ` Kent Gibson
2023-06-12 14:58         ` Bartosz Golaszewski
2023-06-12 14:27   ` Bartosz Golaszewski
2023-06-09 15:36 ` [libgpiod][PATCH 2/2] bindings: cxx: examples: fix potential glitch in gpiosetcxx Kent Gibson
2023-06-09 20:19   ` andy.shevchenko
  -- strict thread matches above, loose matches on Subject: below --
2023-06-12 14:56 [libgpiod][PATCH 0/2] bindings: cxx: " Bartosz Golaszewski
2023-06-12 14:56 ` [libgpiod][PATCH 2/2] bindings: cxx: examples: " Bartosz Golaszewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).