[Twisted-Python] libusb-1 file descriptors

I'm trying to integrate Twisted with libusb-1 The libusb-1 Python wrapper offers a USBPoller class to "allow integration of USB event polling in a file-descriptor monitoring event loop." The class expects to receive a 'poller' object, again quoting from the documentation: poller is a polling instance implementing the following methods: - register(fd, event_flags) event_flags have the same meaning as in poll API (POLLIN & POLLOUT) - unregister(fd) - poll(timeout) timeout being a float in seconds, or None if there is no timeout. It must return a list of (descriptor, event) pairs. Note: USBPoller is itself a valid poller. I feel like it should be obvious, but I can't see what would be the correct way to integrate this with Twisted. My particular application is to enable networking over the ANT+ protocol via a small USB key. My approach is that I'm trying to write a transport. When that's working I can start to build a Protocol. Is that sound? Any pointers would be welcome. The USBPoller class can be viewed here: https://github.com/vpelletier/python-libusb1/blob/master/usb1.py Thanks Dónal

On 02/12/2012 04:13 AM, Donal McMullan wrote:
I've only quickly scanned it, but actually it doesn't look obvious to me at all. I *think* that you want to ignore USBPoller entirely; it looks like it's some sort of mini reactor thing, although it's not obvious to me how it ever DOES anything. USBContext looks to be the "thing" that you plug in an event loop to. However, I'm not certain (perhaps others will comment) that it makes sense to integrate it into the Twisted event loop - the file descriptor "ready" events don't seem to trigger corresponding "read" events, and the USB protocol implementation isn't accessible, so the Twisted model of: file ready event -> transport does read -> protocol dataReceived ...doesn't really apply. It may be just as easy to write wrapper around your protocol in plain non-Twisted python, and talk to it from Twisted over a pipe/process/whatever.

On 02/12/2012 04:13 AM, Donal McMullan wrote:
I've only quickly scanned it, but actually it doesn't look obvious to me at all. I *think* that you want to ignore USBPoller entirely; it looks like it's some sort of mini reactor thing, although it's not obvious to me how it ever DOES anything. USBContext looks to be the "thing" that you plug in an event loop to. However, I'm not certain (perhaps others will comment) that it makes sense to integrate it into the Twisted event loop - the file descriptor "ready" events don't seem to trigger corresponding "read" events, and the USB protocol implementation isn't accessible, so the Twisted model of: file ready event -> transport does read -> protocol dataReceived ...doesn't really apply. It may be just as easy to write wrapper around your protocol in plain non-Twisted python, and talk to it from Twisted over a pipe/process/whatever.
participants (3)
-
Donal McMullan
-
gelin yan
-
Phil Mayers