2012-03-29 89 views
4

我想创建自动更新USB设备列表(不仅海量存储)的模块。现在它非常粗鲁 - 它有额外的线程,在1秒钟之后更新设备列表。但是,也许你知道如何处理一些插件事件,这些插件事件会生成操作系统(例如Windows XP或更高版本),或者如何简化这个过程。感谢您的时间!usb设备更新列表

回答

5

这个问题似乎是半设计,半实施。看起来您最关心的是如何找到某种方法来为诸如jUSB之类的Java USB服务提供服务,以便通过系统为热插拔事件提供服务,从而让您可以通过inversion of control召开一个事件,而不是在后台运行热情而又迭代地轮询系统的线程。

您寻求的支持was implemented back in 2005 as JSR-80,并且似乎依靠所有优秀的项目超越了他们的商业支持,如javax-usb on SourceForge。请注意,在他们的玩具示例中(javax-usb-example/src/ShowTopology.java),其首选模型仍以轮询为基础。

然而,并非所有人都失去了!在the properties file for javax.usb,我们发现这样的:

#如果轮询应该使用,而不是等待一个热插拔 通知。

#某些内核版本有一个错误,并且在唤醒等待设备文件的线程几秒钟之后才会更新设备节点(s),直到 。 如果您没有在中等到重负载的系统上获取热插拔事件,则 将使用轮询。

#请注意,由于新的(buggy?)内核行为会中断javax.usb,因此默认为 为true!

#如果你知道你的内核没有损坏,你可以将它设置为false。

#com.ibm.jusb.os.linux.LinuxUsbServices.topologyUpdateUsePolling =真

而且在javax-usb/src/javax/usb/event/UsbServicesListener.java,我们看到了建立一个USB事件监听器,你可以继续当一个设备使用一个模型连接或从系统分离。然而,没有关于是否工作的外部文件,,而且文件本身似乎大多是8岁。

因此,合理的假设是,虽然支持理论上存在,但它是滞后的,陈旧的,迫切需要社区进行更新。这是SO上的这个好社区可以帮助解决的事情,所以我将开始关闭pointing directly to the project itself.

现在,直到增强的硬件或热插拔支持存在为止,轮询仍然是最佳解决方案。

Additional reference implementation of javax-usb