更新USB设备列表

时间:2012-03-29 19:33:14

标签: java hardware

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

1 个答案:

答案 0 :(得分:5)

这个问题似乎是半设计,半实现。看起来你最关心的是找到像jUSB这样的Java USB服务来管理来自系统的hotplug事件,让你有一个通过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中,我们发现了这一点:

  

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

     

#某些内核版本存在错误,并且在更新之前不会更新设备节点       唤醒等待设备文件的线程后的几秒钟。       如果您没有在中等负载系统上获得热插拔事件,       使用民意调查。

     

#注意,由于新的(buggy?)内核行为破坏了javax.usb,因此默认为       真的!

     

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

     

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

javax-usb/src/javax/usb/event/UsbServicesListener.java中,我们看到了一个用于设置USB事件监听器的模型,您可以在设备连接或从系统分离时继续使用。外部没有提供关于此是否有效的文档,然而,文档本身似乎大部分都是8年。

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

目前,在存在增强型硬件或热插拔支持之前,轮询仍然是最佳解决方案。

Additional reference implementation of javax-usb