Support event mode for drivers
Current implementation forces poll loop every one second or so,
this consume CPU and power.
This changeset adds the ability for a driver to provide file
descriptor for event handling, removing the need to poll.
Only the CCID USB driver was modified to use this new interface.
One issue... I had to reset USB device after first communication,
I don't believe it is something relates to what I've done.
Only Linux USB interface was modifid to use this new interface.
All other drivers/environments should fallback into the poll mode.
New driver methods:
before_command
Executed before command, makes it easy to remove event capture.
after_command
Execute after command, makes it easy to add event capture.
get_eventfd
Get an event fd out of the driver, if unsupported -1 should
be returned, this fallback into the poll mode.
event
Event method to call with th evntfd is signaled.
New USB methods:
ifd_usb_get_eventfd
Get event fd to poll for events.
ifd_usb_capture_event
None blocking capture.
Available at branch [1].
Please check it out.
Chaskiel, please look at the ccid_open_usb(), and try to help me
figure out why I had to add ifd_sysdep_usb_reset() in order to make
the reader respond to the initial status query.
Another improvement I thought about is to power off the card if it is
unlocked after a period of time.
Alon.
[1]
https://www.opensc-project.org/svn/openct/branches/alonbl/usb-ccid-reduce-busy
On 12/21/08, Alon Bar-Lev <[email protected]> wrote:
> Thanks Andreas,
>
> Thank you for your comment.
> I am for dropping old kernels hacks... And provide better solution for users.
> I now understand why mainloop wakes up...
> i will try to implement something.
>
>
> Alon.
>
>
> On 12/21/08, Andreas Jellinghaus <[email protected]> wrote:
> > in usb apps you can't poll a usb file handle without timeout -
> > older kernels have a bug, where device removed event is not
> > handled when it happends, but the application is only notified
> > after the timeout is over. if that is 0, the applications waits
> > forever.
> >
> > thats why we had a loop with 1 second or so in the openct pre-decessor.
> > hmm, not 100% sure how openct works in that regards. but we can change
> > the code, I think kernels with this bug are no longer relevant / we
> > can expect kernels to be fixed now.
> >
> > also we could optimize those loops - make sure if nothing happends, that
> > nothing is written to the syslog (unless someone has a very high debug
> > option). but I guess the code is already ok.
> >
> > when it comes to the individual drivers: sorry, I have no clue about them
> > other than the very simple etoken driver and friends.
> >
> > Regards, Andreas
> >
> >
>
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel