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

Poll for multiple gpio edges #21

Closed mark-blackburn-etcorp closed 4 years ago

mark-blackburn-etcorp commented 5 years ago

A static method to poll multiple GPIO objects for edges. Something like this:

@staticmethod
def poll_multiple(gpios, timeout):
    # Setup epoll
    p = select.epoll()
    for gpio in gpios:
        p.register(gpio._fd, select.EPOLLIN | select.EPOLLET | select.EPOLLPRI)

    p.poll(0)
    events = p.poll(timeout)
    print("events = %s" % repr(events))
    result = []
    gpio_fds_triggered = zip(*events)[0]
    for gpio in gpios:
        result.append(gpio._fd in gpio_fds_triggered)
    return result
vsergeev commented 4 years ago

This would be great to have. I'll have to revisit this after the upcoming v2.0.0 release with character device GPIOs.