J'écris une application pilotée par les événements en utilisant libevent, et j'ai besoin de faire un transfert USB en utilisant libusb-1.0.Comment utiliser libusb avec libevent?
Je voulais utiliser libusb_get_pollfds pour obtenir une liste de descripteurs de fichiers (en fds
) et les ajouter à Libevent comme ceci:
const struct libusb_pollfd **fds = libusb_get_pollfds(device->context);
const struct libusb_pollfd *it = *fds;
for(;it != NULL; ++it) {
cout << "Adding fd: " << it->fd << ", " << it->events << endl;
struct event * ev = event_new(base_,
it->fd, it->events | EV_PERSIST,
callbacks::libusb_cb, this);
event_add(ev, 0);
libusb_fds_events.insert(std::make_pair(it->fd, ev));
}
free(fds);
// (...)
// And the callback function:
void callbacks::libusb_cb(evutil_socket_t fd, short what, void *arg) {
Server *s = reinterpret_cast<Server*>(arg);
libusb_handle_events_timeout(s->device_->context, 0);
}
Aussi, j'utiliser libusb_set_pollfd_notifiers pour ajouter/supprimer fds de libusb_fds_events
.
Le problème est que j'obtiens beaucoup de fds étranges dans la liste retournée par libusb (par exemple, je reçois plusieurs fois stdin
(!) Avec un événement égal à 0).
Est-ce que je l'utilise correctement?