* [libgpiod][PATCH 0/4] python examples and comment corrections
@ 2023-06-24 5:20 Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples Kent Gibson
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Kent Gibson @ 2023-06-24 5:20 UTC (permalink / raw)
To: linux-gpio, brgl; +Cc: Kent Gibson
The first patch is the updated 6/8 patch from my recent series.
The updates are as per the review comments, except for renaming gpio_chips()
to generate_gpio_chips(), rather than get_gpio_chips(), to indicate the paths
are being generated not returned as a list.
Changes:
- rename gpio_chips()
- shorten reconfigure_input_to_output file comment
- use format style prints
The other patches are updates to the file comments to make them consistent
with the updated python and to fix some cut-and-paste errors I noticed
along the way.
Cheers,
Kent.
Kent Gibson (4):
bindings: python: examples: replace tools examples with use case
examples
core: examples: fix file comments
cxx: examples: file comment consistency
rust: examples: file comment consistency
.../examples/reconfigure_input_to_output.cpp | 4 +-
bindings/python/examples/Makefile.am | 18 +++----
bindings/python/examples/find_line_by_name.py | 37 +++++++++++++++
bindings/python/examples/get_chip_info.py | 20 ++++++++
bindings/python/examples/get_line_info.py | 29 ++++++++++++
.../examples/get_multiple_line_values.py | 29 ++++++++++++
bindings/python/examples/gpiodetect.py | 15 ------
bindings/python/examples/gpiofind.py | 20 --------
bindings/python/examples/gpioget.py | 29 ------------
bindings/python/examples/gpioinfo.py | 28 -----------
bindings/python/examples/gpiomon.py | 26 ----------
bindings/python/examples/gpionotify.py | 21 ---------
bindings/python/examples/gpioset.py | 36 --------------
bindings/python/examples/helpers.py | 15 ------
.../examples/reconfigure_input_to_output.py | 39 +++++++++++++++
.../examples/toggle_multiple_line_values.py | 47 +++++++++++++++++++
bindings/python/examples/watch_line_info.py | 23 +++++++++
bindings/python/examples/watch_line_rising.py | 31 ++++++++++++
.../examples/watch_multiple_line_values.py | 42 +++++++++++++++++
.../examples/reconfigure_input_to_output.rs | 2 +-
examples/async_watch_line_value.c | 2 +-
examples/get_multiple_line_values.c | 2 +-
examples/reconfigure_input_to_output.c | 5 +-
examples/watch_multiple_line_values.c | 2 +-
24 files changed, 317 insertions(+), 205 deletions(-)
create mode 100755 bindings/python/examples/find_line_by_name.py
create mode 100755 bindings/python/examples/get_chip_info.py
create mode 100755 bindings/python/examples/get_line_info.py
create mode 100755 bindings/python/examples/get_multiple_line_values.py
delete mode 100755 bindings/python/examples/gpiodetect.py
delete mode 100755 bindings/python/examples/gpiofind.py
delete mode 100755 bindings/python/examples/gpioget.py
delete mode 100755 bindings/python/examples/gpioinfo.py
delete mode 100755 bindings/python/examples/gpiomon.py
delete mode 100755 bindings/python/examples/gpionotify.py
delete mode 100755 bindings/python/examples/gpioset.py
delete mode 100644 bindings/python/examples/helpers.py
create mode 100755 bindings/python/examples/reconfigure_input_to_output.py
create mode 100755 bindings/python/examples/toggle_multiple_line_values.py
create mode 100755 bindings/python/examples/watch_line_info.py
create mode 100755 bindings/python/examples/watch_line_rising.py
create mode 100755 bindings/python/examples/watch_multiple_line_values.py
--
2.41.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples
2023-06-24 5:20 [libgpiod][PATCH 0/4] python examples and comment corrections Kent Gibson
@ 2023-06-24 5:20 ` Kent Gibson
2023-06-26 8:02 ` Bartosz Golaszewski
2023-06-24 5:20 ` [libgpiod][PATCH 2/4] core: examples: fix file comments Kent Gibson
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Kent Gibson @ 2023-06-24 5:20 UTC (permalink / raw)
To: linux-gpio, brgl; +Cc: Kent Gibson
Replace tool examples with use case examples drawn from the tools.
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
bindings/python/examples/Makefile.am | 18 +++----
bindings/python/examples/find_line_by_name.py | 37 +++++++++++++++
bindings/python/examples/get_chip_info.py | 20 ++++++++
bindings/python/examples/get_line_info.py | 29 ++++++++++++
.../examples/get_multiple_line_values.py | 29 ++++++++++++
bindings/python/examples/gpiodetect.py | 15 ------
bindings/python/examples/gpiofind.py | 20 --------
bindings/python/examples/gpioget.py | 29 ------------
bindings/python/examples/gpioinfo.py | 28 -----------
bindings/python/examples/gpiomon.py | 26 ----------
bindings/python/examples/gpionotify.py | 21 ---------
bindings/python/examples/gpioset.py | 36 --------------
bindings/python/examples/helpers.py | 15 ------
.../examples/reconfigure_input_to_output.py | 39 +++++++++++++++
.../examples/toggle_multiple_line_values.py | 47 +++++++++++++++++++
bindings/python/examples/watch_line_info.py | 23 +++++++++
bindings/python/examples/watch_line_rising.py | 31 ++++++++++++
.../examples/watch_multiple_line_values.py | 42 +++++++++++++++++
18 files changed, 307 insertions(+), 198 deletions(-)
create mode 100755 bindings/python/examples/find_line_by_name.py
create mode 100755 bindings/python/examples/get_chip_info.py
create mode 100755 bindings/python/examples/get_line_info.py
create mode 100755 bindings/python/examples/get_multiple_line_values.py
delete mode 100755 bindings/python/examples/gpiodetect.py
delete mode 100755 bindings/python/examples/gpiofind.py
delete mode 100755 bindings/python/examples/gpioget.py
delete mode 100755 bindings/python/examples/gpioinfo.py
delete mode 100755 bindings/python/examples/gpiomon.py
delete mode 100755 bindings/python/examples/gpionotify.py
delete mode 100755 bindings/python/examples/gpioset.py
delete mode 100644 bindings/python/examples/helpers.py
create mode 100755 bindings/python/examples/reconfigure_input_to_output.py
create mode 100755 bindings/python/examples/toggle_multiple_line_values.py
create mode 100755 bindings/python/examples/watch_line_info.py
create mode 100755 bindings/python/examples/watch_line_rising.py
create mode 100755 bindings/python/examples/watch_multiple_line_values.py
diff --git a/bindings/python/examples/Makefile.am b/bindings/python/examples/Makefile.am
index c8c1c98..52abafc 100644
--- a/bindings/python/examples/Makefile.am
+++ b/bindings/python/examples/Makefile.am
@@ -3,13 +3,15 @@
EXTRA_DIST = \
async_watch_line_value.py \
+ find_line_by_name.py \
+ get_chip_info.py \
+ get_line_info.py \
get_line_value.py \
- gpiodetect.py \
- gpiofind.py \
- gpioget.py \
- gpioinfo.py \
- gpiomon.py \
- gpionotify.py \
- gpioset.py \
+ get_multiple_line_values.py \
+ reconfigure_input_to_output.py \
toggle_line_value.py \
- watch_line_value.py
+ toggle_multiple_line_values.py \
+ watch_line_requests.py \
+ watch_line_value.py \
+ watch_line_rising.py \
+ watch_multiple_line_values.py
diff --git a/bindings/python/examples/find_line_by_name.py b/bindings/python/examples/find_line_by_name.py
new file mode 100755
index 0000000..ac798a9
--- /dev/null
+++ b/bindings/python/examples/find_line_by_name.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of finding a line with the given name."""
+
+import gpiod
+import os
+
+
+def generate_gpio_chips():
+ for entry in os.scandir("/dev/"):
+ if gpiod.is_gpiochip_device(entry.path):
+ yield entry.path
+
+
+def find_line_by_name(line_name):
+ # Names are not guaranteed unique, so this finds the first line with
+ # the given name.
+ for path in generate_gpio_chips():
+ with gpiod.Chip(path) as chip:
+ try:
+ offset = chip.line_offset_from_id(line_name)
+ print("{}: {} {}".format(line_name, chip.get_info().name, offset))
+ return
+ except OSError:
+ # An OSError is raised if the name is not found.
+ continue
+
+ print("line '{}' not found".format(line_name))
+
+
+if __name__ == "__main__":
+ try:
+ find_line_by_name("GPIO19")
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/get_chip_info.py b/bindings/python/examples/get_chip_info.py
new file mode 100755
index 0000000..7dc76fb
--- /dev/null
+++ b/bindings/python/examples/get_chip_info.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of reading the info for a chip."""
+
+import gpiod
+
+
+def get_chip_info(chip_path):
+ with gpiod.Chip(chip_path) as chip:
+ info = chip.get_info()
+ print("{} [{}] ({} lines)".format(info.name, info.label, info.num_lines))
+
+
+if __name__ == "__main__":
+ try:
+ get_chip_info("/dev/gpiochip0")
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/get_line_info.py b/bindings/python/examples/get_line_info.py
new file mode 100755
index 0000000..cd4ebcc
--- /dev/null
+++ b/bindings/python/examples/get_line_info.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of reading the info for a line."""
+
+import gpiod
+
+
+def get_line_info(chip_path, line_offset):
+ with gpiod.Chip(chip_path) as chip:
+ info = chip.get_line_info(line_offset)
+ is_input = info.direction == gpiod.line.Direction.INPUT
+ print(
+ "line {:>3}: {:>12} {:>12} {:>8} {:>10}".format(
+ info.offset,
+ info.name or "unnamed",
+ info.consumer or "unused",
+ "input" if is_input else "output",
+ "active-low" if info.active_low else "active-high",
+ )
+ )
+
+
+if __name__ == "__main__":
+ try:
+ get_line_info("/dev/gpiochip0", 3)
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/get_multiple_line_values.py b/bindings/python/examples/get_multiple_line_values.py
new file mode 100755
index 0000000..46cf0b2
--- /dev/null
+++ b/bindings/python/examples/get_multiple_line_values.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of reading multiple lines."""
+
+import gpiod
+
+from gpiod.line import Direction
+
+
+def get_multiple_line_values(chip_path, line_offsets):
+ with gpiod.request_lines(
+ chip_path,
+ consumer="get-multiple-line-values",
+ config={tuple(line_offsets): gpiod.LineSettings(direction=Direction.INPUT)},
+ ) as request:
+ vals = request.get_values()
+
+ for offset, val in zip(line_offsets, vals):
+ print("{}={} ".format(offset, val), end="")
+ print()
+
+
+if __name__ == "__main__":
+ try:
+ get_multiple_line_values("/dev/gpiochip0", [5, 3, 7])
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/gpiodetect.py b/bindings/python/examples/gpiodetect.py
deleted file mode 100755
index dc98b03..0000000
--- a/bindings/python/examples/gpiodetect.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: GPL-2.0-or-later
-# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
-
-"""Reimplementation of the gpiodetect tool in Python."""
-
-import gpiod
-import os
-
-from helpers import gpio_chips
-
-if __name__ == "__main__":
- for chip in gpio_chips():
- info = chip.get_info()
- print("{} [{}] ({} lines)".format(info.name, info.label, info.num_lines))
diff --git a/bindings/python/examples/gpiofind.py b/bindings/python/examples/gpiofind.py
deleted file mode 100755
index d41660d..0000000
--- a/bindings/python/examples/gpiofind.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: GPL-2.0-or-later
-# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
-
-"""Reimplementation of the gpiofind tool in Python."""
-
-import gpiod
-import os
-import sys
-
-if __name__ == "__main__":
- for entry in os.scandir("/dev/"):
- if gpiod.is_gpiochip_device(entry.path):
- with gpiod.Chip(entry.path) as chip:
- offset = chip.line_offset_from_id(sys.argv[1])
- if offset is not None:
- print("{} {}".format(chip.get_info().name, offset))
- sys.exit(0)
-
- sys.exit(1)
diff --git a/bindings/python/examples/gpioget.py b/bindings/python/examples/gpioget.py
deleted file mode 100755
index bf7e0a6..0000000
--- a/bindings/python/examples/gpioget.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: GPL-2.0-or-later
-# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
-
-"""Simplified reimplementation of the gpioget tool in Python."""
-
-import gpiod
-import sys
-
-from gpiod.line import Direction
-
-if __name__ == "__main__":
- if len(sys.argv) < 3:
- raise TypeError("usage: gpioget.py <gpiochip> <offset1> <offset2> ...")
-
- path = sys.argv[1]
- lines = [int(line) if line.isdigit() else line for line in sys.argv[2:]]
-
- request = gpiod.request_lines(
- path,
- consumer="gpioget.py",
- config={tuple(lines): gpiod.LineSettings(direction=Direction.INPUT)},
- )
-
- vals = request.get_values()
-
- for val in vals:
- print("{} ".format(val.value), end="")
- print()
diff --git a/bindings/python/examples/gpioinfo.py b/bindings/python/examples/gpioinfo.py
deleted file mode 100755
index 3996dcf..0000000
--- a/bindings/python/examples/gpioinfo.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: GPL-2.0-or-later
-# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
-
-"""Simplified reimplementation of the gpioinfo tool in Python."""
-
-import gpiod
-import os
-
-from helpers import gpio_chips
-
-if __name__ == "__main__":
- for chip in gpio_chips():
- cinfo = chip.get_info()
- print("{} - {} lines:".format(cinfo.name, cinfo.num_lines))
-
- for offset in range(0, cinfo.num_lines):
- linfo = chip.get_line_info(offset)
- is_input = linfo.direction == gpiod.line.Direction.INPUT
- print(
- "\tline {:>3}: {:>18} {:>12} {:>8} {:>10}".format(
- linfo.offset,
- linfo.name or "unnamed",
- linfo.consumer or "unused",
- "input" if is_input else "output",
- "active-low" if linfo.active_low else "active-high",
- )
- )
diff --git a/bindings/python/examples/gpiomon.py b/bindings/python/examples/gpiomon.py
deleted file mode 100755
index 702d7c8..0000000
--- a/bindings/python/examples/gpiomon.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: GPL-2.0-or-later
-# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
-
-"""Simplified reimplementation of the gpiomon tool in Python."""
-
-import gpiod
-import sys
-
-from gpiod.line import Edge
-
-if __name__ == "__main__":
- if len(sys.argv) < 3:
- raise TypeError("usage: gpiomon.py <gpiochip> <offset1> <offset2> ...")
-
- path = sys.argv[1]
- lines = [int(line) if line.isdigit() else line for line in sys.argv[2:]]
-
- with gpiod.request_lines(
- path,
- consumer="gpiomon.py",
- config={tuple(lines): gpiod.LineSettings(edge_detection=Edge.BOTH)},
- ) as request:
- while True:
- for event in request.read_edge_events():
- print(event)
diff --git a/bindings/python/examples/gpionotify.py b/bindings/python/examples/gpionotify.py
deleted file mode 100755
index 4e50515..0000000
--- a/bindings/python/examples/gpionotify.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: GPL-2.0-or-later
-# SPDX-FileCopyrightText: 2023 Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
-
-"""Simplified reimplementation of the gpionotify tool in Python."""
-
-import gpiod
-import sys
-
-if __name__ == "__main__":
- if len(sys.argv) < 3:
- raise TypeError("usage: gpionotify.py <gpiochip> <offset1> <offset2> ...")
-
- path = sys.argv[1]
-
- with gpiod.Chip(path) as chip:
- for line in sys.argv[2:]:
- chip.watch_line_info(line)
-
- while True:
- print(chip.read_info_event())
diff --git a/bindings/python/examples/gpioset.py b/bindings/python/examples/gpioset.py
deleted file mode 100755
index e6a516c..0000000
--- a/bindings/python/examples/gpioset.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: GPL-2.0-or-later
-# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
-
-"""Simplified reimplementation of the gpioset tool in Python."""
-
-import gpiod
-import sys
-
-from gpiod.line import Direction, Value
-
-if __name__ == "__main__":
- if len(sys.argv) < 3:
- raise TypeError(
- "usage: gpioset.py <gpiochip> <offset1>=<value1> <offset2>=<value2> ..."
- )
-
- path = sys.argv[1]
-
- def parse_value(arg):
- x, y = arg.split("=")
- return (x, Value(int(y)))
-
- def make_settings(val):
- return gpiod.LineSettings(direction=Direction.OUTPUT, output_value=val)
-
- lvs = [parse_value(arg) for arg in sys.argv[2:]]
- config = dict((l, make_settings(v)) for (l, v) in lvs)
-
- request = gpiod.request_lines(
- path,
- consumer="gpioset.py",
- config=config,
- )
-
- input()
diff --git a/bindings/python/examples/helpers.py b/bindings/python/examples/helpers.py
deleted file mode 100644
index 8b91173..0000000
--- a/bindings/python/examples/helpers.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
-
-import gpiod
-import os
-
-
-def gpio_chips():
- for path in [
- entry.path
- for entry in os.scandir("/dev/")
- if gpiod.is_gpiochip_device(entry.path)
- ]:
- with gpiod.Chip(path) as chip:
- yield chip
diff --git a/bindings/python/examples/reconfigure_input_to_output.py b/bindings/python/examples/reconfigure_input_to_output.py
new file mode 100755
index 0000000..0f2e358
--- /dev/null
+++ b/bindings/python/examples/reconfigure_input_to_output.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Example of a bi-directional line requested as input and then switched to output."""
+
+import gpiod
+
+from gpiod.line import Direction, Value
+
+
+def reconfigure_input_to_output(chip_path, line_offset):
+ # request the line initially as an input
+ with gpiod.request_lines(
+ chip_path,
+ consumer="reconfigure-input-to-output",
+ config={line_offset: gpiod.LineSettings(direction=Direction.INPUT)},
+ ) as request:
+ # read the current line value
+ value = request.get_value(line_offset)
+ print("{}={} (input)".format(line_offset, value))
+ # switch the line to an output and drive it low
+ request.reconfigure_lines(
+ config={
+ line_offset: gpiod.LineSettings(
+ direction=Direction.OUTPUT, output_value=Value.INACTIVE
+ )
+ }
+ )
+ # report the current driven value
+ value = request.get_value(line_offset)
+ print("{}={} (output)".format(line_offset, value))
+
+
+if __name__ == "__main__":
+ try:
+ reconfigure_input_to_output("/dev/gpiochip0", 5)
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/toggle_multiple_line_values.py b/bindings/python/examples/toggle_multiple_line_values.py
new file mode 100755
index 0000000..12b968d
--- /dev/null
+++ b/bindings/python/examples/toggle_multiple_line_values.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of toggling multiple lines."""
+
+import gpiod
+import time
+
+from gpiod.line import Direction, Value
+
+
+def toggle_value(value):
+ if value == Value.INACTIVE:
+ return Value.ACTIVE
+ return Value.INACTIVE
+
+
+def toggle_multiple_line_values(chip_path, line_values):
+ value_str = {Value.ACTIVE: "Active", Value.INACTIVE: "Inactive"}
+
+ request = gpiod.request_lines(
+ chip_path,
+ consumer="toggle-multiple-line-values",
+ config={
+ tuple(line_values.keys()): gpiod.LineSettings(direction=Direction.OUTPUT)
+ },
+ output_values=line_values,
+ )
+
+ while True:
+ print(
+ " ".join("{}={}".format(l, value_str[v]) for (l, v) in line_values.items())
+ )
+ time.sleep(1)
+ for l, v in line_values.items():
+ line_values[l] = toggle_value(v)
+ request.set_values(line_values)
+
+
+if __name__ == "__main__":
+ try:
+ toggle_multiple_line_values(
+ "/dev/gpiochip0", {5: Value.ACTIVE, 3: Value.ACTIVE, 7: Value.INACTIVE}
+ )
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/watch_line_info.py b/bindings/python/examples/watch_line_info.py
new file mode 100755
index 0000000..e49a669
--- /dev/null
+++ b/bindings/python/examples/watch_line_info.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of watching for info changes on particular lines."""
+
+import gpiod
+
+
+def watch_line_info(chip_path, line_offsets):
+ with gpiod.Chip(chip_path) as chip:
+ for offset in line_offsets:
+ chip.watch_line_info(offset)
+
+ while True:
+ print(chip.read_info_event())
+
+
+if __name__ == "__main__":
+ try:
+ watch_line_info("/dev/gpiochip0", [5, 3, 7])
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/watch_line_rising.py b/bindings/python/examples/watch_line_rising.py
new file mode 100755
index 0000000..2350d76
--- /dev/null
+++ b/bindings/python/examples/watch_line_rising.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of watching for rising edges on a single line."""
+
+import gpiod
+
+from gpiod.line import Edge
+
+
+def watch_line_rising(chip_path, line_offset):
+ with gpiod.request_lines(
+ chip_path,
+ consumer="watch-line-rising",
+ config={line_offset: gpiod.LineSettings(edge_detection=Edge.RISING)},
+ ) as request:
+ while True:
+ # Blocks until at least one event is available
+ for event in request.read_edge_events():
+ print(
+ "line: %d type: Rising event #%d"
+ % (event.line_offset, event.line_seqno)
+ )
+
+
+if __name__ == "__main__":
+ try:
+ watch_line_rising("/dev/gpiochip0", 5)
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
diff --git a/bindings/python/examples/watch_multiple_line_values.py b/bindings/python/examples/watch_multiple_line_values.py
new file mode 100755
index 0000000..658ecee
--- /dev/null
+++ b/bindings/python/examples/watch_multiple_line_values.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
+
+"""Minimal example of watching for edges on multiple lines."""
+
+import gpiod
+
+from gpiod.line import Edge
+
+
+def edge_type(event):
+ if event.event_type is event.Type.RISING_EDGE:
+ return "Rising"
+ if event.event_type is event.Type.FALLING_EDGE:
+ return "Falling"
+ return "Unknown"
+
+
+def watch_multiple_line_values(chip_path, line_offsets):
+ with gpiod.request_lines(
+ chip_path,
+ consumer="watch-multiple-line-values",
+ config={tuple(line_offsets): gpiod.LineSettings(edge_detection=Edge.BOTH)},
+ ) as request:
+ while True:
+ for event in request.read_edge_events():
+ print(
+ "offset: {} type: {:<7} event #{} line event #{}".format(
+ event.line_offset,
+ edge_type(event),
+ event.global_seqno,
+ event.line_seqno,
+ )
+ )
+
+
+if __name__ == "__main__":
+ try:
+ watch_multiple_line_values("/dev/gpiochip0", [5, 3, 7])
+ except OSError as ex:
+ print(ex, "\nCustomise the example configuration to suit your situation")
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [libgpiod][PATCH 2/4] core: examples: fix file comments
2023-06-24 5:20 [libgpiod][PATCH 0/4] python examples and comment corrections Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples Kent Gibson
@ 2023-06-24 5:20 ` Kent Gibson
2023-06-26 8:07 ` Bartosz Golaszewski
2023-06-24 5:20 ` [libgpiod][PATCH 3/4] cxx: examples: file comment consistency Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 4/4] rust: " Kent Gibson
3 siblings, 1 reply; 9+ messages in thread
From: Kent Gibson @ 2023-06-24 5:20 UTC (permalink / raw)
To: linux-gpio, brgl; +Cc: Kent Gibson
Some of the file comments are cut-and-paste errors, so replace them
with the correct comment.
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
examples/async_watch_line_value.c | 2 +-
examples/get_multiple_line_values.c | 2 +-
examples/reconfigure_input_to_output.c | 5 ++++-
examples/watch_multiple_line_values.c | 2 +-
4 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/examples/async_watch_line_value.c b/examples/async_watch_line_value.c
index f35fb1a..8b1d643 100644
--- a/examples/async_watch_line_value.c
+++ b/examples/async_watch_line_value.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
-/* Minimal example of asynchronously watching for edges on a single line */
+/* Minimal example of asynchronously watching for edges on a single line. */
#include <errno.h>
#include <gpiod.h>
diff --git a/examples/get_multiple_line_values.c b/examples/get_multiple_line_values.c
index b16c570..c6df3f6 100644
--- a/examples/get_multiple_line_values.c
+++ b/examples/get_multiple_line_values.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
-/* Minimal example of reading a single line. */
+/* Minimal example of reading multiple lines. */
#include <errno.h>
#include <gpiod.h>
diff --git a/examples/reconfigure_input_to_output.c b/examples/reconfigure_input_to_output.c
index e8fbb1c..abfaf79 100644
--- a/examples/reconfigure_input_to_output.c
+++ b/examples/reconfigure_input_to_output.c
@@ -1,7 +1,10 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
-/* Minimal example of reading a single line. */
+/*
+ * Example of a bi-directional line requested as input and then switched
+ * to output.
+ */
#include <errno.h>
#include <gpiod.h>
diff --git a/examples/watch_multiple_line_values.c b/examples/watch_multiple_line_values.c
index 8015270..e955b2c 100644
--- a/examples/watch_multiple_line_values.c
+++ b/examples/watch_multiple_line_values.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
-/* Minimal example of watching for edges on a single line. */
+/* Minimal example of watching for edges on multiple lines. */
#include <errno.h>
#include <gpiod.h>
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [libgpiod][PATCH 3/4] cxx: examples: file comment consistency
2023-06-24 5:20 [libgpiod][PATCH 0/4] python examples and comment corrections Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 2/4] core: examples: fix file comments Kent Gibson
@ 2023-06-24 5:20 ` Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 4/4] rust: " Kent Gibson
3 siblings, 0 replies; 9+ messages in thread
From: Kent Gibson @ 2023-06-24 5:20 UTC (permalink / raw)
To: linux-gpio, brgl; +Cc: Kent Gibson
Make the file comment for reconfigure_input_to_output consistent with
other language examples.
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
bindings/cxx/examples/reconfigure_input_to_output.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/bindings/cxx/examples/reconfigure_input_to_output.cpp b/bindings/cxx/examples/reconfigure_input_to_output.cpp
index 7b52dab..896c812 100644
--- a/bindings/cxx/examples/reconfigure_input_to_output.cpp
+++ b/bindings/cxx/examples/reconfigure_input_to_output.cpp
@@ -2,8 +2,8 @@
// SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
/*
- * Minimal example of requesting a line intended for bi-directional use as
- * input and then switching to output.
+ * Example of a bi-directional line requested as input and then switched
+ * to output.
*/
#include <cstdlib>
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [libgpiod][PATCH 4/4] rust: examples: file comment consistency
2023-06-24 5:20 [libgpiod][PATCH 0/4] python examples and comment corrections Kent Gibson
` (2 preceding siblings ...)
2023-06-24 5:20 ` [libgpiod][PATCH 3/4] cxx: examples: file comment consistency Kent Gibson
@ 2023-06-24 5:20 ` Kent Gibson
3 siblings, 0 replies; 9+ messages in thread
From: Kent Gibson @ 2023-06-24 5:20 UTC (permalink / raw)
To: linux-gpio, brgl; +Cc: Kent Gibson
Make the file comment for reconfigure_input_to_output consistent with
other language examples.
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
bindings/rust/libgpiod/examples/reconfigure_input_to_output.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bindings/rust/libgpiod/examples/reconfigure_input_to_output.rs b/bindings/rust/libgpiod/examples/reconfigure_input_to_output.rs
index 3e2f2c7..fb5402b 100644
--- a/bindings/rust/libgpiod/examples/reconfigure_input_to_output.rs
+++ b/bindings/rust/libgpiod/examples/reconfigure_input_to_output.rs
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause
// SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
//
-// Minimal example of requesting a line intended for bi-directional use as input and then switching to output.
+// Example of a bi-directional line requested as input and then switched to output.
use libgpiod::line;
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples
2023-06-24 5:20 ` [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples Kent Gibson
@ 2023-06-26 8:02 ` Bartosz Golaszewski
2023-06-26 8:18 ` Kent Gibson
0 siblings, 1 reply; 9+ messages in thread
From: Bartosz Golaszewski @ 2023-06-26 8:02 UTC (permalink / raw)
To: Kent Gibson; +Cc: linux-gpio
On Sat, Jun 24, 2023 at 7:21 AM Kent Gibson <warthog618@gmail.com> wrote:
>
> Replace tool examples with use case examples drawn from the tools.
>
> Signed-off-by: Kent Gibson <warthog618@gmail.com>
> ---
> bindings/python/examples/Makefile.am | 18 +++----
> bindings/python/examples/find_line_by_name.py | 37 +++++++++++++++
> bindings/python/examples/get_chip_info.py | 20 ++++++++
> bindings/python/examples/get_line_info.py | 29 ++++++++++++
> .../examples/get_multiple_line_values.py | 29 ++++++++++++
> bindings/python/examples/gpiodetect.py | 15 ------
> bindings/python/examples/gpiofind.py | 20 --------
> bindings/python/examples/gpioget.py | 29 ------------
> bindings/python/examples/gpioinfo.py | 28 -----------
> bindings/python/examples/gpiomon.py | 26 ----------
> bindings/python/examples/gpionotify.py | 21 ---------
> bindings/python/examples/gpioset.py | 36 --------------
> bindings/python/examples/helpers.py | 15 ------
> .../examples/reconfigure_input_to_output.py | 39 +++++++++++++++
> .../examples/toggle_multiple_line_values.py | 47 +++++++++++++++++++
> bindings/python/examples/watch_line_info.py | 23 +++++++++
> bindings/python/examples/watch_line_rising.py | 31 ++++++++++++
> .../examples/watch_multiple_line_values.py | 42 +++++++++++++++++
> 18 files changed, 307 insertions(+), 198 deletions(-)
> create mode 100755 bindings/python/examples/find_line_by_name.py
> create mode 100755 bindings/python/examples/get_chip_info.py
> create mode 100755 bindings/python/examples/get_line_info.py
> create mode 100755 bindings/python/examples/get_multiple_line_values.py
> delete mode 100755 bindings/python/examples/gpiodetect.py
> delete mode 100755 bindings/python/examples/gpiofind.py
> delete mode 100755 bindings/python/examples/gpioget.py
> delete mode 100755 bindings/python/examples/gpioinfo.py
> delete mode 100755 bindings/python/examples/gpiomon.py
> delete mode 100755 bindings/python/examples/gpionotify.py
> delete mode 100755 bindings/python/examples/gpioset.py
> delete mode 100644 bindings/python/examples/helpers.py
> create mode 100755 bindings/python/examples/reconfigure_input_to_output.py
> create mode 100755 bindings/python/examples/toggle_multiple_line_values.py
> create mode 100755 bindings/python/examples/watch_line_info.py
> create mode 100755 bindings/python/examples/watch_line_rising.py
> create mode 100755 bindings/python/examples/watch_multiple_line_values.py
>
> diff --git a/bindings/python/examples/Makefile.am b/bindings/python/examples/Makefile.am
> index c8c1c98..52abafc 100644
> --- a/bindings/python/examples/Makefile.am
> +++ b/bindings/python/examples/Makefile.am
> @@ -3,13 +3,15 @@
>
> EXTRA_DIST = \
> async_watch_line_value.py \
> + find_line_by_name.py \
> + get_chip_info.py \
> + get_line_info.py \
> get_line_value.py \
> - gpiodetect.py \
> - gpiofind.py \
> - gpioget.py \
> - gpioinfo.py \
> - gpiomon.py \
> - gpionotify.py \
> - gpioset.py \
> + get_multiple_line_values.py \
> + reconfigure_input_to_output.py \
> toggle_line_value.py \
> - watch_line_value.py
> + toggle_multiple_line_values.py \
> + watch_line_requests.py \
> + watch_line_value.py \
> + watch_line_rising.py \
> + watch_multiple_line_values.py
> diff --git a/bindings/python/examples/find_line_by_name.py b/bindings/python/examples/find_line_by_name.py
> new file mode 100755
> index 0000000..ac798a9
> --- /dev/null
> +++ b/bindings/python/examples/find_line_by_name.py
> @@ -0,0 +1,37 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of finding a line with the given name."""
> +
> +import gpiod
> +import os
> +
> +
> +def generate_gpio_chips():
> + for entry in os.scandir("/dev/"):
> + if gpiod.is_gpiochip_device(entry.path):
> + yield entry.path
> +
> +
> +def find_line_by_name(line_name):
> + # Names are not guaranteed unique, so this finds the first line with
> + # the given name.
> + for path in generate_gpio_chips():
> + with gpiod.Chip(path) as chip:
> + try:
> + offset = chip.line_offset_from_id(line_name)
> + print("{}: {} {}".format(line_name, chip.get_info().name, offset))
> + return
> + except OSError:
> + # An OSError is raised if the name is not found.
> + continue
> +
> + print("line '{}' not found".format(line_name))
> +
> +
> +if __name__ == "__main__":
> + try:
> + find_line_by_name("GPIO19")
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/get_chip_info.py b/bindings/python/examples/get_chip_info.py
> new file mode 100755
> index 0000000..7dc76fb
> --- /dev/null
> +++ b/bindings/python/examples/get_chip_info.py
> @@ -0,0 +1,20 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of reading the info for a chip."""
> +
> +import gpiod
> +
> +
> +def get_chip_info(chip_path):
> + with gpiod.Chip(chip_path) as chip:
> + info = chip.get_info()
> + print("{} [{}] ({} lines)".format(info.name, info.label, info.num_lines))
> +
> +
> +if __name__ == "__main__":
> + try:
> + get_chip_info("/dev/gpiochip0")
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/get_line_info.py b/bindings/python/examples/get_line_info.py
> new file mode 100755
> index 0000000..cd4ebcc
> --- /dev/null
> +++ b/bindings/python/examples/get_line_info.py
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of reading the info for a line."""
> +
> +import gpiod
> +
> +
> +def get_line_info(chip_path, line_offset):
> + with gpiod.Chip(chip_path) as chip:
> + info = chip.get_line_info(line_offset)
> + is_input = info.direction == gpiod.line.Direction.INPUT
> + print(
> + "line {:>3}: {:>12} {:>12} {:>8} {:>10}".format(
> + info.offset,
> + info.name or "unnamed",
> + info.consumer or "unused",
> + "input" if is_input else "output",
> + "active-low" if info.active_low else "active-high",
> + )
> + )
> +
> +
> +if __name__ == "__main__":
> + try:
> + get_line_info("/dev/gpiochip0", 3)
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/get_multiple_line_values.py b/bindings/python/examples/get_multiple_line_values.py
> new file mode 100755
> index 0000000..46cf0b2
> --- /dev/null
> +++ b/bindings/python/examples/get_multiple_line_values.py
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of reading multiple lines."""
> +
> +import gpiod
> +
> +from gpiod.line import Direction
> +
> +
> +def get_multiple_line_values(chip_path, line_offsets):
> + with gpiod.request_lines(
> + chip_path,
> + consumer="get-multiple-line-values",
> + config={tuple(line_offsets): gpiod.LineSettings(direction=Direction.INPUT)},
> + ) as request:
> + vals = request.get_values()
> +
> + for offset, val in zip(line_offsets, vals):
> + print("{}={} ".format(offset, val), end="")
> + print()
> +
> +
> +if __name__ == "__main__":
> + try:
> + get_multiple_line_values("/dev/gpiochip0", [5, 3, 7])
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/gpiodetect.py b/bindings/python/examples/gpiodetect.py
> deleted file mode 100755
> index dc98b03..0000000
> --- a/bindings/python/examples/gpiodetect.py
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -#!/usr/bin/env python3
> -# SPDX-License-Identifier: GPL-2.0-or-later
> -# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
> -
> -"""Reimplementation of the gpiodetect tool in Python."""
> -
> -import gpiod
> -import os
> -
> -from helpers import gpio_chips
> -
> -if __name__ == "__main__":
> - for chip in gpio_chips():
> - info = chip.get_info()
> - print("{} [{}] ({} lines)".format(info.name, info.label, info.num_lines))
> diff --git a/bindings/python/examples/gpiofind.py b/bindings/python/examples/gpiofind.py
> deleted file mode 100755
> index d41660d..0000000
> --- a/bindings/python/examples/gpiofind.py
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -#!/usr/bin/env python3
> -# SPDX-License-Identifier: GPL-2.0-or-later
> -# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
> -
> -"""Reimplementation of the gpiofind tool in Python."""
> -
> -import gpiod
> -import os
> -import sys
> -
> -if __name__ == "__main__":
> - for entry in os.scandir("/dev/"):
> - if gpiod.is_gpiochip_device(entry.path):
> - with gpiod.Chip(entry.path) as chip:
> - offset = chip.line_offset_from_id(sys.argv[1])
> - if offset is not None:
> - print("{} {}".format(chip.get_info().name, offset))
> - sys.exit(0)
> -
> - sys.exit(1)
> diff --git a/bindings/python/examples/gpioget.py b/bindings/python/examples/gpioget.py
> deleted file mode 100755
> index bf7e0a6..0000000
> --- a/bindings/python/examples/gpioget.py
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -#!/usr/bin/env python3
> -# SPDX-License-Identifier: GPL-2.0-or-later
> -# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
> -
> -"""Simplified reimplementation of the gpioget tool in Python."""
> -
> -import gpiod
> -import sys
> -
> -from gpiod.line import Direction
> -
> -if __name__ == "__main__":
> - if len(sys.argv) < 3:
> - raise TypeError("usage: gpioget.py <gpiochip> <offset1> <offset2> ...")
> -
> - path = sys.argv[1]
> - lines = [int(line) if line.isdigit() else line for line in sys.argv[2:]]
> -
> - request = gpiod.request_lines(
> - path,
> - consumer="gpioget.py",
> - config={tuple(lines): gpiod.LineSettings(direction=Direction.INPUT)},
> - )
> -
> - vals = request.get_values()
> -
> - for val in vals:
> - print("{} ".format(val.value), end="")
> - print()
> diff --git a/bindings/python/examples/gpioinfo.py b/bindings/python/examples/gpioinfo.py
> deleted file mode 100755
> index 3996dcf..0000000
> --- a/bindings/python/examples/gpioinfo.py
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -#!/usr/bin/env python3
> -# SPDX-License-Identifier: GPL-2.0-or-later
> -# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
> -
> -"""Simplified reimplementation of the gpioinfo tool in Python."""
> -
> -import gpiod
> -import os
> -
> -from helpers import gpio_chips
> -
> -if __name__ == "__main__":
> - for chip in gpio_chips():
> - cinfo = chip.get_info()
> - print("{} - {} lines:".format(cinfo.name, cinfo.num_lines))
> -
> - for offset in range(0, cinfo.num_lines):
> - linfo = chip.get_line_info(offset)
> - is_input = linfo.direction == gpiod.line.Direction.INPUT
> - print(
> - "\tline {:>3}: {:>18} {:>12} {:>8} {:>10}".format(
> - linfo.offset,
> - linfo.name or "unnamed",
> - linfo.consumer or "unused",
> - "input" if is_input else "output",
> - "active-low" if linfo.active_low else "active-high",
> - )
> - )
> diff --git a/bindings/python/examples/gpiomon.py b/bindings/python/examples/gpiomon.py
> deleted file mode 100755
> index 702d7c8..0000000
> --- a/bindings/python/examples/gpiomon.py
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -#!/usr/bin/env python3
> -# SPDX-License-Identifier: GPL-2.0-or-later
> -# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
> -
> -"""Simplified reimplementation of the gpiomon tool in Python."""
> -
> -import gpiod
> -import sys
> -
> -from gpiod.line import Edge
> -
> -if __name__ == "__main__":
> - if len(sys.argv) < 3:
> - raise TypeError("usage: gpiomon.py <gpiochip> <offset1> <offset2> ...")
> -
> - path = sys.argv[1]
> - lines = [int(line) if line.isdigit() else line for line in sys.argv[2:]]
> -
> - with gpiod.request_lines(
> - path,
> - consumer="gpiomon.py",
> - config={tuple(lines): gpiod.LineSettings(edge_detection=Edge.BOTH)},
> - ) as request:
> - while True:
> - for event in request.read_edge_events():
> - print(event)
> diff --git a/bindings/python/examples/gpionotify.py b/bindings/python/examples/gpionotify.py
> deleted file mode 100755
> index 4e50515..0000000
> --- a/bindings/python/examples/gpionotify.py
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -#!/usr/bin/env python3
> -# SPDX-License-Identifier: GPL-2.0-or-later
> -# SPDX-FileCopyrightText: 2023 Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> -
> -"""Simplified reimplementation of the gpionotify tool in Python."""
> -
> -import gpiod
> -import sys
> -
> -if __name__ == "__main__":
> - if len(sys.argv) < 3:
> - raise TypeError("usage: gpionotify.py <gpiochip> <offset1> <offset2> ...")
> -
> - path = sys.argv[1]
> -
> - with gpiod.Chip(path) as chip:
> - for line in sys.argv[2:]:
> - chip.watch_line_info(line)
> -
> - while True:
> - print(chip.read_info_event())
> diff --git a/bindings/python/examples/gpioset.py b/bindings/python/examples/gpioset.py
> deleted file mode 100755
> index e6a516c..0000000
> --- a/bindings/python/examples/gpioset.py
> +++ /dev/null
> @@ -1,36 +0,0 @@
> -#!/usr/bin/env python3
> -# SPDX-License-Identifier: GPL-2.0-or-later
> -# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
> -
> -"""Simplified reimplementation of the gpioset tool in Python."""
> -
> -import gpiod
> -import sys
> -
> -from gpiod.line import Direction, Value
> -
> -if __name__ == "__main__":
> - if len(sys.argv) < 3:
> - raise TypeError(
> - "usage: gpioset.py <gpiochip> <offset1>=<value1> <offset2>=<value2> ..."
> - )
> -
> - path = sys.argv[1]
> -
> - def parse_value(arg):
> - x, y = arg.split("=")
> - return (x, Value(int(y)))
> -
> - def make_settings(val):
> - return gpiod.LineSettings(direction=Direction.OUTPUT, output_value=val)
> -
> - lvs = [parse_value(arg) for arg in sys.argv[2:]]
> - config = dict((l, make_settings(v)) for (l, v) in lvs)
> -
> - request = gpiod.request_lines(
> - path,
> - consumer="gpioset.py",
> - config=config,
> - )
> -
> - input()
> diff --git a/bindings/python/examples/helpers.py b/bindings/python/examples/helpers.py
> deleted file mode 100644
> index 8b91173..0000000
> --- a/bindings/python/examples/helpers.py
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -# SPDX-License-Identifier: LGPL-2.1-or-later
> -# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
> -
> -import gpiod
> -import os
> -
> -
> -def gpio_chips():
> - for path in [
> - entry.path
> - for entry in os.scandir("/dev/")
> - if gpiod.is_gpiochip_device(entry.path)
> - ]:
> - with gpiod.Chip(path) as chip:
> - yield chip
> diff --git a/bindings/python/examples/reconfigure_input_to_output.py b/bindings/python/examples/reconfigure_input_to_output.py
> new file mode 100755
> index 0000000..0f2e358
> --- /dev/null
> +++ b/bindings/python/examples/reconfigure_input_to_output.py
> @@ -0,0 +1,39 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Example of a bi-directional line requested as input and then switched to output."""
> +
> +import gpiod
> +
> +from gpiod.line import Direction, Value
> +
> +
> +def reconfigure_input_to_output(chip_path, line_offset):
> + # request the line initially as an input
> + with gpiod.request_lines(
> + chip_path,
> + consumer="reconfigure-input-to-output",
> + config={line_offset: gpiod.LineSettings(direction=Direction.INPUT)},
> + ) as request:
> + # read the current line value
> + value = request.get_value(line_offset)
> + print("{}={} (input)".format(line_offset, value))
> + # switch the line to an output and drive it low
> + request.reconfigure_lines(
> + config={
> + line_offset: gpiod.LineSettings(
> + direction=Direction.OUTPUT, output_value=Value.INACTIVE
> + )
> + }
> + )
> + # report the current driven value
> + value = request.get_value(line_offset)
> + print("{}={} (output)".format(line_offset, value))
> +
> +
> +if __name__ == "__main__":
> + try:
> + reconfigure_input_to_output("/dev/gpiochip0", 5)
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/toggle_multiple_line_values.py b/bindings/python/examples/toggle_multiple_line_values.py
> new file mode 100755
> index 0000000..12b968d
> --- /dev/null
> +++ b/bindings/python/examples/toggle_multiple_line_values.py
> @@ -0,0 +1,47 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of toggling multiple lines."""
> +
> +import gpiod
> +import time
> +
> +from gpiod.line import Direction, Value
> +
> +
> +def toggle_value(value):
> + if value == Value.INACTIVE:
> + return Value.ACTIVE
> + return Value.INACTIVE
> +
> +
> +def toggle_multiple_line_values(chip_path, line_values):
> + value_str = {Value.ACTIVE: "Active", Value.INACTIVE: "Inactive"}
> +
> + request = gpiod.request_lines(
> + chip_path,
> + consumer="toggle-multiple-line-values",
> + config={
> + tuple(line_values.keys()): gpiod.LineSettings(direction=Direction.OUTPUT)
> + },
> + output_values=line_values,
> + )
> +
> + while True:
> + print(
> + " ".join("{}={}".format(l, value_str[v]) for (l, v) in line_values.items())
> + )
> + time.sleep(1)
> + for l, v in line_values.items():
> + line_values[l] = toggle_value(v)
> + request.set_values(line_values)
> +
> +
> +if __name__ == "__main__":
> + try:
> + toggle_multiple_line_values(
> + "/dev/gpiochip0", {5: Value.ACTIVE, 3: Value.ACTIVE, 7: Value.INACTIVE}
> + )
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/watch_line_info.py b/bindings/python/examples/watch_line_info.py
> new file mode 100755
> index 0000000..e49a669
> --- /dev/null
> +++ b/bindings/python/examples/watch_line_info.py
> @@ -0,0 +1,23 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of watching for info changes on particular lines."""
> +
> +import gpiod
> +
> +
> +def watch_line_info(chip_path, line_offsets):
> + with gpiod.Chip(chip_path) as chip:
> + for offset in line_offsets:
> + chip.watch_line_info(offset)
> +
> + while True:
> + print(chip.read_info_event())
> +
> +
> +if __name__ == "__main__":
> + try:
> + watch_line_info("/dev/gpiochip0", [5, 3, 7])
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/watch_line_rising.py b/bindings/python/examples/watch_line_rising.py
> new file mode 100755
> index 0000000..2350d76
> --- /dev/null
> +++ b/bindings/python/examples/watch_line_rising.py
> @@ -0,0 +1,31 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of watching for rising edges on a single line."""
> +
> +import gpiod
> +
> +from gpiod.line import Edge
> +
> +
> +def watch_line_rising(chip_path, line_offset):
> + with gpiod.request_lines(
> + chip_path,
> + consumer="watch-line-rising",
> + config={line_offset: gpiod.LineSettings(edge_detection=Edge.RISING)},
> + ) as request:
> + while True:
> + # Blocks until at least one event is available
> + for event in request.read_edge_events():
> + print(
> + "line: %d type: Rising event #%d"
> + % (event.line_offset, event.line_seqno)
> + )
This still uses the old style formatting.
> +
> +
> +if __name__ == "__main__":
> + try:
> + watch_line_rising("/dev/gpiochip0", 5)
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> diff --git a/bindings/python/examples/watch_multiple_line_values.py b/bindings/python/examples/watch_multiple_line_values.py
> new file mode 100755
> index 0000000..658ecee
> --- /dev/null
> +++ b/bindings/python/examples/watch_multiple_line_values.py
> @@ -0,0 +1,42 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> +
> +"""Minimal example of watching for edges on multiple lines."""
> +
> +import gpiod
> +
> +from gpiod.line import Edge
> +
> +
> +def edge_type(event):
> + if event.event_type is event.Type.RISING_EDGE:
> + return "Rising"
> + if event.event_type is event.Type.FALLING_EDGE:
> + return "Falling"
> + return "Unknown"
> +
As there'll be another iteration, maybe change this to get_edge_type()
or get_edge_event_type_str()? I have a preference for function names
to reflect the action in general.
Bart
> +
> +def watch_multiple_line_values(chip_path, line_offsets):
> + with gpiod.request_lines(
> + chip_path,
> + consumer="watch-multiple-line-values",
> + config={tuple(line_offsets): gpiod.LineSettings(edge_detection=Edge.BOTH)},
> + ) as request:
> + while True:
> + for event in request.read_edge_events():
> + print(
> + "offset: {} type: {:<7} event #{} line event #{}".format(
> + event.line_offset,
> + edge_type(event),
> + event.global_seqno,
> + event.line_seqno,
> + )
> + )
> +
> +
> +if __name__ == "__main__":
> + try:
> + watch_multiple_line_values("/dev/gpiochip0", [5, 3, 7])
> + except OSError as ex:
> + print(ex, "\nCustomise the example configuration to suit your situation")
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [libgpiod][PATCH 2/4] core: examples: fix file comments
2023-06-24 5:20 ` [libgpiod][PATCH 2/4] core: examples: fix file comments Kent Gibson
@ 2023-06-26 8:07 ` Bartosz Golaszewski
0 siblings, 0 replies; 9+ messages in thread
From: Bartosz Golaszewski @ 2023-06-26 8:07 UTC (permalink / raw)
To: Kent Gibson; +Cc: linux-gpio
On Sat, Jun 24, 2023 at 7:21 AM Kent Gibson <warthog618@gmail.com> wrote:
>
> Some of the file comments are cut-and-paste errors, so replace them
> with the correct comment.
>
> Signed-off-by: Kent Gibson <warthog618@gmail.com>
> ---
> examples/async_watch_line_value.c | 2 +-
> examples/get_multiple_line_values.c | 2 +-
> examples/reconfigure_input_to_output.c | 5 ++++-
> examples/watch_multiple_line_values.c | 2 +-
> 4 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/examples/async_watch_line_value.c b/examples/async_watch_line_value.c
> index f35fb1a..8b1d643 100644
> --- a/examples/async_watch_line_value.c
> +++ b/examples/async_watch_line_value.c
> @@ -1,7 +1,7 @@
> // SPDX-License-Identifier: GPL-2.0-or-later
> // SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
>
> -/* Minimal example of asynchronously watching for edges on a single line */
> +/* Minimal example of asynchronously watching for edges on a single line. */
>
> #include <errno.h>
> #include <gpiod.h>
> diff --git a/examples/get_multiple_line_values.c b/examples/get_multiple_line_values.c
> index b16c570..c6df3f6 100644
> --- a/examples/get_multiple_line_values.c
> +++ b/examples/get_multiple_line_values.c
> @@ -1,7 +1,7 @@
> // SPDX-License-Identifier: GPL-2.0-or-later
> // SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
>
> -/* Minimal example of reading a single line. */
> +/* Minimal example of reading multiple lines. */
>
> #include <errno.h>
> #include <gpiod.h>
> diff --git a/examples/reconfigure_input_to_output.c b/examples/reconfigure_input_to_output.c
> index e8fbb1c..abfaf79 100644
> --- a/examples/reconfigure_input_to_output.c
> +++ b/examples/reconfigure_input_to_output.c
> @@ -1,7 +1,10 @@
> // SPDX-License-Identifier: GPL-2.0-or-later
> // SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
>
> -/* Minimal example of reading a single line. */
> +/*
> + * Example of a bi-directional line requested as input and then switched
> + * to output.
> + */
>
> #include <errno.h>
> #include <gpiod.h>
> diff --git a/examples/watch_multiple_line_values.c b/examples/watch_multiple_line_values.c
> index 8015270..e955b2c 100644
> --- a/examples/watch_multiple_line_values.c
> +++ b/examples/watch_multiple_line_values.c
> @@ -1,7 +1,7 @@
> // SPDX-License-Identifier: GPL-2.0-or-later
> // SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
>
> -/* Minimal example of watching for edges on a single line. */
> +/* Minimal example of watching for edges on multiple lines. */
>
> #include <errno.h>
> #include <gpiod.h>
> --
> 2.41.0
>
I applied this and patches 3 and 4 as well. I fixed the whitespace
error reported by git in this one.
Bart
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples
2023-06-26 8:02 ` Bartosz Golaszewski
@ 2023-06-26 8:18 ` Kent Gibson
2023-06-26 8:24 ` Bartosz Golaszewski
0 siblings, 1 reply; 9+ messages in thread
From: Kent Gibson @ 2023-06-26 8:18 UTC (permalink / raw)
To: Bartosz Golaszewski; +Cc: linux-gpio
On Mon, Jun 26, 2023 at 10:02:33AM +0200, Bartosz Golaszewski wrote:
> On Sat, Jun 24, 2023 at 7:21 AM Kent Gibson <warthog618@gmail.com> wrote:
> >
> > Replace tool examples with use case examples drawn from the tools.
> > + while True:
> > + # Blocks until at least one event is available
> > + for event in request.read_edge_events():
> > + print(
> > + "line: %d type: Rising event #%d"
> > + % (event.line_offset, event.line_seqno)
> > + )
>
> This still uses the old style formatting.
>
Well spotted.
I only fixed the one you pointed out - didn't even consider that there
could be others. Turns out there are a few - probably all
cut-and-paste.
> > +
> > +
> > +if __name__ == "__main__":
> > + try:
> > + watch_line_rising("/dev/gpiochip0", 5)
> > + except OSError as ex:
> > + print(ex, "\nCustomise the example configuration to suit your situation")
> > diff --git a/bindings/python/examples/watch_multiple_line_values.py b/bindings/python/examples/watch_multiple_line_values.py
> > new file mode 100755
> > index 0000000..658ecee
> > --- /dev/null
> > +++ b/bindings/python/examples/watch_multiple_line_values.py
> > @@ -0,0 +1,42 @@
> > +#!/usr/bin/env python3
> > +# SPDX-License-Identifier: GPL-2.0-or-later
> > +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> > +
> > +"""Minimal example of watching for edges on multiple lines."""
> > +
> > +import gpiod
> > +
> > +from gpiod.line import Edge
> > +
> > +
> > +def edge_type(event):
> > + if event.event_type is event.Type.RISING_EDGE:
> > + return "Rising"
> > + if event.event_type is event.Type.FALLING_EDGE:
> > + return "Falling"
> > + return "Unknown"
> > +
>
> As there'll be another iteration, maybe change this to get_edge_type()
> or get_edge_event_type_str()? I have a preference for function names
> to reflect the action in general.
>
Yeah, I use _str elsewhere, not sure why I didn't here.
What an I supposed to resend the update as given the remainder of
the series was merged - v3??
Cheers,
Kent.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples
2023-06-26 8:18 ` Kent Gibson
@ 2023-06-26 8:24 ` Bartosz Golaszewski
0 siblings, 0 replies; 9+ messages in thread
From: Bartosz Golaszewski @ 2023-06-26 8:24 UTC (permalink / raw)
To: Kent Gibson; +Cc: linux-gpio
On Mon, Jun 26, 2023 at 10:18 AM Kent Gibson <warthog618@gmail.com> wrote:
>
> On Mon, Jun 26, 2023 at 10:02:33AM +0200, Bartosz Golaszewski wrote:
> > On Sat, Jun 24, 2023 at 7:21 AM Kent Gibson <warthog618@gmail.com> wrote:
> > >
> > > Replace tool examples with use case examples drawn from the tools.
> > > + while True:
> > > + # Blocks until at least one event is available
> > > + for event in request.read_edge_events():
> > > + print(
> > > + "line: %d type: Rising event #%d"
> > > + % (event.line_offset, event.line_seqno)
> > > + )
> >
> > This still uses the old style formatting.
> >
>
> Well spotted.
> I only fixed the one you pointed out - didn't even consider that there
> could be others. Turns out there are a few - probably all
> cut-and-paste.
>
> > > +
> > > +
> > > +if __name__ == "__main__":
> > > + try:
> > > + watch_line_rising("/dev/gpiochip0", 5)
> > > + except OSError as ex:
> > > + print(ex, "\nCustomise the example configuration to suit your situation")
> > > diff --git a/bindings/python/examples/watch_multiple_line_values.py b/bindings/python/examples/watch_multiple_line_values.py
> > > new file mode 100755
> > > index 0000000..658ecee
> > > --- /dev/null
> > > +++ b/bindings/python/examples/watch_multiple_line_values.py
> > > @@ -0,0 +1,42 @@
> > > +#!/usr/bin/env python3
> > > +# SPDX-License-Identifier: GPL-2.0-or-later
> > > +# SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com>
> > > +
> > > +"""Minimal example of watching for edges on multiple lines."""
> > > +
> > > +import gpiod
> > > +
> > > +from gpiod.line import Edge
> > > +
> > > +
> > > +def edge_type(event):
> > > + if event.event_type is event.Type.RISING_EDGE:
> > > + return "Rising"
> > > + if event.event_type is event.Type.FALLING_EDGE:
> > > + return "Falling"
> > > + return "Unknown"
> > > +
> >
> > As there'll be another iteration, maybe change this to get_edge_type()
> > or get_edge_event_type_str()? I have a preference for function names
> > to reflect the action in general.
> >
>
> Yeah, I use _str elsewhere, not sure why I didn't here.
>
> What an I supposed to resend the update as given the remainder of
> the series was merged - v3??
>
Just this patch marked as v3 is fine.
Bart
> Cheers,
> Kent.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-06-26 8:25 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-24 5:20 [libgpiod][PATCH 0/4] python examples and comment corrections Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 1/4] bindings: python: examples: replace tools examples with use case examples Kent Gibson
2023-06-26 8:02 ` Bartosz Golaszewski
2023-06-26 8:18 ` Kent Gibson
2023-06-26 8:24 ` Bartosz Golaszewski
2023-06-24 5:20 ` [libgpiod][PATCH 2/4] core: examples: fix file comments Kent Gibson
2023-06-26 8:07 ` Bartosz Golaszewski
2023-06-24 5:20 ` [libgpiod][PATCH 3/4] cxx: examples: file comment consistency Kent Gibson
2023-06-24 5:20 ` [libgpiod][PATCH 4/4] rust: " Kent Gibson
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).