From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Kent Gibson <warthog618@gmail.com>,
Linus Walleij <linus.walleij@linaro.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Viresh Kumar <viresh.kumar@linaro.org>
Cc: linux-gpio@vger.kernel.org, Bartosz Golaszewski <brgl@bgdev.pl>
Subject: [libgpiod v2][PATCH v3 2/4] bindings: python: add examples
Date: Fri, 7 Oct 2022 16:55:19 +0200 [thread overview]
Message-ID: <20221007145521.329614-3-brgl@bgdev.pl> (raw)
In-Reply-To: <20221007145521.329614-1-brgl@bgdev.pl>
This adds the regular set of example programs implemented using libgpiod
python bindings.
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
---
bindings/python/examples/Makefile.am | 10 +++++++
bindings/python/examples/gpiodetect.py | 17 ++++++++++++
bindings/python/examples/gpiofind.py | 20 ++++++++++++++
bindings/python/examples/gpioget.py | 31 +++++++++++++++++++++
bindings/python/examples/gpioinfo.py | 35 ++++++++++++++++++++++++
bindings/python/examples/gpiomon.py | 28 +++++++++++++++++++
bindings/python/examples/gpioset.py | 37 ++++++++++++++++++++++++++
7 files changed, 178 insertions(+)
create mode 100644 bindings/python/examples/Makefile.am
create mode 100755 bindings/python/examples/gpiodetect.py
create mode 100755 bindings/python/examples/gpiofind.py
create mode 100755 bindings/python/examples/gpioget.py
create mode 100755 bindings/python/examples/gpioinfo.py
create mode 100755 bindings/python/examples/gpiomon.py
create mode 100755 bindings/python/examples/gpioset.py
diff --git a/bindings/python/examples/Makefile.am b/bindings/python/examples/Makefile.am
new file mode 100644
index 0000000..f42b80e
--- /dev/null
+++ b/bindings/python/examples/Makefile.am
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
+
+EXTRA_DIST = \
+ gpiodetect.py \
+ gpiofind.py \
+ gpioget.py \
+ gpioinfo.py \
+ gpiomon.py \
+ gpioset.py
diff --git a/bindings/python/examples/gpiodetect.py b/bindings/python/examples/gpiodetect.py
new file mode 100755
index 0000000..c32014f
--- /dev/null
+++ b/bindings/python/examples/gpiodetect.py
@@ -0,0 +1,17 @@
+#!/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
+
+if __name__ == "__main__":
+ for entry in os.scandir("/dev/"):
+ if gpiod.is_gpiochip_device(entry.path):
+ with gpiod.Chip(entry.path) as chip:
+ 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
new file mode 100755
index 0000000..2f30445
--- /dev/null
+++ b/bindings/python/examples/gpiofind.py
@@ -0,0 +1,20 @@
+#!/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.map_line(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
new file mode 100755
index 0000000..d441535
--- /dev/null
+++ b/bindings/python/examples/gpioget.py
@@ -0,0 +1,31 @@
+#!/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 = []
+ for line in sys.argv[2:]:
+ lines.append(int(line) if line.isdigit() else line)
+
+ 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
new file mode 100755
index 0000000..e8c7d46
--- /dev/null
+++ b/bindings/python/examples/gpioinfo.py
@@ -0,0 +1,35 @@
+#!/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
+
+if __name__ == "__main__":
+ for entry in os.scandir("/dev/"):
+ if gpiod.is_gpiochip_device(entry.path):
+ with gpiod.Chip(entry.path) as chip:
+ 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)
+ offset = linfo.offset
+ name = linfo.name
+ consumer = linfo.consumer
+ direction = linfo.direction
+ active_low = linfo.active_low
+
+ print(
+ "\tline {:>3}: {:>18} {:>12} {:>8} {:>10}".format(
+ offset,
+ "unnamed" if name is None else name,
+ "unused" if consumer is None else consumer,
+ "input"
+ if direction == gpiod.line.Direction.INPUT
+ else "output",
+ "active-low" if active_low else "active-high",
+ )
+ )
diff --git a/bindings/python/examples/gpiomon.py b/bindings/python/examples/gpiomon.py
new file mode 100755
index 0000000..e0db16f
--- /dev/null
+++ b/bindings/python/examples/gpiomon.py
@@ -0,0 +1,28 @@
+#!/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 = []
+ for line in sys.argv[2:]:
+ lines.append(int(line) if line.isdigit() else line)
+
+ 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_event():
+ print(event)
diff --git a/bindings/python/examples/gpioset.py b/bindings/python/examples/gpioset.py
new file mode 100755
index 0000000..f0b0681
--- /dev/null
+++ b/bindings/python/examples/gpioset.py
@@ -0,0 +1,37 @@
+#!/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]
+ values = dict()
+ lines = []
+ for arg in sys.argv[2:]:
+ arg = arg.split("=")
+ key = int(arg[0]) if arg[0].isdigit() else arg[0]
+ val = int(arg[1])
+
+ lines.append(key)
+ values[key] = Value(val)
+
+ request = gpiod.request_lines(
+ path,
+ consumer="gpioset.py",
+ config={tuple(lines): gpiod.LineSettings(direction=Direction.OUTPUT)},
+ )
+
+ vals = request.set_values(values)
+
+ input()
--
2.34.1
next prev parent reply other threads:[~2022-10-07 14:55 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-07 14:55 [libgpiod v2][PATCH v3 0/4] bindings: implement python bindings for libgpiod v2 Bartosz Golaszewski
2022-10-07 14:55 ` [libgpiod v2][PATCH v3 1/4] bindings: python: remove old version Bartosz Golaszewski
2022-10-07 14:55 ` Bartosz Golaszewski [this message]
2022-10-13 3:09 ` [libgpiod v2][PATCH v3 2/4] bindings: python: add examples Kent Gibson
2022-10-17 12:00 ` Bartosz Golaszewski
2022-10-17 12:11 ` Kent Gibson
2022-10-17 13:49 ` Andy Shevchenko
2022-10-17 14:07 ` Kent Gibson
2022-10-17 14:19 ` Andy Shevchenko
2022-10-17 15:53 ` Bartosz Golaszewski
2022-10-17 16:09 ` Kent Gibson
2022-10-17 16:20 ` Kent Gibson
2022-10-17 16:55 ` Andy Shevchenko
2022-10-17 16:57 ` Andy Shevchenko
2022-10-17 17:26 ` Bartosz Golaszewski
2022-10-17 16:24 ` Andy Shevchenko
2022-10-17 16:39 ` Kent Gibson
2022-10-07 14:55 ` [libgpiod v2][PATCH v3 3/4] bindings: python: add tests Bartosz Golaszewski
2022-10-13 3:09 ` Kent Gibson
2022-10-07 14:55 ` [libgpiod v2][PATCH v3 4/4] bindings: python: implement python bindings for libgpiod v2 Bartosz Golaszewski
2022-10-07 15:26 ` Andy Shevchenko
2022-10-07 18:19 ` Bartosz Golaszewski
2022-10-13 3:10 ` Kent Gibson
2022-10-13 11:12 ` Kent Gibson
2022-10-26 12:32 ` Bartosz Golaszewski
2022-10-26 12:56 ` Kent Gibson
2022-10-12 12:34 ` [libgpiod v2][PATCH v3 0/4] bindings: " Bartosz Golaszewski
2022-10-12 12:41 ` Kent Gibson
2022-10-12 12:51 ` Bartosz Golaszewski
2022-10-12 13:03 ` Kent Gibson
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=20221007145521.329614-3-brgl@bgdev.pl \
--to=brgl@bgdev.pl \
--cc=andriy.shevchenko@linux.intel.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=viresh.kumar@linaro.org \
--cc=warthog618@gmail.com \
/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.