簡體   English   中英

如何將 libusb 與 libevent 一起使用?

[英]How to use libusb with libevent?

我正在使用 libevent 編寫一個事件驅動的應用程序,我需要使用 libusb-1.0 進行 USB 傳輸。

我想使用libusb_get_pollfds來獲取文件描述符列表(在fds中)並將它們添加到 libevent 中,如下所示:

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);
}

另外,我使用libusb_set_pollfd_notifierslibusb_fds_events添加/刪除 fds。

問題是我在 libusb 返回的列表上得到了許多奇怪的 fds(例如,我得到stdin (.) 多次,事件等於 0)。

我是否以正確的方式使用它?

我在代碼中發現了一個錯誤。 它應該是:

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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM