我正在尝试在此示例的 libusb-1.0 代码中实现设备附加/分离事件。
这是我使用它的方式:
void registerCallBack() {
int rc;
libusb_init(NULL);
rc = libusb_hotplug_register_callback(NULL, (libusb_hotplug_event) (LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED |
LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT), LIBUSB_HOTPLUG_ENUMERATE,
0x2047, LIBUSB_HOTPLUG_MATCH_ANY,
LIBUSB_HOTPLUG_MATCH_ANY, hotplug_callback, NULL,
&handle);
if (LIBUSB_SUCCESS != rc) {
printf("Error creating a hotplug callback\n");
libusb_exit(NULL);
return;
}
printf("Success registering callback\n");
}
回调函数本身:
int hotplug_callback(struct libusb_context *ctx, struct libusb_device *dev,
libusb_hotplug_event event, void *user_data) {
printf("EVENT! %d\n", event);
callJava(); // call java method when event fires
return 0;
}
如果我运行此代码并且设备已附加 - 触发事件,因为已LIBUSB_HOTPLUG_ENUMERATE
设置。但是,如果我在程序运行时尝试附加/分离设备,则不会发生任何事情。如果我将 flag 设置为 0 (不是LIBUSB_HOTPLUG_ENUMERATE
),则不会发生任何事件。
我有Ubuntu Linux 13.10
和libusb-1.0.16-3
。回调注册成功。
PS 我在 Java 程序的 C++ 库中使用 libusb。
谢谢!