Do you have access to the python threading library on that board? If so, I would poll the gpio pin in one thread, the zmq socket in a second thread, and have both threads signal a mutex that your main thread is waiting on. On Feb 28, 2013 5:56 PM, "Eric Hill" <[email protected]> wrote:
> Do you have access to the python threading library on that board? If so, I > would poll the gpio pin in one thread, the zmq socket in a second thread, > and have both threads signal a mutex that your main thread is waiting on. > On Feb 28, 2013 5:37 PM, "Craig Swank" <[email protected]> wrote: > >> I'm trying use zmq_poll to poll both a zmq_socket and a file descriptor >> for a gpio input pin on a beaglebone using pyzmq. Does anyone know if this >> is possible? I wrote a python script that tries to poll on the gpio pin >> only (in order to keep the example as simple as possible). After opening >> an issue at pyzmq and some back and forth with the person who responded to >> my issue, it seems that what I'm asking for is not supported. >> >> My question, is what I'm asking for supported, and if not should I issue >> a feature request with zmq? >> >> Here is the example script. I have two functions - wait and zmq_wait. >> wait blocks until I press a button connected to the gpio pin on the >> beaglebone. zmq_wait never blocks:: >> >> import os, select, time >> import zmq >> >> class MyObj(object): >> """ >> Pyzmq docs claim that any object >> that provides a 'fileno' function >> can be passed to the register function >> of the zmq.Poller >> """ >> def __init__(self, fd): >> self.fd = fd >> >> def fileno(self): >> return self.fd >> >> >> def wait(fd): >> os.read(fd, 2) >> poller = select.poll() >> poller.register(fd, select.POLLPRI) >> events = poller.poll(-1) >> os.lseek(fd, 0, 0) >> val = os.read(fd, 2) >> print 'poller returned', val >> >> >> def zmq_wait(fd): >> os.read(fd, 2) >> poller = zmq.Poller() >> poller.register(fd, zmq.POLLIN) >> events = poller.poll(-1) >> os.lseek(fd, 0, 0) >> val = os.read(fd, 2) >> print 'zmq poller returned', val >> >> path = '/sys/class/gpio/gpio89/value' >> #the gpio pin has already been configured as input, and to trigger an >> event >> #on a rising edge by doing "echo 'rising' > >> /sys/class/gpio/gpio89/edge" >> fd = os.open(path, os.O_RDONLY | os.O_NONBLOCK) >> >> #this function blocks until I push the button >> zmq_wait(fd) #returns immediately >> >> wait(fd) #blocks until I push the button connected to the gpio pin >> >> >> _______________________________________________ >> zeromq-dev mailing list >> [email protected] >> http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> >>
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
