[zeromq-dev] zmq_poll on a gpio file descriptor on a beaglebone

Eric Hill eric at ijack.net
Fri Mar 1 01:14:23 CET 2013


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" <eric.hill at gmail.com> 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" <craigswank at gmail.com> 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
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20130228/064dd87a/attachment.htm>


More information about the zeromq-dev mailing list