[Haskell-cafe] Need comments on a libusb asynchronous select/poll loop

Bas van Dijk v.dijk.bas at gmail.com
Wed Apr 20 17:22:09 CEST 2011


On 20 April 2011 17:04, Johan Tibell <johan.tibell at gmail.com> wrote:
> On Tue, Apr 19, 2011 at 10:36 PM, Bas van Dijk <v.dijk.bas at gmail.com> wrote:
>> On 19 April 2011 15:06, John Obbele <john.obbele at gmail.com> wrote:
>>        -- Step 3 is the most important step. Submitting the transfer:
>>        handleUSBException $ c'libusb_submit_transfer transPtr
>>
>>        -- TODO: Now we need to do the complicated stuff described in:
>>        -- http://libusb.sourceforge.net/api-1.0/group__poll.html
>>        --
>>        -- First we need the function:
>>        -- getPollFds ∷ Ctx → IO [C'libusb_pollfd]
>>        --
>>        -- A C'libusb_pollfd:
>>        -- http://libusb.sourceforge.net/api-1.0/structlibusb__pollfd.html
>>        -- is a structure containing a file descriptor which should be
>>        -- polled by the GHC event manager and an abstract integer
>>        -- describing the event flags to be polled.
>>        --
>>        -- The idea is to call getPollFds and register the returned
>>        -- file descriptors and associated events with the GHC event
>>        -- manager using registerFd:
>>        -- http://hackage.haskell.org/packages/archive/base/4.3.1.0/doc/html/System-Event.html#v:registerFd
>>        --
>>        -- As the callback we use libusb_handle_events_timeout.
>>        --
>>        -- But here we run into a problem: We need to turn our
>>        -- concrete event integer into a value of the _abstract_ type
>>        -- Event. But the only way to create Events is by evtRead or
>>        -- evtWrite!
>>        --
>>        -- I would really like a solution for this.
>>        -- Bryan, Johan any ideas?
>
> Could you do something like:
>
> toEvent :: Int -> Event
> toEvent flag
>    | flag `xor` (#const POLLIN) = evtRead
>
> etc?

Yes I think I can. I currently copied the code from GHC.Event.Poll:
https://github.com/basvandijk/usb/blob/async/Poll.hsc

> Not that evtRead and evtWrite maps to different things on different platforms.

Do you mean "Not" or "Note"?

Thanks,

Bas



More information about the Haskell-Cafe mailing list