vsergeev / python-periphery

A pure Python 2/3 library for peripheral I/O (GPIO, LED, PWM, SPI, I2C, MMIO, Serial) in Linux.
MIT License
519 stars 139 forks source link

Setting `edge` on cdevV2 GPIO raises an OSError 22 of "Invalid Argument" #70

Open RobertDeRose opened 2 months ago

RobertDeRose commented 2 months ago
>>> input = pp.GPIO("/dev/gpiochip3", 10, "in", inverted=True, drive="default")

>>> input.edge="falling"
Traceback (most recent call last):
  File "/root/gpio_controller/.venv/lib/python3.10/site-packages/periphery/gpio_cdev2.py", line 269, in _reopen
    fcntl.ioctl(self._chip_fd, Cdev2GPIO._GPIO_V2_GET_LINE_IOCTL, line_request)
OSError: [Errno 22] Invalid argument

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/gpio_controller/.venv/lib/python3.10/site-packages/periphery/gpio_cdev2.py", line 525, in _set_edge
    self._reopen(self._direction, edge, self._bias, self._drive, self._inverted)
  File "/root/gpio_controller/.venv/lib/python3.10/site-packages/periphery/gpio_cdev2.py", line 271, in _reopen
    raise GPIOError(e.errno, "Opening input line handle: " + e.strerror)
periphery.gpio.GPIOError: [Errno 22] Opening input line handle: Invalid argument

>>> input.edge="rising"
Traceback (most recent call last):
  File "/root/gpio_controller/.venv/lib/python3.10/site-packages/periphery/gpio_cdev2.py", line 269, in _reopen
    fcntl.ioctl(self._chip_fd, Cdev2GPIO._GPIO_V2_GET_LINE_IOCTL, line_request)
OSError: [Errno 22] Invalid argument

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/gpio_controller/.venv/lib/python3.10/site-packages/periphery/gpio_cdev2.py", line 525, in _set_edge
    self._reopen(self._direction, edge, self._bias, self._drive, self._inverted)
  File "/root/gpio_controller/.venv/lib/python3.10/site-packages/periphery/gpio_cdev2.py", line 271, in _reopen
    raise GPIOError(e.errno, "Opening input line handle: " + e.strerror)
periphery.gpio.GPIOError: [Errno 22] Opening input line handle: Invalid argument

>>> input.__class__.__name__
'Cdev2GPIO'

OS: Linux rock-3b 5.10.160-legacy-rock-3b #1 SMP Thu Feb 29 08:50:21 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux Installed version: python-periphery 2.4.1

Because of this issue, poll and read_event do not work