2012-03-29 120 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