更新USB设备列表

pus*_*tic 4 java hardware

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

MrG*_*mez 5

这个问题似乎是半设计,半实现.看起来你最关心的是为jUSB等Java USB服务找到一些方法来为系统提供热插拔事件,允许你通过控制反转调用一个事件,而不是运行一个热情地迭代地轮询系统的线程.背景.

您寻求的支持在2005年作为JSR-80实施,并且在所有超越其商业支持的伟大项目中仍然存在,就像javax-usb在SourceForge上一样.请注意,在他们的玩具示例(in javax-usb-example/src/ShowTopology.java)中,他们的首选模型仍然是基于轮询的.

然而,并非所有人都失去了!在属性文件中javax.usb,我们发现:

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

#某些内核版本有一个错误,并且在唤醒等待设备文件的线程后几秒钟才更新设备节点.如果您没有在中等负载系统上获得热插拔事件,请使用轮询.

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

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

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

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

因此,合理的假设虽然支持理论上存在,但它是滞后的,陈旧的,并且迫切需要社区更新.这是SO上这个优秀社区可以帮助修复的事情,所以我将通过直接指向项目本身来开始关闭.

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

(附加参考实施javax-usb)